diff --git a/Directory.Packages.props b/Directory.Packages.props index 91574ec319..67c100c20b 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -138,8 +138,8 @@ - - + + diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json index 69796af696..faf7c0b36d 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json @@ -223,6 +223,12 @@ "AbpStudio": "ABP Studio", "ExtraMonths": "{0}EXTRA MONTHS", "RSS": "RSS", - "RSSFeed": "RSS Feed" + "RSSFeed": "RSS Feed", + "Articles": "Articles", + "Organizations": "Organizations", + "ManageAccount": "Manage Account", + "CommunityProfile": "Community Profile", + "BlogProfile": "Blog Profile", + "Tickets": "Tickets" } } diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index b14d1ffa70..92d7450319 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -601,7 +601,7 @@ "PaymentSucceed_ViewOrganization": "Click here to view organization", "Purchase_TotalAnnualPrice": "TOTAL (annual fee)", "Purchase_TrainingPrice": "Training Price", - "Purchase_OnboardingTraining": "ABP Onboarding & Web Application Development Live Training", + "Purchase_OnboardingTraining": "Onboarding & Web Application Development Live Training", "TotalDeveloperPrice": "Total Developer Price", "Purchase_PricePerDeveloper": "{0} {1} per developer", "Purchase_IncludedDeveloperInfo": "{0} {1} included.", @@ -978,10 +978,10 @@ "Purchase_DevelopersAlreadyIncluded": "{0} developers already included", "1Year": "1 year", "{0}Years": "{0} years", - "1YearLicense": "1 year license", - "{0}YearsLicense": "{0} years license", - "1AdditionalDeveloper": "1 additional developer", - "{0}AdditionalDevelopers": "{0} additional developers", + "1YearLicense": "1 Year License", + "{0}YearsLicense": "{0} Years License", + "1AdditionalDeveloper": "1 Additional Developer", + "{0}AdditionalDevelopers": "{0} Additional Developers", "Discount": "Discount ({0}%)", "Summary": "Summary", "TrainingPack": "Training pack", @@ -1081,6 +1081,10 @@ "CampaignInfo": "Buy a new license or renew your existing license and get an additional 2 months at no additional cost! This offer is valid for all license plans. Ensure you take advantage of this limited-time promotion to expand your access to premium features and upgrades.", "HurryUpLastDay": "Hurry Up! Last Day: {0}", "CreatingCRUDPagesWithABPSuite": "Creating CRUD pages with ABP Suite", - "Testimonials": "Testimonials" + "Testimonials": "Testimonials", + "MultipleYearDiscount": "Multiple Year Discount", + "CampaignDiscountText": "Black Friday Discount", + "CampaignDiscountName": "Black Friday", + "CampaignName:BlackFriday": "Black Friday" } } diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json index 3c8c8ac397..3889b5ec77 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json @@ -248,6 +248,10 @@ "ShareOnTwitter": "Share on Twitter", "ShareOnLinkedIn": "Share on LinkedIn", "MoreFrom{0}": "More from {0}", - "SeeAllFrom{0}": "See all from {0}" + "SeeAllFrom{0}": "See all from {0}", + "MostWatched": "Most Watched", + "Articles({0})": "Articles ({0})", + "Videos({0})": "Videos ({0})", + "LatestArticles": "Latest Articles" } } diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json index 0fff7ed719..7b0394bac5 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json @@ -433,6 +433,10 @@ "PackageDetailPage_SeeDocumentation": "See the documentation to learn how to use this package in your applications.", "PackageDetailPage_InstallingUsingPMC": "3: Installing with the Package Manager Console", "PackageDetailPage_InstallingUsingPMCDescription1": "Open the Package Manager Console in Visual Studio (Tools -> Nuget Package Manager -> Package Manager Console) and execute the following command", - "UIOptions": "UI Options" + "UIOptions": "UI Options", + "Testimonials": "Testimonials", + "CoolestCompaniesUseABPFramework": "Coolest Companies Use ABP Framework", + "Index_Page_Testimonial_1": "ABP Framework is not just a tool but a catalyst that has accelerated my growth as a developer. It has made it possible for me to build new features faster than ever before, reminiscent of the experiences of other users. The unified coding pattern has streamlined my projects, giving me more time to focus on creating rather than troubleshooting.\nI would say the ABP Framework has been the cornerstone of my early professional journey. It has facilitated my transition from an aspiring developer to a confident professional ready to make a mark in the software world. I am looking forward to the exciting projects that await me, knowing that ABP will be there to guide me. It is more than just a product; it's a partner in success.", + "Index_Page_Testimonial_2": "ABP Framework is not only a framework, it is also a guidance for project development/management, because it provides DDD, GenericRepository, DI, Microservice, Modularity trainings. Even if you are not going to use framework itself, you can develop yourself with docs.abp.io which is well and professionally prepared. (OpenIddict, Redis, Quartz etc.)\nBecause many thing pre-built, it shortens project development time significantly. (Such as login page, exception handling, data filtering-seeding, audit logging, localization, auto api controller etc.)\nAs an example from our app, i have used Local Event Bus for stock control. So, I am able to manage order movements by writing stock handler.\nIt is wonderful not to lose time for CreationTime, CreatorId. They are filled automatically." } } diff --git a/docs/en/Community-Articles/2023-04-15-Converting-Create-Edit-Modal-To-Page/POST.md b/docs/en/Community-Articles/2023-04-15-Converting-Create-Edit-Modal-To-Page/POST.md index a8f1aeadfa..73d2e6bad5 100644 --- a/docs/en/Community-Articles/2023-04-15-Converting-Create-Edit-Modal-To-Page/POST.md +++ b/docs/en/Community-Articles/2023-04-15-Converting-Create-Edit-Modal-To-Page/POST.md @@ -315,7 +315,7 @@ import { CreateBookComponent } from './create-book/create-book.component'; import { EditBookComponent } from './edit-book/edit-book.component'; const routes: Routes = [ - { path: '', component: BookComponent, canActivate: [AuthGuard, PermissionGuard] }, + { path: '', component: BookComponent, canActivate: [authGuard, permissionGuard] }, { path: 'create', component: CreateBookComponent }, { path: 'edit/:id', component: EditBookComponent }, ]; diff --git a/docs/en/Community-Articles/2023-10-23-NET-8-Feature-containers/POST.md b/docs/en/Community-Articles/2023-10-23-NET-8-Feature-containers/POST.md new file mode 100644 index 0000000000..dc0f96e726 --- /dev/null +++ b/docs/en/Community-Articles/2023-10-23-NET-8-Feature-containers/POST.md @@ -0,0 +1,30 @@ +# New Containers feature with NET 8.0 + +This article will show you the new feature of containers with NET 8.0. + +## Non-root user + +The `Non-root user` feature on net 8 is a security measure that allows users to have limited access to the system without having full administrative privileges. Hosting containers as `non-root` aligns with the principle of least privilege. +It’s free security provided by the operating system. If you run your app as root, your app process can do anything in the container, like modify files, install packages, or run arbitrary executables. +That’s a concern if your app is ever attacked. If you run your app as non-root, your app process cannot do much, greatly limiting what a bad actor could accomplish. + +## Default ASP.NET Core port changed from 80 to 8080 + +In .NET 8, there has been a change in the default port used by ASP.NET Core applications. Previously, the default port assigned to ASP.NET Core applications was `80`. However, starting from .NET 8, the default port has been changed to `8080`. +This change was made to avoid conflicts with other applications and services that commonly use port 80, such as web servers like IIS or Apache. By using port 8080 as the default, there is less potential for clashes and easier deployment of ASP.NET Core applications alongside other services. + +It's important to note that this change only affects the default port used when an ASP.NET Core application is run without explicitly specifying a port. + +If you want your application to continue using port 80, you can still specify it during the application launch or configure it in the application settings. + +* Recommended: Explicitly set the `ASPNETCORE_HTTP_PORTS`, `ASPNETCORE_HTTPS_PORTS``, and `ASPNETCORE_URLS` environment variables to the desired port. Example: `docker run --rm -it -p 9999:80 -e ASPNETCORE_HTTP_PORTS=80 `` +* Update existing commands and configuration that rely on the expected default port of port 80 to reference port 8080 instead. Example: `docker run --rm -it -p 9999:8080 `` + +> The `dockerfile` of ABP templates has been updated to use port `80`. + +## References + +- [Secure your .NET cloud apps with rootless Linux Containers](https://devblogs.microsoft.com/dotnet/securing-containers-with-rootless/) +- [Containers breaking changes](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#containers) +- [ASP.NET Core apps use port 8080 by default](https://learn.microsoft.com/en-us/dotnet/core/compatibility/8.0#containers) +- [Docker images for ASP.NET Core](https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/docker/building-net-docker-images?view=aspnetcore-8.0) diff --git a/docs/en/Community-Articles/2023-10-23-NET-8-Feature-raw-sql-queries-for-unmapped-types/POST.md b/docs/en/Community-Articles/2023-10-23-NET-8-Feature-raw-sql-queries-for-unmapped-types/POST.md new file mode 100644 index 0000000000..11d8e67563 --- /dev/null +++ b/docs/en/Community-Articles/2023-10-23-NET-8-Feature-raw-sql-queries-for-unmapped-types/POST.md @@ -0,0 +1,53 @@ +# New Raw SQL queries for unmapped types feature with EF Core 8.0 + +## Introduction + +I would love to talk about the new feature in EF Core 8.0, specifically the `raw SQL queries for unmapped types`. +This feature was recently introduced by Microsoft and is aimed at providing more flexibility and customization in database queries. + +## What is the raw SQL queries for the unmapped types feature? + +To give you a better understanding, let's look at a sample repository method with the ABP framework. +Here is an example of a raw SQL query using the new feature: + +````csharp +public interface IAuthorRepository : IRepository +{ + Task> GetAllAuthorNamesAsync(); +} + +public class AuthorIdWithNames +{ + public Guid Id { get; set; } + + public string Name { get; set; } +} + +public class EfCoreAuthorRepository : EfCoreRepository, IAuthorRepository +{ + public EfCoreAuthorRepository(IDbContextProvider dbContextProvider) + : base(dbContextProvider) + { + } + + public virtual async Task> GetAllAuthorNamesAsync() + { + return await (await GetDbContextAsync()).Database.SqlQuery(@$"SELECT Id, Name FROM Authors").ToListAsync(); + } +} +```` + +In this code, we can see that we are using the `SqlQuery` method to execute a raw SQL query on a custom type, `AuthorIdWithNames` in this case. This allows us to retrieve data that may not be mapped to any of our entity classes in the context. + +## In summary + +This feature can be particularly useful in scenarios where we need to access data from tables or views that are not directly mapped to our entities. It also provides an alternative to using stored procedures for querying data. + +However, it's important to note that using raw SQL queries can increase the risk of SQL injection attacks. So, it's recommended to use parameterized queries to prevent this. Additionally, this feature may not work with certain database providers, so it's important to check for compatibility before implementing it. + +In conclusion, the raw SQL queries for unmapped types feature in EF Core 8.0 is a great addition for developers looking for more flexibility in database queries. It allows us to work with data that may not be directly mapped to our entities and can be a useful tool in certain scenarios. Just remember to use parameterized queries and check for compatibility before implementing it. + +## References + +- [Raw SQL queries for unmapped types](https://learn.microsoft.com/en-us/ef/core/what-is-new/ef-core-8.0/whatsnew#raw-sql-queries-for-unmapped-types) +- [SQL Queries](https://learn.microsoft.com/en-us/ef/core/querying/sql-queries#querying-scalar-(non-entity)-types) diff --git a/docs/en/Community-Articles/2023-10-28-EF-Core-8-Primitive-Collections/POST.md b/docs/en/Community-Articles/2023-10-28-EF-Core-8-Primitive-Collections/POST.md new file mode 100644 index 0000000000..79d1b100c9 --- /dev/null +++ b/docs/en/Community-Articles/2023-10-28-EF-Core-8-Primitive-Collections/POST.md @@ -0,0 +1,118 @@ +# EF Core 8 Primitive collections + +What can we do when we want to store a list of primitive types? Before EF Core 8, there were two options: + +- Create a wrapper class and a related table, then add a foreign key linking each value to its owner of the collection. +- Use [value converter](https://learn.microsoft.com/en-us/ef/core/modeling/value-conversions) to serialize-deserialize as JSON. + +The first option covers most scenarios if we need to add some additional properties to this type but let's say we're never gonna need this type additionality. + +## Which collection types are supported ? + +EF Core has the capability to map the `IEnumerable` public properties that have both a getter and a setter, with the `T` representing a primitive type + +```csharp +public class PrimitiveCollections +{ + public IEnumerable Ints { get; set; } + public ICollection Strings { get; set; } + public ISet DateTimes { get; set; } + public IList Dates { get; set; } + public uint[] UnsignedInts { get; set; } + public List Booleans { get; set; } + public List Urls { get; set; } +} +``` + +> Some generic arguments are not considered primitive on the database side, such as `uint` and `Uri`. However, these types are also considered as primitive because there are [built-in value converters](https://learn.microsoft.com/en-us/ef/core/modeling/value-conversions?tabs=data-annotations#built-in-converters). + +## Demo + +In this sample, we have a `Car` class with a `Color` enum, and the `Car` class has a `Colors` property. + +```csharp +public enum Color +{ + Black, + White, + Red, + Blue +} + +public class Car +{ + public int Id { get; set; } + public string Brand { get; set; } + public string Model { get; set; } + public ISet Colors { get; set; } = new HashSet(); + + public Car(string brand, string model) + { + Brand = brand; + Model = model; + } +} +``` + +When we want to list the cars if they have any of the specific colors. + +```csharp +var colors = new HashSet { Color.Blue, Color.White }; +var cars = await context + .Cars + .Where(x=> x.Colors.Intersect(colors).Any()) + .ToListAsync(); +``` + +The SQL result looks like this; as you can see, it sends colors as parameters instead of adding them inline. It also uses the `json_each` function to deserialize on the database side. + +```sql +SELECT "c"."Id", "c"."Brand", "c"."Colors", "c"."Model" + FROM "Cars" AS "c" + WHERE EXISTS ( + SELECT 1 + FROM ( + SELECT "c0"."value" + FROM json_each("c"."Colors") AS "c0" + INTERSECT + SELECT "c1"."value" + FROM json_each(@__colors_0) AS "c1" + ) AS "t") + +``` + +When we insert to the car table. + +```csharp +var car = new Car("Maserati", "GranTurismo") +{ + Colors = new HashSet() + { + Color.Black, + Color.Blue + } +}; +context.Cars.Add(car); +await context.SaveChangesAsync(); +``` + +The SQL statement looks like this, and as you can see, it automatically serializes into the Colors parameter as JSON. + +```sql + Executed DbCommand (0ms) [Parameters= + [@p0='Maserati' (Nullable = false) (Size = 8), + @p1='[0,3]' (Nullable = false) (Size = 5), + @p2='Flow' (Nullable = false) (Size = 4) + ], CommandType='Text', CommandTimeout='30'] + INSERT INTO "Cars" ("Brand", "Colors", "Model") + VALUES (@p0, @p1, @p2) + RETURNING "Id"; +``` +## Conclusion + +We don't need to do anything if we just use a collection of primitive types. It serializes and deserializes them as JSON automatically. Additionally, it sends the primitive collection as a parameter to cache the query. + +## References + +- [EF Core 8 Primitive collections](https://learn.microsoft.com/en-us/ef/core/what-is-new/ef-core-8.0/whatsnew#primitive-collection-properties) +- [.NET Data Community Standup - Collections of primitive values in EF Core](https://www.youtube.com/watch?v=AUS2OZjsA2I) diff --git a/docs/en/Community-Articles/2023-10-30-Enhancements-to-JSON-column-mapping/POST.md b/docs/en/Community-Articles/2023-10-30-Enhancements-to-JSON-column-mapping/POST.md new file mode 100644 index 0000000000..db8f72ca17 --- /dev/null +++ b/docs/en/Community-Articles/2023-10-30-Enhancements-to-JSON-column-mapping/POST.md @@ -0,0 +1,124 @@ +# EF Core 8 - Enhancements to JSON column mapping + +In this article, we will examine the enhancements introduced in EF Core 8 for the JSON column feature, building upon the foundation laid by [JSON columns in Entity Framework Core 7](https://community.abp.io/posts/json-columns-in-entity-framework-core-7-cjaom76j). + +## The entity classes we will be using in the article + +```csharp +public class Person +{ + public int Id { get; set; } + [Required] + public string Name { get; set; } + [Required] + public ContactDetails ContactDetails { get; set; } +} + +public class ContactDetails +{ + public List
Addresses { get; set; } = new(); + public string? Phone { get; set; } +} + +public class Address +{ + public Address(string street, string city, string postcode, string country) + { + Street = street; + City = city; + Postcode = postcode; + Country = country; + } + + public string Street { get; set; } + public string City { get; set; } + public string Postcode { get; set; } + public string Country { get; set; } + public bool IsMainAddress { get; set; } +} +``` + +## The DbContext class we will be using in the article + +```csharp +public class AppDbContext : DbContext +{ + public DbSet Persons { get; set; } = null!; + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { +#if SQLSERVER + optionsBuilder.UseSqlServer("Server=localhost;Database=EfCore8Json;Trusted_Connection=True;TrustServerCertificate=True"); +#elif SQLITE + optionsBuilder.UseSqlite("Data Source=EfCore8Json.db"); +#endif + base.OnConfiguring(optionsBuilder); + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity(b => + { + b.ToTable("Persons"); + b.HasKey(x => x.Id); + b.Property(x => x.Name).IsRequired(); + b.OwnsOne(x => x.ContactDetails, cb => + { + cb.ToJson(); + cb.Property(x => x.Phone); + cb.OwnsMany(x => x.Addresses); + }); + }); + + base.OnModelCreating(modelBuilder); + } +} +``` + +## Translate element access into JSON arrays + +EF Core 8 supports indexing in JSON arrays when executing queries. For example, the following query returns individuals whose first address is the main address in the database: + +```csharp +var query = dbContext.Persons + .Select(x => x.ContactDetails.Addresses[0]) + .Where(x => x.IsMainAddress == true) + .ToListAsync(); +``` + +The generated SQL query is as follows when using SQL Server: + +```sql +SELECT JSON_QUERY([p].[ContactDetails], '$.Addresses[0]'), [p].[Id] +FROM [Persons] AS [p] +WHERE CAST(JSON_VALUE([p].[ContactDetails], '$.Addresses[0].IsMainAddress') AS bit) = CAST(1 AS bit) +``` + +> Note: If you attempt to access an index that is outside of the array, it will return null. + +## JSON Columns for SQLite + +In EF Core 7, JSON column mapping was supported for Azure SQL/SQL Server. In EF Core 8, this support has been extended to include SQLite as well. + +### Queries into JSON columns + +The following query returns individuals whose first address is the main address in the database: + +```csharp +var query = dbContext.Persons + .Select(x => x.ContactDetails.Addresses[0]) + .Where(x => x.IsMainAddress == true) + .ToListAsync(); +``` + +The generated SQL query is as follows when using SQLite: + +```sql +SELECT "p"."ContactDetails" ->> '$.Addresses[0]', "p"."Id" +FROM "Persons" AS "p" +WHERE "p"."ContactDetails" ->> '$.Addresses[0].IsMainAddress' = 0 +``` + +## References + +- [EF Core 8 - Enhancements to JSON column mapping](https://learn.microsoft.com/en-us/ef/core/what-is-new/ef-core-8.0/whatsnew#enhancements-to-json-column-mapping) \ No newline at end of file diff --git a/docs/en/Community-Articles/2023-10-30-NET-8-ASP-NET-Core-Metrics/POST.md b/docs/en/Community-Articles/2023-10-30-NET-8-ASP-NET-Core-Metrics/POST.md new file mode 100644 index 0000000000..9142a36be9 --- /dev/null +++ b/docs/en/Community-Articles/2023-10-30-NET-8-ASP-NET-Core-Metrics/POST.md @@ -0,0 +1,196 @@ +# .NET 8 - ASP.NET Core Metrics + +In this article, I'll show you the new built-in metrics of .NET 8, which are basically numerical measurements reported over time in your application and can be used to monitor the health of your application and generate reports according to those numerical values. We will see what the metrics are, why to use them, and how to use them in detail. So, let's dive in. + +## What are Metrics? + +Metrics are numerical measurements reported over time. These measurements are crucial for monitoring the health of an application and generating alerts when necessary. In the context of a web service, various metrics can be tracked, such as: + +* Requests per second. +* Response time. +* Status code counts etc... + +These metrics are not just collected; they are reported to a monitoring system at regular intervals. By doing so, the development and operations teams can visualize these metrics on dashboards. These dashboards provide a real-time overview of the application's performance and health. + +## Pre-Built Metrics + +ASP.NET Core has many built-in metrics. You can see the following figure for a list of built-in metrics for ASP.NET Core: + +![](built-in-metrics.png) + +> See https://learn.microsoft.com/en-us/dotnet/core/diagnostics/built-in-metrics-aspnetcore and https://github.com/dotnet/aspnetcore/issues/47536 for all built-in metrics and their descriptions. + +For example, we have the `kestrel-current-connections` metric that shows the _number of connections that are currently active on the server_ and the `http-server-request-duration` metric that shows _the duration of HTTP requests on the server_. + +All of these and other built-in metrics are produced by using the [**System.Diagnostics.Metrics**](https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.metrics) API and with a small amount of code, we can use & view them. + +## Using Pre-Built Metrics + +Let's see the pre-built metrics in action. + +Create a new ASP.NET Core app with the following command and change the directory to the created application folder: + +```bash +dotnet new web -o MetricsDemo +cd MetricsDemo +``` + +After that, open the application in your favorite IDE and add the following service registration code to your application: + +```csharp +var builder = WebApplication.CreateBuilder(args); + +builder.Services.AddOpenTelemetry() + .WithMetrics(builder => + { + builder.AddPrometheusExporter(); + + builder.AddMeter("Microsoft.AspNetCore.Hosting", + "Microsoft.AspNetCore.Server.Kestrel"); + builder.AddView("http.server.request.duration", + new ExplicitBucketHistogramConfiguration + { + Boundaries = new double[] { 0, 0.005, 0.01, 0.025, 0.05, + 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 } + }); + }); +``` + +Here, we have done the following steps: + +* The `AddOpenTelemetry` method registers the required **OpenTelemetry** services into the DI container. +* In the `WithMetrics` method, we add pre-built metrics to the `OpenTelemetryBuilder` in the `AddMeter` method (_Microsoft.AspNetCore.Hosting_ and _Microsoft.AspNetCore.Server.Kestrel_ are pre-built metrics provided by ASP.NET Core). +* We have also used the `AddView` method to customize the output of the metrics by the SDK. It can also be used to customize which [Instruments](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/api.md#instrument) are to be processed or ignored. + +After making the related configurations, let's add the middleware below and view the metrics: + +```csharp +app.MapPrometheusScrapingEndpoint(); + +app.MapGet("/", () => +{ + Thread.Sleep(2000); + + return "Hello, ABP Community member: " + DateTime.Now.Ticks.ToString()[^3..]; +}); +``` + +* `MapPrometheusScrapingEndpoint`: Adds the OpenTelemetry Prometheus scraping endpoint middleware to the pipeline and then we can see the all metrics by navigating to the **/metrics** endpoints (optional): + +![](metrics-endpoint.png) + +### View Metrics + +You can use the `dotnet-counters` command-line tool, which allows you to view live metrics for .NET Core apps. You can run the following command to install the tool: + +```bash +dotnet tool update -g dotnet-counters +``` + +After the tool is installed, you can run the application and by running the `dotnet-counters` tool in a terminal, you can monitor for the specific metrics: + +```bash +dotnet-counters monitor -n MetricsDemo --counters Microsoft.AspNetCore.Hosting +``` + +When you run the command, it will print a message like the one below and will wait for an initial request to your application: + +```txt +Press p to pause, r to resume, q to quit. + Status: Waiting for initial payload... +``` + +If you send a request to your application, then the related built-in metrics that you have added will be collected and will be shown in the terminal instantly: + +![](built-in-metric-response.png) + +Also, you can check for the other metric that we have used in the configuration, which is _Microsoft.AspNetCore.Server.Kestrel_ by setting it as a counter as in the command below, and when you send a request to your application, you will see different metrics: + +```bash +dotnet-counters monitor -n MetricsDemo --counters Microsoft.AspNetCore.Server.Kestrel +``` + +## Creating Custom Metrics in ASP.NET Core Applications + +So far, we have seen what metrics are, which built-in metrics are provided by ASP.NET Core, the use of the built-in metrics and running the `dotnet-counters` global tool to view these metrics. At this point, let's see how we can create custom metrics and view them via the `dotnet-counters` tool. + +`IMeterFactory` is the recommended service to create *Meter* instances. ASP.NET Core registers the `IMeterFactory` in dependency injection (DI) by default. The meter factory integrates metrics with DI, making isolating and collecting metrics easy. + +Assume that, we want to create a metric that holds the sold products in our application. For that purpose, as a first step, we can create a metric class as follows: + +```csharp +using System.Diagnostics.Metrics; + +namespace MetricsDemo; + +public class ProductMetrics +{ + private readonly Counter _soldProductsCount; + + public ProductMetrics(IMeterFactory meterFactory) + { + var meterInstance = meterFactory.Create("MetricsDemo.ProductStore"); + _soldProductsCount = meterInstance.CreateCounter("metricsdemo.productstore.sold_products_count"); + } + + public void IncreaseSoldProductCount(int quantity) + { + _soldProductsCount.Add(quantity); + } +} +``` + +In this class, we are creating a counter and defining metrics that we want to collect and view. `MetricsDemo.ProductStore` is the **counter name** and `metricsdemo.productstore.sold_products_count` is the **metric**. In our example, we need to register this class with a `Singleton` lifetime because we don't want to reset the counter and want to keep it during the application runtime. + +> The [System.Diagnostics.Metrics.Meter](https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.metrics.meter) type is the entry point for a library to create a named group of instruments. Instruments record the numeric measurements that are needed to calculate metrics. Here we used [CreateCounter](https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.metrics.meter.createcounter) to create a Counter instrument named _metricsdemo.productstore.sold_products_count_. + +So, register the type with the DI container in the `Program.cs` file (or you can implement the `ISingletonDependency` interface, if you are using an ABP based application): + +```csharp +builder.Services.AddSingleton(); +``` + +Then, we can inject this class and increase the sold product count whenever it's needed. Since we have registered it in DI, we can use it in minimal APIs as in the following example: + +```csharp +app.MapPost("/complete-sale", ([FromBody] ProductSoldModel model, ProductMetrics metrics) => +{ + // ... business logic such as saving the product to the database etc... ... + + metrics.IncreaseSoldProductCount(model.Quantity); +}); +``` + +Whenever a request is made to this endpoint the metric that we've defined (_metricsdemo.productstore.sold_products_count_) will be increased and we can see this metric via the `dotnet-counters` global tool. You can run the following command to see the metrics: + +```bash +dotnet-counters monitor -n MetricsDemo --counters MetricsDemo.ProductStore +``` + +Here is an example output that you would see if you have made a POST request to the `/complete-sale` endpoint: + +```txt +Press p to pause, r to resume, q to quit. + Status: Paused + +[MetricsDemo.ProductStore] + metricsdemo.productstore.sold_products_count (Count / 1 sec) 20 +``` + +### Advanced: View Metrics in Prometheus & Grafana - Building Dashboards + +It's a common requirement to build a dashboard and monitor the metrics and check the health of your applications. At that point, you can expose the metrics and scrape them using the [Prometheus](https://learn.microsoft.com/en-us/aspnet/core/log-mon/metrics/metrics?view=aspnetcore-8.0#set-up-and-configure-prometheus) and build a dashboard by using the [Grafana](https://learn.microsoft.com/en-us/aspnet/core/log-mon/metrics/metrics?view=aspnetcore-8.0#show-metrics-on-a-grafana-dashboard). + +If you want to build a dashboard, you can see [this documentation from Microsoft](https://learn.microsoft.com/en-us/aspnet/core/log-mon/metrics/metrics?view=aspnetcore-8.0#view-metrics-in-grafana-with-opentelemetry-and-prometheus), which shows how to set up the **Prometheus server** and show metrics on a **Grafana** dashboard. + +Also, you can check [this video](https://www.youtube.com/watch?v=A2pKhNQoQUU) if you want to see it in action. + +## Conclusion + +In this article, I've shown you the new built-in metrics of .NET8, described what metrics are, which pre-built metrics are provided by ASP.NET Core, how to use & view these pre-built metrics and finally, I have shown you how to create custom metrics and view them in a dashboard. If you want to learn more about the **Metrics System of .NET**, you can check out the references that I have shared below. + +## References + +* https://learn.microsoft.com/en-us/aspnet/core/log-mon/metrics/metrics?view=aspnetcore-8.0 +* https://devblogs.microsoft.com/dotnet/announcing-dotnet-8-preview-5/ +* https://www.youtube.com/watch?v=A2pKhNQoQUU diff --git a/docs/en/Community-Articles/2023-10-30-NET-8-ASP-NET-Core-Metrics/built-in-metric-response.png b/docs/en/Community-Articles/2023-10-30-NET-8-ASP-NET-Core-Metrics/built-in-metric-response.png new file mode 100644 index 0000000000..035e76de7d Binary files /dev/null and b/docs/en/Community-Articles/2023-10-30-NET-8-ASP-NET-Core-Metrics/built-in-metric-response.png differ diff --git a/docs/en/Community-Articles/2023-10-30-NET-8-ASP-NET-Core-Metrics/built-in-metrics.png b/docs/en/Community-Articles/2023-10-30-NET-8-ASP-NET-Core-Metrics/built-in-metrics.png new file mode 100644 index 0000000000..7cf3a1896d Binary files /dev/null and b/docs/en/Community-Articles/2023-10-30-NET-8-ASP-NET-Core-Metrics/built-in-metrics.png differ diff --git a/docs/en/Community-Articles/2023-10-30-NET-8-ASP-NET-Core-Metrics/metrics-endpoint.png b/docs/en/Community-Articles/2023-10-30-NET-8-ASP-NET-Core-Metrics/metrics-endpoint.png new file mode 100644 index 0000000000..70933e0f6e Binary files /dev/null and b/docs/en/Community-Articles/2023-10-30-NET-8-ASP-NET-Core-Metrics/metrics-endpoint.png differ diff --git a/docs/en/Community-Articles/2023-10-31-NET-8-ASP-NET-Core-Minimal-APIs/POST.md b/docs/en/Community-Articles/2023-10-31-NET-8-ASP-NET-Core-Minimal-APIs/POST.md new file mode 100644 index 0000000000..03ca906884 --- /dev/null +++ b/docs/en/Community-Articles/2023-10-31-NET-8-ASP-NET-Core-Minimal-APIs/POST.md @@ -0,0 +1,156 @@ +# New Minimal APIs features in ASP.NET Core 8.0 + +In this article, we will see the new features of Minimal APIs in ASP.NET Core 8.0. + +## Binding to forms + +We can bind to forms using the [FromForm] attribute. Let's see an example: + +```csharp +app.MapPost("/books", async ([FromForm] string name, + [FromForm] BookType bookType, IFormFile? cover, BookDb db) => +{ + var book = new Book + { + Name = name, + BookType = bookType + }; + + if (cover is not null) + { + var coverName = Path.GetRandomFileName(); + + using var stream = File.Create(Path.Combine("wwwroot", coverName)); + await cover.CopyToAsync(stream); + book.Cover = coverName; + } + + db.Books.Add(book); + await db.SaveChangesAsync(); + + return Results.Ok(); +}); +``` + +Another way is using the [AsParameters] attribute, the following code binds from form values to properties of the `NewBookRequest` record struct: + +```csharp +public record NewBookRequest([FromForm] string Name, [FromForm] BookType BookType, IFormFile? Cover); + +app.MapPost("/books", async ([AsParameters] NewBookRequest request, BookDb db) => +{ + var book = new Book + { + Name = request.Name, + BookType = request.BookType + }; + + if (request.Cover is not null) + { + var coverName = Path.GetRandomFileName(); + + using var stream = File.Create(Path.Combine("wwwroot", coverName)); + await request.Cover.CopyToAsync(stream); + book.Cover = coverName; + } + + db.Books.Add(book); + await db.SaveChangesAsync(); + + return Results.Ok(); +}); +``` + +## Antiforgery + +ASP.NET Core 8.0 adds support for antiforgery tokens. We can call the `AddAntiforgery` method to register the antiforgery services and `WebApplicationBuilder` will automatically add the antiforgery middleware to the pipeline: + +```csharp +var builder = WebApplication.CreateBuilder(); + +builder.Services.AddAntiforgery(); + +var app = builder.Build(); + +// Implicitly added by WebApplicationBuilder if AddAntiforgery is called. +// app.UseAntiforgery(); + +app.MapGet("/", () => "Hello World!"); + +app.Run(); +``` + +Example of using antiforgery tokens: + +```csharp + +// Use the antiforgery service to generate tokens. +app.MapGet("/", (HttpContext context, IAntiforgery antiforgery) => +{ + var token = antiforgery.GetAndStoreTokens(context); + return Results.Content(...., "text/html"); +}); + +// It will automatically validate the token. +app.MapPost("/todo", ([FromForm] Todo todo) => Results.Ok(todo)); + +// Disable antiforgery validation for this endpoint. +app.MapPost("/todo2", ([FromForm] Todo todo) => Results.Ok(todo)) + .DisableAntiforgery(); +``` + + +## Native AOT + +ASP.NET Core 8.0 adds support for Native AOT. + +You can add `PublishAot` to the project file to enable Native AOT: + +```xml + + true + +``` + +### Web API (native AOT) template + +You can use the `dotnet new webapiaot` command to create a new Minimal APIs project with Native AOT enabled. + +```diff ++using System.Text.Json.Serialization; + +-var builder = WebApplication.CreateBuilder(); ++var builder = WebApplication.CreateSlimBuilder(args); + ++builder.Services.ConfigureHttpJsonOptions(options => ++{ ++ options.SerializerOptions.TypeInfoResolverChain.Insert(0, AppJsonSerializerContext.Default); ++}); + +var app = builder.Build(); + +var sampleTodos = TodoGenerator.GenerateTodos().ToArray(); + +var todosApi = app.MapGroup("/todos"); +todosApi.MapGet("/", () => sampleTodos); +todosApi.MapGet("/{id}", (int id) => + sampleTodos.FirstOrDefault(a => a.Id == id) is { } todo + ? Results.Ok(todo) + : Results.NotFound()); + +app.Run(); + ++[JsonSerializable(typeof(Todo[]))] ++internal partial class AppJsonSerializerContext : JsonSerializerContext ++{ ++ ++} +``` + +* Reflection isn't supported in native AOT, you must use the `JsonSerializable` attribute to specify the types that you want to serialize/deserialize. + +## References + +* https://learn.microsoft.com/en-us/aspnet/core/release-notes/aspnetcore-8.0?view=aspnetcore-8.0#minimal-apis +* https://learn.microsoft.com/en-us/aspnet/core/fundamentals/minimal-apis/parameter-binding?view=aspnetcore-8.0#explicit-binding-from-form-values +* https://learn.microsoft.com/en-us/aspnet/core/fundamentals/native-aot?view=aspnetcore-8.0 diff --git a/docs/en/Community-Articles/2023-11-03-ASPNET8-authentication-and-authorization/POST.md b/docs/en/Community-Articles/2023-11-03-ASPNET8-authentication-and-authorization/POST.md new file mode 100644 index 0000000000..22c621aa1b --- /dev/null +++ b/docs/en/Community-Articles/2023-11-03-ASPNET8-authentication-and-authorization/POST.md @@ -0,0 +1,138 @@ +# ASP.NET 8: What's New About Authentication and Authorization + +In ASP.NET 8, the concept of authentication and authorization is undergoing a transformation. Specifically, ASP.NET Core Identity is transitioning from a focus on traditional web pages to a more API-driven approach. We will see what the Identity API endpoints are, why we need them, and how to use them in detail. So, let's dive in. + +## What is ASP.NET Core Identity? + +ASP.NET Core Identity is like an extra toolkit that comes with ASP.NET Core. It offers a bunch of services to help you deal with user accounts in your ASP.NET Core application. These services include both basic concepts and ready-made solutions for each task. + +With ASP.NET Core Identity, you can save user accounts in your app, handle user information, add extra security with two-factor authentication, and even connect other log in options, like social media logins, to user accounts. In simple terms, it's all about keeping user accounts in your app and making it easy for users to log in. + +![](./identity_endpoints_scaffold.png) + +Prior to ASP.NET 8, there were limitations on using ASP.NET Identity in Single Page Applications (SPAs). Because the ASP.NET Core Identity framework is primarily tailored for traditional server-rendered web applications, like ASP.NET Core MVC or Razor Pages apps. However, the Identity API endpoints that come with ASP.NET 8 aim to solve token-based authentication and authorization in SPA without external dependencies. + +## Why do we need Identity APIs? + +The introduction of Identity endpoints in ASP.NET 8 aims to streamline the process of integrating ASP.NET Core Identity into both API server applications and front-end SPAs like those built with JavaScript or Blazor. To understand the importance of these endpoints, let's first examine the disadvantages of using ASP.NET Core Identity before ASP.NET 8. + +Let's delve into a common scenario: + +Imagine you have a straightforward application composed of an ASP.NET Core backend that exposes APIs. On the client side, you have a SPA application that communicates with these APIs. Now, you want to incorporate user accounts, complete with authentication and authorization, into your application. + +Before the advent of the identity endpoints, you could add ASP.NET Core Identity and the default Razor Pages UI to your app by adding a few packages, updating your database schema, and registering some services. However, this approach had some disadvantages. From a user experience perspective, the full-page refreshes of Razor Pages can be a major drawback especially compared to the fluidity of SPAs. On the other hand, from a developer's perspective, if you want the default pages to be compatible with the rest of your application, you may need to update more than 30 pages. Moreover, the default Razor Pages UI uses traditional cookie-based authentication, not bearer tokens. + +In ASP.NET 8, identity endpoints were introduced to simplify the process of adding user accounts to ASP.NET Core API apps used with SPAs or mobile. These endpoints streamline the user management process by providing an alternative to the traditional Razor Page Identity UI pages. Additionally, a new endpoint is included for retrieving bearer tokens, which can be used for authentication. These changes directly address the concerns mentioned earlier, making it easier to create a user-friendly and integrated experience within your app, with no full-page refreshes or styling conflicts. + +## How to add Identity APIs? + +In this part, I'll create a demo application, add all of the required packages, and lastly map the Identity APIs. + +Create a new ASP.NET Core app with the following command and change the directory to the created application folder: + +```bash +dotnet new webapi --name NewIdentityEndpoints -o IdentityDemo +cd IdentityDemo +``` + +After that, open the application in your favorite IDE and add the required packages: + +```csharp + + +``` + +**Note:** I used the `.NET 8.0.100-rc.2-**` SDK for everything in this post. + +Then replace `Program.cs` as below: + +```csharp +using System.Security.Claims; +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Identity.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; + +var builder = WebApplication.CreateBuilder(args); + +builder.Services.AddAuthentication().AddBearerToken(IdentityConstants.BearerScheme); +builder.Services.AddAuthorizationBuilder(); + +builder.Services.AddDbContext(options => options.UseInMemoryDatabase("AppDb")); + +builder.Services.AddIdentityCore() +.AddEntityFrameworkStores() +.AddApiEndpoints(); + +builder.Services.AddEndpointsApiExplorer(); +builder.Services.AddSwaggerGen(); + +var app = builder.Build(); + +app.MapGroup("/my-identity-api").MapIdentityApi(); + +app.MapGet("/", (ClaimsPrincipal user) => $"Hello {user.Identity!.Name}").RequireAuthorization(); + +if (app.Environment.IsDevelopment()) +{ + app.UseSwagger(); + app.UseSwaggerUI(); +} + +app.Run(); + +class MyCustomUser : IdentityUser { } + +class ApplicationDbContext : IdentityDbContext +{ + public ApplicationDbContext(DbContextOptions options) : base(options) { } +} + +``` + +When you run the application, you will see a result as the following: + +![](./new-identity-endpoints.png) + +## Custom Authorization Policies + +Prior to ASP.NET 8, adding a parameterized authorization policy to an endpoint required writing a lot of code. + +- Implementing an `AuthorizeAttribute` for each policy +- Implementing an `AuthorizationPolicyProvider` to process a custom policy from a string-based contract +- Implementing an `AuthorizationRequirement` for the policy +- Implementing an `AuthorizationHandler` for each requirement + +However, implementing the `IAuthorizationRequirementData` interface that comes with ASP.NET 8, your application code should look like this: + +```csharp +class MinimumAgeAuthorizeAttribute : AuthorizeAttribute, IAuthorizationRequirement, IAuthorizationRequirementData +{ + public MinimumAgeAuthorizeAttribute(int age) => Age =age; + public int Age { get; } + + public IEnumerable GetRequirements() + { + yield return this; + } +} + +class MinimumAgeAuthorizationHandler : AuthorizationHandler +{ + protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MinimumAgeAuthorizeAttribute requirement) + { + ... + } +} +``` + +See [here](https://gist.github.com/captainsafia/7c54e92d12df695ff0908e989fb8531f) for the complete code. + +## Conclusion + +In this article, I've shown you the Identity APIs introduced with ASP.NET 8, why we need them, and how we can add them to our application, and finally I explained how to define a custom authorization policy with fewer lines of code. + +## References +- https://learn.microsoft.com/en-us/aspnet/core/release-notes/aspnetcore-8.0?view=aspnetcore-8.0#authentication-and-authorization +- https://auth0.com/blog/whats-new-dotnet8-authentication-authorization/ +- https://andrewlock.net/exploring-the-dotnet-8-preview-introducing-the-identity-api-endpoints/ +- https://andrewlock.net/should-you-use-the-dotnet-8-identity-api-endpoints/ diff --git a/docs/en/Community-Articles/2023-11-03-ASPNET8-authentication-and-authorization/identity_endpoints_scaffold.png b/docs/en/Community-Articles/2023-11-03-ASPNET8-authentication-and-authorization/identity_endpoints_scaffold.png new file mode 100644 index 0000000000..951f6f1da6 Binary files /dev/null and b/docs/en/Community-Articles/2023-11-03-ASPNET8-authentication-and-authorization/identity_endpoints_scaffold.png differ diff --git a/docs/en/Community-Articles/2023-11-03-ASPNET8-authentication-and-authorization/new-identity-endpoints.png b/docs/en/Community-Articles/2023-11-03-ASPNET8-authentication-and-authorization/new-identity-endpoints.png new file mode 100644 index 0000000000..b8ac5021ee Binary files /dev/null and b/docs/en/Community-Articles/2023-11-03-ASPNET8-authentication-and-authorization/new-identity-endpoints.png differ diff --git a/docs/en/Community-Articles/2023-11-05-EF-Core-8-Complex-Types/POST.MD b/docs/en/Community-Articles/2023-11-05-EF-Core-8-Complex-Types/POST.MD new file mode 100644 index 0000000000..06289387e5 --- /dev/null +++ b/docs/en/Community-Articles/2023-11-05-EF-Core-8-Complex-Types/POST.MD @@ -0,0 +1,189 @@ +# Using Complex Types as Value Objects with Entity Framework Core 8.0 + +Entity Framework Core 8.0 is being shipped in a week as a part of .NET 8.0. In this article, I will introduce the new **[Complex Types](https://learn.microsoft.com/en-us/ef/core/what-is-new/ef-core-8.0/whatsnew#value-objects-using-complex-types)** feature of EF Core 8 and show some examples of how you can use it in your projects built with ABP Framework. + +## What is a Value Object? + +A [Value Object](https://docs.abp.io/en/abp/latest/Value-Objects) is a simple object that has no conceptual identity (Id). Instead, a Value Object is identified by its properties. + +A Value Object is typically owned by a parent [Entity](https://docs.abp.io/en/abp/latest/Entities) object. Using [Complex Types](https://learn.microsoft.com/en-us/ef/core/what-is-new/ef-core-8.0/whatsnew#value-objects-using-complex-types) with EF Core 8 is the best way to create Value Objects that are stored as a part of your main entity. + +## Creating an ABP Project + +> **WARNING**: ABP Framework has not a .NET 8.0 compatible version yet. It is planned to be released on November 15, 2023. I created this project with ABP 7.4.1 (based on .NET 7.0), then manually changed the `TargetFramework` (in the `csproj`) to `net8.0` and added the `Microsoft.EntityFrameworkCore.SqlServer` package with version `8.0.0-rc.2.23480.1`. After that, the project is being compiled, but some parts of this article may not work as expected until ABP Framework 8.0-RC.1 is released. +> +> **I will update the article once ABP Framework 8.0-RC.1 is released.** + +I will show code examples, so I am creating a new ABP project using the following [ABP CLI](https://docs.abp.io/en/abp/latest/CLI) command: + +````bash +abp new ComplexTypeDemo -t app-nolayers +```` + +> I prefer a non-layered project to keep the things simple. If you are new to ABP Framework, follow the [Getting Started](https://docs.abp.io/en/abp/latest/Getting-Started-Overall) tutorial to learn how to create a new project from scratch. + +Once I created the solution, I am running the following command to execute the database migrations in order to create the initial database: + +````bash +dotnet run --project ComplexTypeDemo --migrate-database +```` + +> We could also execute the `migrate-database.ps1` (that is coming as a part of the solution) as a shortcut. + +## Creating a Complex Type + +Assume that we have a `Customer` [entity](https://docs.abp.io/en/abp/latest/Entities) as shown below: + +````csharp +public class Customer : BasicAggregateRoot +{ + public string Name { get; set; } + public Address HomeAddress { get; set; } + public Address BusinessAddress { get; set; } +} +```` + +Here, we have two address properties, one for home and the other one for business. Since an address is a multi-values property, we can define it as a separate object: + +````csharp +public class Address +{ + public string City { get; set; } + public string Line1 { get; set; } + public string? Line2 { get; set; } + public string PostCode { get; set; } +} +```` + +`Address` is a typical complex object. It is actually a part of the `Customer` object, but we wanted to collect its parts into a dedicated class to make it a domain concept and easily manage its properties together. + +## Configure EF Core Mappings + +We should set the `Address` class as a Complex Type in our EF Core mapping configuration. There are two ways of it. + +As the first way, we can add the `ComplexType` attribute on top of the `Address` class: + +````csharp +[ComplexType] // Added this line +public class Address +{ + ... +} +```` + +As an alternative, we can configure the mapping using the fluent mapping API. You can write the following code into the `OnModelCreating` method of your `DbContext` class: + +````csharp +builder.Entity(b => +{ + b.ToTable("Customers"); + b.ComplexProperty(x => x.HomeAddress); // Mapping a Complex Type + b.ComplexProperty(x => x.BusinessAddress); // Mapping another Complex Type + //... configure other properties +}); + +```` + +You can further configure the properties of the `Address` class: + +````csharp +b.ComplexProperty(x => x.HomeAddress, a => +{ + a.Property(x => x.City).HasMaxLength(50).IsRequired(); +}); +```` + +Once you configure the mappings, you can use the [EF Core command-line tool](https://learn.microsoft.com/en-us/ef/core/cli/dotnet) to create a database migration: + +````bash +dotnet ef migrations add "Added_Customer_And_Address" +```` + +And update the database: + +````bash +dotnet ef database update +```` + +If you check the fields of the `Customers` table in your dayabase, you will see the following fields: + +* `Id` +* `Name` +* `HomeAddress_City` +* `HomeAddress_Line1` +* `HomeAddress_Line2` +* `HomeAddress_PostCode` +* `BusinessAddress_City` +* `BusinessAddress_Line1` +* `BusinessAddress_Line2` +* `BusinessAddress_PostCode` + +As you see, EF Core stores the `Address` properties as a part of your main entity. + +## Querying Objects + +You can query entities from database using the properties of a complex type as same as you query by the properties of the main entity. + +**Example: Find customers by `BusinessAddress.PostCode`:** + +````csharp +public class MyService : ITransientDependency +{ + private readonly IRepository _customerRepository; + + public MyService(IRepository customerRepository) + { + _customerRepository = customerRepository; + } + + public async Task DemoAsync() + { + var customers = await _customerRepository.GetListAsync( + c => c.BusinessAddress.PostCode == "12345" + ); + + //... + } +} +```` + +## Mutable vs Immutable + +Entity Framework Core Complex Types can work with mutable and immutable types. In the `Address` example above, I've shown a simple mutable class - that means you can change an individual property of an `Address` object after creating it (or after querying from database). However, designing Value Objects as immutable is a highly common approach. + +For example, you can use C#'s `struct` type to define an immutable `Address` type: + +````csharp +public readonly struct Address(string line1, string? line2, string city, string postCode) +{ + public string City { get; } = city; + public string Line1 { get; } = line1; + public string? Line2 { get; } = line2; + public string PostCode { get; } = postCode; +} +```` + +See the [Microsoft's documentation](https://learn.microsoft.com/en-us/ef/core/what-is-new/ef-core-8.0/whatsnew#mutability) for more examples and different usages. + +## Final Notes + +There are more details about using Complex Types in your applications. I want to mention some of them here: + +* You can have nested complex types. For example, `Address` may have one or more `PhoneNumber` objects as its properties. Everything will work seamlessly. +* A single instance of a Complex Type can be set to multiple properties (of the same or different entities). In that case, changing the Complex object's properties will affect all of the properties. However, try to avoid that since it may create unnecessary complexities in your code that is hard to understand. +* You can manipulate mutable complex object properties just as another property in your entity. EF Core change tracking system will track them as you expect. +* Currently, EF Core doesn't support to have a collection of complex objects in an entity. It works only for properties. + +For more details and examples, see the Microsoft's document in the *References* section. + +## Source Code + +You can find the sample project here: + +https://github.com/hikalkan/samples/tree/master/EfCoreComplexTypeDemo + +## References + +* [Value objects using Complex Types](https://learn.microsoft.com/en-us/ef/core/what-is-new/ef-core-8.0/whatsnew#value-objects-using-complex-types) in [What's new with EF Core 8.0](https://learn.microsoft.com/en-us/ef/core/what-is-new/ef-core-8.0/whatsnew) document by Microsoft. +* [ABP Entity Framework Core integration document](https://docs.abp.io/en/abp/latest/Entity-Framework-Core) + diff --git a/docs/en/Community-Articles/2023-11-06- SerializationDeserialization-Improvements/POST.md b/docs/en/Community-Articles/2023-11-06- SerializationDeserialization-Improvements/POST.md new file mode 100644 index 0000000000..74022bd572 --- /dev/null +++ b/docs/en/Community-Articles/2023-11-06- SerializationDeserialization-Improvements/POST.md @@ -0,0 +1,100 @@ +# .NET 8: Serialization Improvements + +The [System.Text.Json](https://learn.microsoft.com/en-us/dotnet/api/system.text.json) namespace provides functionality for serializing to and deserializing from JSON. In .NET 8, there have been many improvements to the System.Text.Json serialization and deserialization functionality. + +## Source generator + +.NET 8 includes enhancements of the System.Text.Json source generator that are aimed at making the Native AOT experience on par with the reflection-based serializer. This is important because now you can select the source generator for System.Text.Json. To see a comparison of Reflection versus source generation in System.Text.Json, check out the comparison [documentation](https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/reflection-vs-source-generation?pivots=dotnet-8-0#reflection). + +## Interface hierarchies + +.NET 8 adds support for serializing properties from interface hierarchies. Here is a code sample that shows this feature. + +```csharp +ICar car = new MyCar { Color = "Red", NumberOfWheels = 4 }; +JsonSerializer.Serialize(car); // {"Color":"Red","NumberOfWheels":4} + +public interface IVehicle +{ + public string Color { get; set; } +} + +public interface ICar : IVehicle +{ + public int NumberOfWheels { get; set; } +} + +public class MyCar : ICar +{ + public string Color { get; set; } + public int NumberOfWheels { get; set; } +} +``` + +## Naming policies + +Two new naming policies `snake_case` and `kebab-case` have been added. You can use them as shown below: + +```csharp +var options = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower }; +JsonSerializer.Serialize(new { CreationTime = new DateTime(2023,11,6) }, options); // {"creation_time":"2023-11-06T00:00:00"} +``` + +## Read-only properties + +With .NET 8, you can deserialize onto read-only fields or properties. This feature can be globally enabled by setting `PreferredObjectCreationHandling` to `JsonObjectCreationHandling.Populate`. You can also enable this feature for a class or one of its members by adding the `[JsonObjectCreationHandling(JsonObjectCreationHandling.Populate)]` attribute. Here is a sample: + +```csharp +using System.Text.Json; +using System.Text.Json.Serialization; + +var book = JsonSerializer.Deserialize("""{"Contributors":["John Doe"],"Author":{"Name":"Sample Author"}}""")!; +Console.WriteLine(JsonSerializer.Serialize(book)); + +class Author +{ + public required string Name { get; set; } +} + +[JsonObjectCreationHandling(JsonObjectCreationHandling.Populate)] +class Book +{ + // Both of these properties are read-only. + public List Contributors { get; } = new(); + public Author Author { get; } = new() {Name = "Undefined"}; +} +``` + +Before .NET 8, the output was like this: + +```json +{"Contributors":[],"Author":{"Name":"Undefined"}} +``` + +With .NET 8, the output now looks like this: + +```json +{"Contributors":["John Doe"],"Author":{"Name":"Sample Author"}} +``` + +## Disable reflection-based default + +One of the nice features about Serialization is, now you can disable using the reflection-based serializer by default. To disable default reflection-based serialization, set the `JsonSerializerIsReflectionEnabledByDefault` MSBuild property to `false` in your project file. + +## Streaming deserialization APIs + +.NET 8 includes new `IAsyncEnumerable` streaming deserialization extension methods. The new extension methods invoke streaming APIs and return `IAsyncEnumerable`. Here is a sample code that uses this new feature. + +```csharp +const string RequestUri = "https://yourwebsite.com/api/saas/tenants?skipCount=0&maxResultCount=10"; +using var client = new HttpClient(); +IAsyncEnumerable tenants = client.GetFromJsonAsAsyncEnumerable(RequestUri); + +await foreach (Tenant tenant in tenants) +{ + Console.WriteLine($"* '{tenant.name}' uses '{tenant.editionName +}' edition"); +} +``` + +I have mentioned some of the items for Serialization Improvements in .NET 8. If you want to check the full list, you can read it in the .NET 8's [What's new document](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8#serialization). diff --git a/docs/en/Community-Articles/2023-11-06-Blazor-Fullstack-Web-Ui/Post.md b/docs/en/Community-Articles/2023-11-06-Blazor-Fullstack-Web-Ui/Post.md new file mode 100644 index 0000000000..a346b6f084 --- /dev/null +++ b/docs/en/Community-Articles/2023-11-06-Blazor-Fullstack-Web-Ui/Post.md @@ -0,0 +1,89 @@ +# Blazor's History and Full-stack Web UI + +Blazor is a web framework that allows developers to build interactive web applications using .NET instead of JavaScript. The first version of Blazor was **released on May 14, 2020**. Since its initial release, Blazor has evolved with the new versions. Until now, six different versions have been declared. Sometimes, it can be not very clear to see the differences between these approaches. First, let's try to understand these. + +* **Blazor-Server**: >> *Loads fast at first* >> In this version, heavy things are done in the server. Browsers are thin clients and download a small page for the first load. The page updates are done via SignalR connection. This was released with .NET Core 3. +* **Blazor WebAssembly (WASM):** >> *Loads slow at first* >> In this version, some binary files are being downloaded to the browser. This approach takes longer initialization time than the "Server" approach. The hard work is done on the browser. +* **Blazor Hybrid:** It's a combination of Blazor and Xamarin.Forms. It allows you to run your app on iOS, Android, macOS, and Windows. Blazor Hybrid uses a WebView component to host the Blazor-based user interface within the mobile app. +* **Blazor Native**: It runs natively on the devices and uses a common UI abstraction to render native controls for that device. This is very similar to how frameworks like Xamarin Forms or React Native work today. It has also been considered but has not reached [the planning stage](https://devblogs.microsoft.com/dotnet/blazor-server-in-net-core-3-0-scenarios-and-performance/). + +* **Blazor United**: Recently, Microsoft updated this name to "Fullstack web UI". Blazor-Server and Blazor WASM both have some disadvantages and advantages. So, Microsoft decided to combine these two approaches and find an optimum solution for the entire Blazor version. We can call it *Best of Blazor* 😀 + +## Why is "Blazor Fullstack Web UI" the best? + +These apps are a combination of both Blazor Server and Blazor WASM. It provides the advantages of Blazor Server and WASM. Developers would be able to more fine-tune the rendering mode. **This approach overcomes the large binary downloads of Blazor WASM, and it resolves the Blazor Server's problem, which always needs to be connected to the server via SignalR.** + +> Blazor Fullstack Web UI comes with the .NET 8, and it will be published on November 14, 2023. + +I took the following photo from Steven Sanderson's talk at NDC Porto 2023. You can read my impressions of this conf at https://volosoft.com/blog/ndc-port-2023-impressions, but after reading this one. + +![image-20231106163046763](image-20231106163046763-1699282281622-2.png) + + + +There are two basic page styles: + +* **HTML**; simple and loads fast! Eg: MVC, Razor Pages +* **Single Page Apps (SPA):** high interaction with the client and loads slower! Eg: Blazor WASM, Blazor Server... + +## HTML + SPA => Blazor Fullstack + +Blazor Fullstack (formerly United) is a technology that turns Blazor Server into a SPA style. + +.NET 8 will combine Blazor Server's server-side rendering and WebAssembly's client-side interaction. + +You can switch between two rendering modes and even mix them on the same page. With .NET 8 there also comes amazing features like; + +* [Streaming rendering](https://github.com/dotnet/aspnetcore/issues/46352): With this feature, most of the page will be rendered, and long async operations on the server will still be in progress. + +* [Progressive enhancement of form submission & navigation](https://github.com/dotnet/aspnetcore/issues/46399): With this feature, it doesn't fully reload the page after submitting the form. This gives the user a better and smoother experience. + + + + ## How it works? + +### Rendering on Server + +You can add `WebComponentRenderMode.Server` to your Blazor components so that these components will run interactively. In the below example, the list editor will make AJAX requests to the server like single-page applications. + +![image-20231106172420148](image-20231106172420148.png) + + + +And sure you can add `WebComponentRenderMode.Server` to your page level, and the complete page will be rendered as a server component. All inputs on this page can work as an interactive server component like SPA mode. + +![image-20231106172638604](image-20231106172638604.png) + + + +### Rendering on client + +You can switch to WebAssembly mode by writing `WebComponentRenderMode.WebAssembly` attribute to your page. By doing so, the whole page should run interactively using WebAssembly. This time there's no server connection anymore because it loads the binaries (WebAssembly runtimes) at the page load. + +![image-20231106173021958](image-20231106173021958.png) + +## How it works? + +To enable Blazor Full-stack Web UI, you need to write `net8.0;net7.0-browser` into the `TargetFrameworks` area of your `csproj` file. These two keywords change your app like this; `net8.0` framework renders on the server, and `net7.0-browser` framework renders on the browser. + +![image-20231106173411309](image-20231106173411309.png) + +## Let the System decide on WebAssembly or Server approach + +You can let the system decide whether it uses `WebAssembly` or `Server`. This can be done with the `Auto` mode of the `WebComponentRenderMode`. In this case, it will not load binary files (WebAssembly files) for the initial page that has `WebComponentRenderMode.Server` attribute, but whenever the user navigates to a page that has `WebComponentRenderMode.WebAssembly`, it will download the runtimes. This will allow us to load the initial page very fast, and when we need interactivity, we can switch to `WebAssembly` and wait for the binaries to download. But this download will be done one time because it will be cached. + +![image-20231106173849303](image-20231106173849303.png) + + + +## Conclusion + +I summarized the new generation Blazor in a very simple way. This architecture will be useful to everyone who uses Blazor. + + + +*Resources:* + +* You can check out Dan Roth's GitHub issue 👉 [github.com/dotnet/aspnetcore/issues/46636](https://github.com/dotnet/aspnetcore/issues/46636). +* Steven Sanderson's YouTube video is very good for understanding these concepts 👉 [Blazor United Prototype Video](https://youtu.be/48G_CEGXZZM). + diff --git a/docs/en/Community-Articles/2023-11-06-Blazor-Fullstack-Web-Ui/image-20231106163046763-1699282281622-2.png b/docs/en/Community-Articles/2023-11-06-Blazor-Fullstack-Web-Ui/image-20231106163046763-1699282281622-2.png new file mode 100644 index 0000000000..62c2bcea95 Binary files /dev/null and b/docs/en/Community-Articles/2023-11-06-Blazor-Fullstack-Web-Ui/image-20231106163046763-1699282281622-2.png differ diff --git a/docs/en/Community-Articles/2023-11-06-Blazor-Fullstack-Web-Ui/image-20231106172420148.png b/docs/en/Community-Articles/2023-11-06-Blazor-Fullstack-Web-Ui/image-20231106172420148.png new file mode 100644 index 0000000000..62d2a704b8 Binary files /dev/null and b/docs/en/Community-Articles/2023-11-06-Blazor-Fullstack-Web-Ui/image-20231106172420148.png differ diff --git a/docs/en/Community-Articles/2023-11-06-Blazor-Fullstack-Web-Ui/image-20231106172638604.png b/docs/en/Community-Articles/2023-11-06-Blazor-Fullstack-Web-Ui/image-20231106172638604.png new file mode 100644 index 0000000000..f28987d536 Binary files /dev/null and b/docs/en/Community-Articles/2023-11-06-Blazor-Fullstack-Web-Ui/image-20231106172638604.png differ diff --git a/docs/en/Community-Articles/2023-11-06-Blazor-Fullstack-Web-Ui/image-20231106173021958.png b/docs/en/Community-Articles/2023-11-06-Blazor-Fullstack-Web-Ui/image-20231106173021958.png new file mode 100644 index 0000000000..6120776e90 Binary files /dev/null and b/docs/en/Community-Articles/2023-11-06-Blazor-Fullstack-Web-Ui/image-20231106173021958.png differ diff --git a/docs/en/Community-Articles/2023-11-06-Blazor-Fullstack-Web-Ui/image-20231106173411309.png b/docs/en/Community-Articles/2023-11-06-Blazor-Fullstack-Web-Ui/image-20231106173411309.png new file mode 100644 index 0000000000..2cc92a9ee3 Binary files /dev/null and b/docs/en/Community-Articles/2023-11-06-Blazor-Fullstack-Web-Ui/image-20231106173411309.png differ diff --git a/docs/en/Community-Articles/2023-11-06-Blazor-Fullstack-Web-Ui/image-20231106173849303.png b/docs/en/Community-Articles/2023-11-06-Blazor-Fullstack-Web-Ui/image-20231106173849303.png new file mode 100644 index 0000000000..13413ca55f Binary files /dev/null and b/docs/en/Community-Articles/2023-11-06-Blazor-Fullstack-Web-Ui/image-20231106173849303.png differ diff --git a/docs/en/Community-Articles/2023-11-06-EF-Core_Hierarchy-Id/POST.md b/docs/en/Community-Articles/2023-11-06-EF-Core_Hierarchy-Id/POST.md new file mode 100644 index 0000000000..9255c39a5a --- /dev/null +++ b/docs/en/Community-Articles/2023-11-06-EF-Core_Hierarchy-Id/POST.md @@ -0,0 +1,79 @@ +# HierarchyId Support in Entity Framework Core + +Entity Framework Core has official support for HierarchyId, which allows you to store and query hierarchical data in SQL Server databases. Hierarchical data is a common data structure found in many applications. Whether you are dealing with organizational structures, product categories, or threaded discussions, handling hierarchies efficiently is crucial. In this blog post, we will explore how to manage hierarchical data using Entity Framework Core (EF Core) in combination with HierarchyId. + +## How to use HierarchyId in EF Core + +To use HierarchyId in EF Core, you need to install the [Microsoft.EntityFrameworkCore.SqlServer.HierarchyId](https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.SqlServer.HierarchyId/) NuGet package. This package contains query and update support for HierarchyId. + +To configure EF Core to use HierarchyId, you need to call the `UseHierarchyId` method when configuring the SQL Server provider. + +```csharp +options.UseSqlServer( + connectionString, + x => x.UseHierarchyId()); +``` + +## Modeling Hierarchies + +The `HierarchyId` type can be used for properties of an entity type. For example, assume we want to model the personnel in an organization. Each person has a name and a manager. The manager is also a person. We can model this using the following entity type: + +```csharp +public class Person +{ + public int Id { get; set; } + public string Name { get; set; } + public HierarchyId Manager { get; set; } +} +``` + +Each person can be traced from the patriarch down the tree using its `Manager` property. SQL Server uses a compact binary format for these paths, but it is common to parse to and from a human-readable string representation when working with code. In this representation, the position at each level is separated by a `/` character. + +![Hierarchy Tree](hierarchy-tree.png) + +## Querying Hierarchies + +HierarchyId exposes several methods that can be used in LINQ queries. + +* `GetAncestor(int level)` returns the ancestor at the specified level. + +* `GetDescendant(HierarchyId? child1, HierarchyId? child2)` returns the descendant at the specified level. + +* `GetLevel()` returns the level of the node in the hierarchy. + +* `GetReparentedValue(HierarchyId? oldRoot, HierarchyId? newRoot)` returns the node with a new parent. + +* `IsDescendantOf(HierarchyId? parent)` returns whether the node is a descendant of the specified node. + +Example: + +```csharp +// Get entities at a given level in the tree +var generation = await context.Persons.Where(x => x.Manager.GetLevel() == level).ToListAsync(); + +// Get the direct ancestor of an entity +var parent = await context.Persons.Where(x => x.Manager.GetAncestor(1) == manager).SingleAsync(); +``` + +For example, your company may want to change the manager of an organizational unit. To do this, you can use the `GetReparentedValue` method to update the manager for all descendants of the organizational unit. + +```csharp +var newManager = await context.Persons.SingleAsync(x => x.Id == newManagerId); + +var descendants = await context.Persons + .Where(x => x.Manager.IsDescendantOf(oldManager)) + .ToListAsync(); + +foreach (var descendant in descendants) +{ + descendant.Manager = descendant.Manager.GetReparentedValue(oldManager.Manager, newManager.Manager); +} + +await context.SaveChangesAsync(); +``` + +## References + +For more information about hierarchy id, see the following resource: + +https://learn.microsoft.com/en-us/ef/core/what-is-new/ef-core-8.0/whatsnew#hierarchyid-in-net-and-ef-core diff --git a/docs/en/Community-Articles/2023-11-06-EF-Core_Hierarchy-Id/hierarchy-tree.png b/docs/en/Community-Articles/2023-11-06-EF-Core_Hierarchy-Id/hierarchy-tree.png new file mode 100644 index 0000000000..e22ed9781c Binary files /dev/null and b/docs/en/Community-Articles/2023-11-06-EF-Core_Hierarchy-Id/hierarchy-tree.png differ diff --git a/docs/en/Community-Articles/2023-11-97-AOT-Compilation/Post.md b/docs/en/Community-Articles/2023-11-97-AOT-Compilation/Post.md new file mode 100644 index 0000000000..2b994b59c3 --- /dev/null +++ b/docs/en/Community-Articles/2023-11-97-AOT-Compilation/Post.md @@ -0,0 +1,75 @@ +# Native AOT Compilation in .NET 8 +Native AOT (Ahead-of-Time) compilation is a feature that allows developers to create a self-contained app compiled to native code that can run on machines without the .NET runtime installed. It results in benefits such as minimized disk footprint, reduced executable size, reduced startup time, and reduced memory demand. + +Native AOT compilation isn't a new feature in .NET 8. It's first introduced in .NET 7. + + +Differences between the AOT Compilation of .NET 7 and .NET 8 are: + + +- **System.Text.Json improvements**: .NET 8 adds support for more types, source generation, interface hierarchies, naming policies, read-only properties, and more. +- **New types for performance**: .NET 8 introduces new types such as FrozenDictionary, FrozenSet, SearchValues, CompositeFormat, TimeProvider, and ITimer to improve the app performance. +- **System.Numerics and System.Runtime.Intrinsics enhancements**: .NET 8 adds support for Vector512, AVX-512, IUtf8SpanFormattable, Lerp, and more. +- **System.ComponentModel.DataAnnotations additions**: .NET 8 adds new data validation attributes for cloud-native services and a new ValidateOptionsResultBuilder type. +- **Hosted services lifecycle methods**: .NET 8 adds new methods such as StartAsync, StopAsync, StartBackgroundAsync, and StopBackgroundAsync for hosted services. + +It's important to note that not all features in ASP.NET Core are currently compatible with native AOT. For more information, see [Native AOT deployment overview](https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot/). + +## How to use Native AOT Compilation in .NET 8 + +You can add `true` in your project .csproj file to enable Native AOT Compilation. + + - For the new projects, you can create them with the `--aot` parameter. Example: `dotnet new console --aot`. + +By default, the compiler chooses a blended approach code optimization but you can specify an optimization preference inside your .csproj file. You can choose **size** or **speed** according your requirements. + +```xml +Size +``` + +or + +```xml +Speed +``` + +### Results + +I have created a simple console application to test the Native AOT Compilation. I have used a simple console application that writes "Hello World!" to the console 100 times. I have tested the application with different optimization preferences. I have used the following results: + + +| | Size | Speed | +| --- | --- | --- | +| .NET 8
_(Self-Contained, Single File)_ | 65938 kb | 00.0051806 ~5ms | +| .NET 7 AOT (default) | 4452 kb | 00.0029823 ~2ms | +| .NET 8 AOT (default) | 1242 kb | 00.0028638 ~2ms | +| AOT (Speed)| 1280 kb | 00.0023838 ~2ms | +| AOT (Size) | 1111 kb | 00.0025145 ~2ms | + +Most of existing libraries don't support AOT compilation yet, so I couldn't use [BenchmarkDotnet](https://github.com/dotnet/BenchmarkDotNet) to measure the performance. I have used [Stopwatch](https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.stopwatch?view=net-8.0) to measure the performance. So the performance results may not be accurate but gives insight about the performance difference. + +## AOT Support in MAUI +You can now use Native AOT Compilation on iOS-like target frameworks in .NET MAUI. You can enable AOT compilation with the exact same method by adding `true` to your project .csproj file. According to the dotnet team, apps sizes reduced by 35% and startup times reduced by 28% with AOT compilation. And runtime performance is also improved by 50%. + +But there are some limitations in MAUI AOT Compilation. A lot of libraries still don't support AOT compilation and some of platform-specific feaetures may not work at the moment. + +## When to use Native AOT Compilation? + +Native AOT Compilation is beneficial when you need to optimize your .NET application for speed and size. It's particularly useful for applications that require quick startup times and efficient runtime performance, such as mobile apps or high-performance computing applications. + +However, due to its current limitations, it might not be suitable for all projects. If your project relies heavily on libraries that do not support AOT compilation, or if it uses platform-specific features that are not yet compatible with AOT, you might want to hold off on using Native AOT Compilation until further improvements are made. + +Always consider the specific needs and constraints of your project before deciding to use Native AOT Compilation. + +## Conclusion + +Native AOT Compilation is a great feature that improves the performance of .NET applications. It's still in early-stages and not all libraries support it yet. But it's a great beginning for the future of .NET 🚀 + + +## Links +- Native AOT deployment overview - .NET | Microsoft Learn. https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot/. +- +- Optimize AOT deployments https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot/optimizing +- +- What's new in .NET 8 | Microsoft Learn. https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8. + diff --git a/docs/en/Deployment/Index.md b/docs/en/Deployment/Index.md index 37d6c5bcc5..cf7137464f 100644 --- a/docs/en/Deployment/Index.md +++ b/docs/en/Deployment/Index.md @@ -7,7 +7,7 @@ However, there are some topics that you should care about when you are deploying ## Guides * [Configuring SSL certificate(HTTPS)](SSL.md): Explains how to configure SSL certificate(HTTPS) for your application. -* [Configuring for OpenIddict](Configuring-OpenIddict.md): Notes for some essential configurations for OpenIddict. +* [Configuring OpenIddict](Configuring-OpenIddict.md): Notes for some essential configurations for OpenIddict. * [Configuring for Production](Configuring-Production.md): Notes for some essential configurations for production environments. * [Optimization for Production](Optimizing-Production.md): Tips and suggestions for optimizing your application on production environments. * [Deploying to a Clustered Environment](Clustered-Environment.md): Explains how to configure your application when you want to run multiple instances of your application concurrently. diff --git a/docs/en/Migration-Guides/Abp-8_0.md b/docs/en/Migration-Guides/Abp-8_0.md index e90d9f04f0..108de6ba98 100644 --- a/docs/en/Migration-Guides/Abp-8_0.md +++ b/docs/en/Migration-Guides/Abp-8_0.md @@ -66,7 +66,7 @@ The following NuGet libraries have been upgraded: | Serilog.Sinks.Async | 1.4.0 | 1.5.0 | | SharpZipLib | 1.3.3 | 1.4.2 | | Shouldly | 4.1.0 | 4.2.1 | -| SixLabors.ImageSharp | 1.0.4 | 2.1.6 | +| SixLabors.ImageSharp | 1.0.4 | 3.0.2 | | Slugify.Core | 3.0.0 | 4.0.1 | | Spectre.Console | 0.46.1-preview.0.7 | 0.47.0 | | Swashbuckle.AspNetCore | 6.2.1 | 6.5.0 | diff --git a/docs/en/Modules/Cms-Kit/Blogging.md b/docs/en/Modules/Cms-Kit/Blogging.md index d45598be52..eb6619a4bc 100644 --- a/docs/en/Modules/Cms-Kit/Blogging.md +++ b/docs/en/Modules/Cms-Kit/Blogging.md @@ -29,7 +29,16 @@ A screenshot from the new blog creation modal: ![blogs-edit](../../images/cmskit-module-blogs-edit.png) -**Slug** is the URL part of the blog. For this example, the root URL of the blog becomes *https://your-domain.com/blogs/technical-blog/*. +**Slug** is the URL part of the blog. For this example, the root URL of the blog becomes `your-domain.com/blogs/technical-blog/`. + +- You can change the default slug by using `CmsBlogsWebConsts.BlogRoutePrefix` constant. For example, if you set it to `foo`, the root URL of the blog becomes `your-domain.com/foo/technical-blog/`. + + ```csharp + public override void PreConfigureServices(ServiceConfigurationContext context) + { + CmsBlogsWebConsts.BlogsRoutePrefix = "foo"; + } + ``` #### Blog Features diff --git a/docs/en/Modules/Cms-Kit/Comments.md b/docs/en/Modules/Cms-Kit/Comments.md index cc8d01249b..ddd39fc675 100644 --- a/docs/en/Modules/Cms-Kit/Comments.md +++ b/docs/en/Modules/Cms-Kit/Comments.md @@ -53,6 +53,7 @@ The comment system provides a commenting [widget](../../UI/AspNetCore/Widgets.md { entityType = "Product", entityId = "...", + isReadOnly = false, referralLinks = new [] {"nofollow"} }) ``` diff --git a/docs/en/Modules/Cms-Kit/Ratings.md b/docs/en/Modules/Cms-Kit/Ratings.md index db58602c15..e6a2ba97fd 100644 --- a/docs/en/Modules/Cms-Kit/Ratings.md +++ b/docs/en/Modules/Cms-Kit/Ratings.md @@ -41,7 +41,8 @@ The ratings system provides a rating widget to allow users send ratings to resou @await Component.InvokeAsync(typeof(RatingViewComponent), new { entityType = "Product", - entityId = "entityId" + entityId = "entityId", + isReadOnly = false }) ``` diff --git a/docs/en/Startup-Templates/Application.md b/docs/en/Startup-Templates/Application.md index 0c5e9c4c38..fdb7569ca0 100644 --- a/docs/en/Startup-Templates/Application.md +++ b/docs/en/Startup-Templates/Application.md @@ -316,7 +316,7 @@ You should add `routes` property in the `data` object to add a link on the menu { path: 'dashboard', loadChildren: () => import('./dashboard/dashboard.module').then(m => m.DashboardModule), - canActivate: [AuthGuard, PermissionGuard], + canActivate: [authGuard, permissionGuard], data: { routes: { name: 'ProjectName::Menu:Dashboard', @@ -328,7 +328,7 @@ You should add `routes` property in the `data` object to add a link on the menu } ``` In the above example; -* If the user is not logged in, AuthGuard blocks access and redirects to the login page. +* If the user is not logged in, authGuard blocks access and redirects to the login page. * PermissionGuard checks the user's permission with the `requiredPolicy` property of the `routes` object. If the user is not authorized to access the page, the 403 page appears. * The `name` property of `routes` is the menu link label. A localization key can be defined. * The `iconClass` property of the `routes` object is the menu link icon class. diff --git a/docs/en/Timing.md b/docs/en/Timing.md index fce17de4cf..9b3eb0cca9 100644 --- a/docs/en/Timing.md +++ b/docs/en/Timing.md @@ -102,7 +102,7 @@ This section covers the ABP Framework infrastructure related to managing time zo ### TimeZone Setting -ABP Framework defines **a setting**, named `Abp.Timing.Timezone`, that can be used to set and get the time zone for a user, [tenant](Multi-Tenancy.md) or globally for the application. The default value is `UTC`. +ABP Framework defines **a setting**, named `Abp.Timing.TimeZone`, that can be used to set and get the time zone for a user, [tenant](Multi-Tenancy.md) or globally for the application. The default value is `UTC`. See the [setting documentation](Settings.md) to learn more about the setting system. diff --git a/docs/en/Tutorials/Part-5.md b/docs/en/Tutorials/Part-5.md index f33a41f392..f306b7f4a2 100644 --- a/docs/en/Tutorials/Part-5.md +++ b/docs/en/Tutorials/Part-5.md @@ -323,11 +323,11 @@ Open the `/src/app/book/book-routing.module.ts` and replace with the following c ````js import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; -import { AuthGuard, PermissionGuard } from '@abp/ng.core'; +import { authGuard, permissionGuard } from '@abp/ng.core'; import { BookComponent } from './book.component'; const routes: Routes = [ - { path: '', component: BookComponent, canActivate: [AuthGuard, PermissionGuard] }, + { path: '', component: BookComponent, canActivate: [authGuard, permissionGuard] }, ]; @NgModule({ @@ -337,8 +337,8 @@ const routes: Routes = [ export class BookRoutingModule {} ```` -* Imported `AuthGuard` and `PermissionGuard` from the `@abp/ng.core`. -* Added `canActivate: [AuthGuard, PermissionGuard]` to the route definition. +* Imported `authGuard` and `permissionGuard` from the `@abp/ng.core`. +* Added `canActivate: [authGuard, permissionGuard]` to the route definition. Open the `/src/app/route.provider.ts` and add `requiredPolicy: 'BookStore.Books'` to the `/books` route. The `/books` route block should be following: diff --git a/docs/en/UI/Angular/Entity-Action-Extensions.md b/docs/en/UI/Angular/Entity-Action-Extensions.md index 3ab035b04a..d93b2045f6 100644 --- a/docs/en/UI/Angular/Entity-Action-Extensions.md +++ b/docs/en/UI/Angular/Entity-Action-Extensions.md @@ -16,19 +16,16 @@ 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 +```ts // src/app/entity-action-contributors.ts -import { - eIdentityComponents, - IdentityEntityActionContributors, - IdentityUserDto, -} from '@abp/ng.identity'; +import { eIdentityComponents, IdentityEntityActionContributors } from '@abp/ng.identity'; +import { IdentityUserDto } from '@abp/ng.identity/proxy'; import { EntityAction, EntityActionList } from '@abp/ng.theme.shared/extensions'; const alertUserName = new EntityAction({ text: 'Click Me!', - action: data => { + action: (data) => { // Replace alert with your custom code alert(data.record.userName); }, diff --git a/docs/en/UI/Angular/OAuth-Module.md b/docs/en/UI/Angular/OAuth-Module.md index e7a62d1d2e..b747c5221d 100644 --- a/docs/en/UI/Angular/OAuth-Module.md +++ b/docs/en/UI/Angular/OAuth-Module.md @@ -6,7 +6,6 @@ If your app is version 7.0 or higher, you should include "AbpOAuthModule.forRoot Those abstractions can be found in the @abp/ng-core packages. - `AuthService` (the class that implements the IAuthService interface). - `NAVIGATE_TO_MANAGE_PROFILE` Inject token. -- `AuthGuard` (the class that implements the IAuthGuard interface). - `ApiInterceptor` (the class that implements the IApiInterceptor interface). Those base classes are overridden by the "AbpOAuthModule" for oAuth. There are also three functions provided with AbpOAuthModule. diff --git a/docs/en/UI/Angular/Permission-Management.md b/docs/en/UI/Angular/Permission-Management.md index dd373d6274..63d919f599 100644 --- a/docs/en/UI/Angular/Permission-Management.md +++ b/docs/en/UI/Angular/Permission-Management.md @@ -54,20 +54,20 @@ As shown above you can remove elements from DOM with `abpPermission` structural ## Permission Guard -You can use `PermissionGuard` if you want to control authenticated user's permission to access to the route during navigation. +You can use `permissionGuard` if you want to control authenticated user's permission to access to the route during navigation. * Import the PermissionGuard from @abp/ng.core. -* Add `canActivate: [PermissionGuard]` to your route object. +* Add `canActivate: [permissionGuard]` to your route object. * Add `requiredPolicy` to the `data` property of your route in your routing module. ```js -import { PermissionGuard } from '@abp/ng.core'; +import { permissionGuard } from '@abp/ng.core'; // ... const routes: Routes = [ { path: 'path', component: YourComponent, - canActivate: [PermissionGuard], + canActivate: [permissionGuard], data: { requiredPolicy: 'YourProjectName.YourComponent', // policy key for your component }, diff --git a/docs/en/UI/Angular/Service-Proxies.md b/docs/en/UI/Angular/Service-Proxies.md index 6cd79505c2..43b8dc8b0f 100644 --- a/docs/en/UI/Angular/Service-Proxies.md +++ b/docs/en/UI/Angular/Service-Proxies.md @@ -73,6 +73,16 @@ export const environment: Config.Environment = { > The destination the `proxy` folder is created and the paths above may change based on your project structure. +## Parameters of generate-proxy + +- **module or -m:** The backend module name. The default is `app`. The object key of the modules defined in response of `api/abp/api-definition`. For example, if you want to generate-proxy of PermissionManagement, you should pass `permissionManagement` as a value. +- **apiName or -a:** The Backend api name, also known as remoteServiceName. It is defined in the selected module (in response of `api/abp/api-definition`). The property(key) name is `remoteServiceName`. For example for the PermissionManagement, you should pass `AbpPermissionManagement` +- **source:** Source of the Angular project for the API definition URL & root namespace resolution. +- **target:** Target for the Angular project to place the generated code. For example, if it's `permission-management`, it'll look like this (npm/ng-packs/packages/*permission-management*). +- **entryPoint:** To create the generated proxy folder in the target. The directory is `permission-management/proxy/src/lib/proxy` and the `permission-management` is the value of target. If you want to create a folder for the generated proxy, there are two options, you should either set the value `proxy` as the entryPoint or go to project.json and change the `sourceRoot` from `packages/permission-management/src` to `packages/permission-management/proxy/src`. No need to change the sourceRoot of project with the property. if you keep it empty, the proxy will be generated into the folder defined in the sourceRoot property. +- **serviceType:** The service type of the generated proxy. The options are `application`, `integration` and `all`. The default value is `application`. A developer can mark a service "integration service". If you want to skip proxy generation for the service, then this is the correct setting. More info about [Integration Services](../../Integration-Services) + + ### Services The `generate-proxy` command generates one service per back-end controller and a method (property with a function value actually) for each action in the controller. These methods call backend APIs via [RestService](./Http-Requests#restservice). diff --git a/docs/zh-Hans/Startup-Templates/Application.md b/docs/zh-Hans/Startup-Templates/Application.md index 91d7308226..d6733b8633 100644 --- a/docs/zh-Hans/Startup-Templates/Application.md +++ b/docs/zh-Hans/Startup-Templates/Application.md @@ -302,7 +302,7 @@ ABP 配置模块也已经导入到 `AppModule` 中, 以满足可延迟加载 ABP { path: 'dashboard', loadChildren: () => import('./dashboard/dashboard.module').then(m => m.DashboardModule), - canActivate: [AuthGuard, PermissionGuard], + canActivate: [authGuard, permissionGuard], data: { routes: { name: 'ProjectName::Menu:Dashboard', @@ -315,7 +315,7 @@ ABP 配置模块也已经导入到 `AppModule` 中, 以满足可延迟加载 ABP ``` 在上面的例子中; * 如果用户没有登录, AuthGuard 会阻塞访问并重定向到登录页面. -* PermissionGuard 使用 `rotues` 对象的 `requiredPolicy` 属性检查用户的权限. 如果用户未被授权访问该页, 则显示403页. +* permissionGuard 使用 `rotues` 对象的 `requiredPolicy` 属性检查用户的权限. 如果用户未被授权访问该页, 则显示403页. * `routes` 的 `name` 属性是菜单链接标签. 可以定义本地化 key. * `routes` 对象的 `iconClass` 属性是菜单链接图标类. * `routes` 对象的 `requiredPolicy` 属性是访问页面所需的策略 key. diff --git a/docs/zh-Hans/Timing.md b/docs/zh-Hans/Timing.md index 71ddbb9058..1d220a7aad 100644 --- a/docs/zh-Hans/Timing.md +++ b/docs/zh-Hans/Timing.md @@ -102,7 +102,7 @@ var normalizedDateTime = Clock.Normalize(dateTime) ### 时区设置 -ABP框架定义了一个名为 `Abp.Timing.Timezone` 的**设置**,可用于为应用程序的用户,[租户](Multi-Tenancy.md)或全局设置和获取时区. 默认值为 `UTC`. +ABP框架定义了一个名为 `Abp.Timing.TimeZone` 的**设置**,可用于为应用程序的用户,[租户](Multi-Tenancy.md)或全局设置和获取时区. 默认值为 `UTC`. 参阅[设置系统]了解更多关于设置系统. @@ -110,4 +110,4 @@ ABP框架定义了一个名为 `Abp.Timing.Timezone` 的**设置**,可用于为 `ITimezoneProvider` 是一个服务,可将[Windows时区ID](https://support.microsoft.com/en-us/help/973627/microsoft-time-zone-index-values)值简单转换为[Iana时区名称](https://www.iana.org/time-zones)值,反之亦然. 它还提供了获取这些时区列表与获取具有给定名称的 `TimeZoneInfo` 的方法. -它已使用[TimeZoneConverter](https://github.com/mj1856/TimeZoneConverter)库实现. \ No newline at end of file +它已使用[TimeZoneConverter](https://github.com/mj1856/TimeZoneConverter)库实现. diff --git a/docs/zh-Hans/Tutorials/Part-5.md b/docs/zh-Hans/Tutorials/Part-5.md index 5bdad55c1c..ec308f3ee7 100644 --- a/docs/zh-Hans/Tutorials/Part-5.md +++ b/docs/zh-Hans/Tutorials/Part-5.md @@ -389,11 +389,11 @@ UI的第一步是防止未认证用户看见"图书"菜单项并进入图书管 ````js import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; -import { AuthGuard, PermissionGuard } from '@abp/ng.core'; +import { authGuard, permissionGuard } from '@abp/ng.core'; import { BookComponent } from './book.component'; const routes: Routes = [ - { path: '', component: BookComponent, canActivate: [AuthGuard, PermissionGuard] }, + { path: '', component: BookComponent, canActivate: [authGuard, permissionGuard] }, ]; @NgModule({ @@ -403,8 +403,8 @@ const routes: Routes = [ export class BookRoutingModule {} ```` -* 从 `@abp/ng.core` 引入 `AuthGuard` 和 `PermissionGuard`. -* 在路由定义中添加 `canActivate: [AuthGuard, PermissionGuard]`. +* 从 `@abp/ng.core` 引入 `authGuard` 和 `permissionGuard`. +* 在路由定义中添加 `canActivate: [authGuard, permissionGuard]`. 打开 `/src/app/route.provider.ts`, 在 `/books` 路由中添加 `requiredPolicy: 'BookStore.Books'`. `/books` 路由应该如以下配置: diff --git a/docs/zh-Hans/UI/Angular/Permission-Management.md b/docs/zh-Hans/UI/Angular/Permission-Management.md index 08496f03fe..05e3dacbf1 100644 --- a/docs/zh-Hans/UI/Angular/Permission-Management.md +++ b/docs/zh-Hans/UI/Angular/Permission-Management.md @@ -53,20 +53,20 @@ export class YourComponent { ## 权限守卫 -如果你想要在导航过程中控制经过身份验证的用户对路由的访问权限,可以使用 `PermissionGuard`. +如果你想要在导航过程中控制经过身份验证的用户对路由的访问权限,可以使用 `permissionGuard`. -* 从@abp/ng.core导入PermissionGuard. -* 添加 `canActivate: [PermissionGuard]` 到你的路由对象. +* 从@abp/ng.core导入permissionGuard. +* 添加 `canActivate: [permissionGuard]` 到你的路由对象. * 添加 `requiredPolicy` 到路由模块路由的 `data` 属性. ```js -import { PermissionGuard } from '@abp/ng.core'; +import { permissionGuard } from '@abp/ng.core'; // ... const routes: Routes = [ { path: 'path', component: YourComponent, - canActivate: [PermissionGuard], + canActivate: [permissionGuard], data: { requiredPolicy: 'YourProjectName.YourComponent', // policy key for your component }, diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Card/AbpCardTagHelper.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Card/AbpCardTagHelper.cs index 5b568e16a6..dee16585b7 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Card/AbpCardTagHelper.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Card/AbpCardTagHelper.cs @@ -4,6 +4,8 @@ public class AbpCardTagHelper : AbpTagHelper public override void Process(TagHelperContext context, TagHelperOutput output) { output.TagName = "div"; - output.Attributes.AddClass("card mb-3"); + output.Attributes.AddClass("card"); + if (TagHelper.AddMarginBottomClass) + { + output.Attributes.AddClass("mb-3"); + } SetBorder(context, output); } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelper.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelper.cs index a426b50d33..62cae94413 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelper.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelper.cs @@ -52,6 +52,8 @@ public class AbpInputTagHelper : AbpTagHelper { output.Attributes.AddClass("form-floating"); } - output.Attributes.AddClass(isCheckBox ? "mb-2" : "mb-3"); + if (TagHelper.AddMarginBottomClass) + { + output.Attributes.AddClass(isCheckBox ? "mb-2" : "mb-3"); + } if (isCheckBox) { output.Attributes.AddClass("custom-checkbox"); @@ -110,7 +113,8 @@ public class AbpInputTagHelperService : AbpTagHelperService protected virtual string SurroundInnerHtmlAndGet(TagHelperContext context, TagHelperOutput output, string innerHtml, bool isCheckbox) { - return "
" + + var mb = TagHelper.AddMarginBottomClass ? (isCheckbox ? "mb-2" : "mb-3") : string.Empty; + return "
" + Environment.NewLine + innerHtml + Environment.NewLine + "
"; } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelper.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelper.cs index 7d11f69636..dbcf84437f 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelper.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelper.cs @@ -37,7 +37,7 @@ public class AbpSelectTagHelper : AbpTagHelper { output.Attributes.AddClass("form-floating"); } - output.Attributes.AddClass("mb-3"); + + if (TagHelper.AddMarginBottomClass) + { + output.Attributes.AddClass("mb-3"); + } output.TagMode = TagMode.StartTagAndEndTag; output.Content.SetHtmlContent(innerHtml); } @@ -79,7 +83,8 @@ public class AbpSelectTagHelperService : AbpTagHelperService protected virtual string SurroundInnerHtmlAndGet(TagHelperContext context, TagHelperOutput output, string innerHtml) { - return "
" + Environment.NewLine + innerHtml + Environment.NewLine + "
"; + var mb3 = TagHelper.AddMarginBottomClass ? "mb-3" : string.Empty; + return $"
" + Environment.NewLine + innerHtml + Environment.NewLine + "
"; } protected virtual async Task GetSelectTagAsync(TagHelperContext context, TagHelperOutput output, TagHelperContent childContent) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerBaseTagHelper.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerBaseTagHelper.cs index fed2981613..079431c9c6 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerBaseTagHelper.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerBaseTagHelper.cs @@ -21,20 +21,20 @@ public abstract class public bool LabelTooltipHtml { get; set; } = false; - [HtmlAttributeName("info")] + [HtmlAttributeName("info")] public string? InfoText { get; set; } - [HtmlAttributeName("disabled")] + [HtmlAttributeName("disabled")] public bool IsDisabled { get; set; } = false; - [HtmlAttributeName("readonly")] + [HtmlAttributeName("readonly")] public bool? IsReadonly { get; set; } = false; public bool AutoFocus { get; set; } public AbpFormControlSize Size { get; set; } = AbpFormControlSize.Default; - [HtmlAttributeName("required-symbol")] + [HtmlAttributeName("required-symbol")] public bool DisplayRequiredSymbol { get; set; } = true; public string? Name { get; set; } @@ -43,11 +43,13 @@ public abstract class public bool SuppressLabel { get; set; } + public bool AddMarginBottomClass { get; set; } = true; + protected AbpDatePickerBaseTagHelper(AbpDatePickerBaseTagHelperService service) : base(service) { _abpDatePickerOptionsImplementation = new AbpDatePickerOptions(); } - + public void SetDatePickerOptions(IAbpDatePickerOptions options) { _abpDatePickerOptionsImplementation = options; @@ -217,4 +219,4 @@ public abstract class get => _abpDatePickerOptionsImplementation.Options; set => _abpDatePickerOptionsImplementation.Options = value; } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerBaseTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerBaseTagHelperService.cs index 024fd4dd45..54e8720b17 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerBaseTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerBaseTagHelperService.cs @@ -22,7 +22,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form.DatePicker; public abstract class AbpDatePickerBaseTagHelperService : AbpTagHelperService where TTagHelper : AbpDatePickerBaseTagHelper { - protected readonly Dictionary> SupportedInputTypes = new() + protected readonly Dictionary> SupportedInputTypes = new() { { typeof(string), o => @@ -42,7 +42,7 @@ public abstract class AbpDatePickerBaseTagHelperService : AbpTagHelp { return dt.ToString("O"); } - + return string.Empty; } }, @@ -54,7 +54,7 @@ public abstract class AbpDatePickerBaseTagHelperService : AbpTagHelp { return dto.ToString("O"); } - + return string.Empty; } }, @@ -161,7 +161,10 @@ public abstract class AbpDatePickerBaseTagHelperService : AbpTagHelp output.TagMode = TagMode.StartTagAndEndTag; output.TagName = "div"; LeaveOnlyGroupAttributes(context, output); - output.Attributes.AddClass("mb-3"); + if (TagHelper.AddMarginBottomClass) + { + output.Attributes.AddClass("mb-3"); + } output.Content.AppendHtml(innerHtml); } @@ -224,7 +227,8 @@ public abstract class AbpDatePickerBaseTagHelperService : AbpTagHelp protected virtual string SurroundInnerHtmlAndGet(TagHelperContext context, TagHelperOutput output, string innerHtml) { - return "
" + + var mb = TagHelper.AddMarginBottomClass ? "mb-3" : string.Empty; + return $"
" + Environment.NewLine + innerHtml + Environment.NewLine + "
"; } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/AbpAspNetCoreMvcUiPackagesModule.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/AbpAspNetCoreMvcUiPackagesModule.cs index 4970015a46..7ba8105d43 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/AbpAspNetCoreMvcUiPackagesModule.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/AbpAspNetCoreMvcUiPackagesModule.cs @@ -30,11 +30,13 @@ public class AbpAspNetCoreMvcUiPackagesModule : AbpModule //moment options.AddLanguagesMapOrUpdate(MomentScriptContributor.PackageName, new NameValue("zh-Hans", "zh-cn"), - new NameValue("zh-Hant", "zh-tw")); + new NameValue("zh-Hant", "zh-tw"), + new NameValue("de-DE", "de")); options.AddLanguageFilesMapOrUpdate(MomentScriptContributor.PackageName, new NameValue("zh-Hans", "zh-cn"), - new NameValue("zh-Hant", "zh-tw")); + new NameValue("zh-Hant", "zh-tw"), + new NameValue("de-DE", "de")); //Timeago options.AddLanguageFilesMapOrUpdate(TimeagoScriptContributor.PackageName, diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/modal-manager.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/modal-manager.js index 1907ec9e23..03ba2706d0 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/modal-manager.js +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/modal-manager.js @@ -135,7 +135,7 @@ $.validator.defaults.ignore = ''; //TODO: Would be better if we can apply only f _args = args || {}; var argsWithoutFunc = {}; - for (a in _args) { + for (var a in _args) { if (_args.hasOwnProperty(a) && typeof _args[a] !== 'function') { argsWithoutFunc[a] = _args[a]; } @@ -144,7 +144,8 @@ $.validator.defaults.ignore = ''; //TODO: Would be better if we can apply only f _createContainer(_modalId) .load(options.viewUrl, $.param(argsWithoutFunc), function (response, status, xhr) { if (status === "error") { - //TODO: Handle! + var responseJSON = xhr.responseJSON ? xhr.responseJSON : JSON.parse(xhr.responseText); + abp.ajax.showError(responseJSON.error ? responseJSON.error : abp.ajax.defaultError); return; }; diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ServiceProxying/CSharp/CSharpServiceProxyGenerator.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ServiceProxying/CSharp/CSharpServiceProxyGenerator.cs index 5c17296272..88ce572d33 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ServiceProxying/CSharp/CSharpServiceProxyGenerator.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ServiceProxying/CSharp/CSharpServiceProxyGenerator.cs @@ -538,8 +538,11 @@ public class CSharpServiceProxyGenerator : ServiceProxyGeneratorBase : RepositoryBase, IE { var dbContext = await GetDbContextAsync(); - dbContext.Attach(entity); - - var updatedEntity = dbContext.Update(entity).Entity; + if (dbContext.Set().Local.All(e => e != entity)) + { + dbContext.Set().Attach(entity); + dbContext.Update(entity); + } if (autoSave) { await dbContext.SaveChangesAsync(GetCancellationToken(cancellationToken)); } - return updatedEntity; + return entity; } public async override Task UpdateManyAsync(IEnumerable entities, bool autoSave = false, CancellationToken cancellationToken = default) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs index cb97111c59..dc3754be3b 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs @@ -85,8 +85,10 @@ public class EntityHistoryHelper : IEntityHistoryHelper, ITransientDependency case EntityState.Modified: changeType = IsDeleted(entityEntry) ? EntityChangeType.Deleted : EntityChangeType.Updated; break; - case EntityState.Detached: case EntityState.Unchanged: + changeType = EntityChangeType.Updated; // Navigation property changes. + break; + case EntityState.Detached: default: return null; } @@ -184,6 +186,21 @@ public class EntityHistoryHelper : IEntityHistoryHelper, ITransientDependency } } + if (entityEntry.State == EntityState.Unchanged) + { + foreach (var navigation in entityEntry.Navigations) + { + if (navigation.IsModified || (navigation is ReferenceEntry && navigation.As().TargetEntry?.State == EntityState.Modified)) + { + propertyChanges.Add(new EntityPropertyChangeInfo + { + PropertyName = navigation.Metadata.Name, + PropertyTypeFullName = navigation.Metadata.ClrType.GetFirstGenericArgumentIfNullable().FullName! + }); + } + } + } + return propertyChanges; } @@ -205,12 +222,26 @@ public class EntityHistoryHelper : IEntityHistoryHelper, ITransientDependency protected virtual bool ShouldSaveEntityHistory(EntityEntry entityEntry, bool defaultValue = false) { - if (entityEntry.State == EntityState.Detached || - entityEntry.State == EntityState.Unchanged) + if (entityEntry.State == EntityState.Detached) { return false; } + if (entityEntry.State == EntityState.Unchanged) + { + if (entityEntry.Navigations.Any(navigationEntry => navigationEntry.IsModified)) + { + return true; + } + + if (entityEntry.Navigations.Where(x => x is ReferenceEntry).Cast().Any(x => x.TargetEntry != null && x.TargetEntry.State == EntityState.Modified)) + { + return true; + } + + return false; + } + var entityType = entityEntry.Metadata.ClrType; if (!EntityHelper.IsEntity(entityType) && !EntityHelper.IsValueObject(entityType)) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs index 80035c3252..2d237bdcc2 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs @@ -19,7 +19,7 @@ public class AbpJsonValueConverter : ValueConverter - netstandard2.0; + net8.0 enable Nullable Volo.Abp.Imaging.ImageSharp diff --git a/framework/src/Volo.Abp.Imaging.ImageSharp/Volo/Abp/Imaging/ImageSharpCompressOptions.cs b/framework/src/Volo.Abp.Imaging.ImageSharp/Volo/Abp/Imaging/ImageSharpCompressOptions.cs index 3fc291da6f..b7c097324d 100644 --- a/framework/src/Volo.Abp.Imaging.ImageSharp/Volo/Abp/Imaging/ImageSharpCompressOptions.cs +++ b/framework/src/Volo.Abp.Imaging.ImageSharp/Volo/Abp/Imaging/ImageSharpCompressOptions.cs @@ -22,7 +22,7 @@ public class ImageSharpCompressOptions PngEncoder = new PngEncoder { CompressionLevel = PngCompressionLevel.BestCompression, - IgnoreMetadata = true + SkipMetadata = true }; WebpEncoder = new WebpEncoder { diff --git a/framework/src/Volo.Abp.Imaging.ImageSharp/Volo/Abp/Imaging/ImageSharpImageCompressorContributor.cs b/framework/src/Volo.Abp.Imaging.ImageSharp/Volo/Abp/Imaging/ImageSharpImageCompressorContributor.cs index 8d2f29dd02..83988c8c26 100644 --- a/framework/src/Volo.Abp.Imaging.ImageSharp/Volo/Abp/Imaging/ImageSharpImageCompressorContributor.cs +++ b/framework/src/Volo.Abp.Imaging.ImageSharp/Volo/Abp/Imaging/ImageSharpImageCompressorContributor.cs @@ -34,14 +34,14 @@ public class ImageSharpImageCompressorContributor : IImageCompressorContributor, return new ImageCompressResult(stream, ImageProcessState.Unsupported); } - var (image, format) = await Image.LoadWithFormatAsync(stream, cancellationToken); + var image = await Image.LoadAsync(stream, cancellationToken); - if (!CanCompress(format.DefaultMimeType)) + if (!CanCompress(image.Metadata.DecodedImageFormat!.DefaultMimeType)) { return new ImageCompressResult(stream, ImageProcessState.Unsupported); } - var memoryStream = await GetStreamFromImageAsync(image, format, cancellationToken); + var memoryStream = await GetStreamFromImageAsync(image, image.Metadata.DecodedImageFormat, cancellationToken); if (memoryStream.Length < stream.Length) { diff --git a/framework/src/Volo.Abp.Imaging.ImageSharp/Volo/Abp/Imaging/ImageSharpImageResizerContributor.cs b/framework/src/Volo.Abp.Imaging.ImageSharp/Volo/Abp/Imaging/ImageSharpImageResizerContributor.cs index 92dbc25034..df93258f72 100644 --- a/framework/src/Volo.Abp.Imaging.ImageSharp/Volo/Abp/Imaging/ImageSharpImageResizerContributor.cs +++ b/framework/src/Volo.Abp.Imaging.ImageSharp/Volo/Abp/Imaging/ImageSharpImageResizerContributor.cs @@ -24,9 +24,9 @@ public class ImageSharpImageResizerContributor : IImageResizerContributor, ITran return new ImageResizeResult(stream, ImageProcessState.Unsupported); } - var (image, format) = await Image.LoadWithFormatAsync(stream, cancellationToken); + var image = await Image.LoadAsync(stream, cancellationToken); - if (!CanResize(format.DefaultMimeType)) + if (!CanResize(image.Metadata.DecodedImageFormat!.DefaultMimeType)) { return new ImageResizeResult(stream, ImageProcessState.Unsupported); } @@ -44,7 +44,7 @@ public class ImageSharpImageResizerContributor : IImageResizerContributor, ITran try { - await image.SaveAsync(memoryStream, format, cancellationToken: cancellationToken); + await image.SaveAsync(memoryStream, image.Metadata.DecodedImageFormat, cancellationToken: cancellationToken); memoryStream.Position = 0; return new ImageResizeResult(memoryStream, ImageProcessState.Done); } diff --git a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs index a258d3f8ab..b8bebd95a5 100644 --- a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs +++ b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs @@ -53,6 +53,16 @@ public class AppUrlProvider : IAppUrlProvider, ITransientDependency return allow; } + public virtual async Task NormalizeUrlAsync(string? url) + { + if (string.IsNullOrWhiteSpace(url)) + { + return url; + } + + return await ReplacePlaceHoldersAsync(url!); + } + protected virtual async Task GetConfiguredUrl(string appName, string? urlName) { var url = await GetUrlOrNullAsync(appName, urlName); diff --git a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/IAppUrlProvider.cs b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/IAppUrlProvider.cs index 9241c5f428..4e800a524e 100644 --- a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/IAppUrlProvider.cs +++ b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/IAppUrlProvider.cs @@ -10,4 +10,6 @@ public interface IAppUrlProvider Task GetUrlOrNullAsync([NotNull] string appName, string? urlName = null); bool IsRedirectAllowedUrl(string url); + + Task NormalizeUrlAsync(string? url); } diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ar.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ar.json index bcbab76211..a7de87d5ef 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ar.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ar.json @@ -49,6 +49,8 @@ "ItemWillBeDeletedMessageWithFormat": "سيتم حذف {0}!", "ItemWillBeDeletedMessage": "سوف يتم حذف هذا البند!", "ManageYourAccount": "إدارة حسابك", - "OthersGroup": "آخرون" + "OthersGroup": "آخرون", + "Today": "اليوم", + "Apply": "يتقدم" } } diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/cs.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/cs.json index 5dc41952a6..a1f1856c9e 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/cs.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/cs.json @@ -49,6 +49,8 @@ "ItemWillBeDeletedMessageWithFormat": "{0} bude smazáno!", "ItemWillBeDeletedMessage": "Tato položka bude smazána!", "ManageYourAccount": "Spravujte svůj účet", - "OthersGroup": "Jiný" + "OthersGroup": "Jiný", + "Today": "Dnes", + "Apply": "Aplikovat" } } diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de.json index dc99f75586..22fddc3e27 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de.json @@ -49,6 +49,8 @@ "ItemWillBeDeletedMessageWithFormat": "{0} wird gelöscht!", "ItemWillBeDeletedMessage": "Dieses Element wird gelöscht!", "ManageYourAccount": "Verwalten Sie Ihr Benutzerkonto", - "OthersGroup":"Andere" + "OthersGroup":"Andere", + "Today": "Heute", + "Apply": "Anwenden" } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/el.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/el.json index 24a7642eb0..8cb7b4c0dc 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/el.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/el.json @@ -49,6 +49,8 @@ "ItemWillBeDeletedMessageWithFormat": "Το {0} θα διαγραφεί", "ItemWillBeDeletedMessage": "Αυτό το στοιχείο θα διαγραφεί!", "ManageYourAccount": "Διαχείριση Λογαριασμού", - "OthersGroup":"άλλος" + "OthersGroup":"άλλος", + "Today": "Σήμερα", + "Apply": "Ισχύουν" } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en-GB.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en-GB.json index c6ea44f1f3..68ad3dda07 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en-GB.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en-GB.json @@ -50,6 +50,8 @@ "ItemWillBeDeletedMessage": "This item will be deleted!", "ManageYourAccount": "Manage your account", "OthersGroup": "Other", - "NotAssigned": "Not Assigned" + "NotAssigned": "Not Assigned", + "Today": "Today", + "Apply": "Apply" } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/es.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/es.json index c28e8049bc..abf136d87b 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/es.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/es.json @@ -49,6 +49,8 @@ "ItemWillBeDeletedMessageWithFormat": "{0} serán borrados!", "ItemWillBeDeletedMessage": "Este elemento será borrado", "ManageYourAccount": "Administrar cuenta", - "OthersGroup": "Otra" + "OthersGroup": "Otra", + "Today": "Hoy", + "Apply": "Aplicar" } } diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/fa.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/fa.json index 4fd179573b..bcc6250656 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/fa.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/fa.json @@ -49,6 +49,8 @@ "ItemWillBeDeletedMessageWithFormat": "{0} حذف خواهد شد!", "ItemWillBeDeletedMessage": "این مورد حذف خواهد شد!", "ManageYourAccount": "حساب خود را مدیریت کنید", - "OthersGroup": "دیگر" + "OthersGroup": "دیگر", + "Today": "امروز", + "Apply": "درخواست دادن" } } diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/fi.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/fi.json index 25811c92eb..25ab3ee59a 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/fi.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/fi.json @@ -49,6 +49,8 @@ "ItemWillBeDeletedMessageWithFormat": "{0} poistetaan!", "ItemWillBeDeletedMessage": "Tämä kohde poistetaan!", "ManageYourAccount": "Hallitse tiliäsi", - "OthersGroup": "Muut" + "OthersGroup": "Muut", + "Today": "Tänään", + "Apply": "Käytä" } } diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/fr.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/fr.json index b850315dfe..6e5c67d2d6 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/fr.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/fr.json @@ -49,6 +49,8 @@ "ItemWillBeDeletedMessageWithFormat": "{0} sera supprimé!", "ItemWillBeDeletedMessage": "Cet objet va être supprimé!", "ManageYourAccount": "Gérer votre compte", - "OthersGroup": "Autre" + "OthersGroup": "Autre", + "Today": "Aujourd'hui", + "Apply": "Appliquer" } } diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/hi.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/hi.json index 0a20f1dcbb..96b73848f5 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/hi.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/hi.json @@ -49,6 +49,8 @@ "ItemWillBeDeletedMessageWithFormat": "{0} हटा दिया जाएगा!", "ItemWillBeDeletedMessage": "यह आइटम हटा दिया जाएगा!", "ManageYourAccount": "अपने खाते का प्रबंधन", - "OthersGroup": "अन्य" + "OthersGroup": "अन्य", + "Today": "आज", + "Apply": "आवेदन करना" } } diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/hr.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/hr.json index a6285a4cee..3126f17bbf 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/hr.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/hr.json @@ -49,6 +49,8 @@ "ItemWillBeDeletedMessageWithFormat": "{0} zapis će biti obrisan!", "ItemWillBeDeletedMessage": "Ovaj zapis će biti obrisan!", "ManageYourAccount": "Upravljaj korisničkim računom", - "OthersGroup": "Drugi" + "OthersGroup": "Drugi", + "Today": "Danas", + "Apply": "primijeniti" } } diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/hu.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/hu.json index 98c0c46f54..f3e6454b5b 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/hu.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/hu.json @@ -49,6 +49,8 @@ "ItemWillBeDeletedMessageWithFormat": "{0} törlésre kerül!", "ItemWillBeDeletedMessage": "Ez az elem törlődik!", "ManageYourAccount": "Kezelje fiókját", - "OthersGroup": "Egyéb" + "OthersGroup": "Egyéb", + "Today": "Ma", + "Apply": "Alkalmaz" } } diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/is.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/is.json index 12b1565c2e..5a9d9eab54 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/is.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/is.json @@ -49,6 +49,8 @@ "ItemWillBeDeletedMessageWithFormat": "{0} verður eytt!", "ItemWillBeDeletedMessage": "Þessum lið verður eytt!", "ManageYourAccount": "Stillingar notandaaðgangs", - "OthersGroup": "Annað" + "OthersGroup": "Annað", + "Today": "Í dag", + "Apply": "Sækja um" } } diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/it.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/it.json index f07bf67e2d..171681980d 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/it.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/it.json @@ -49,6 +49,8 @@ "ItemWillBeDeletedMessageWithFormat": "{0} sarà eliminato!", "ItemWillBeDeletedMessage": "Questo elemento sarà eliminato!", "ManageYourAccount": "Gestisci il tuo account", - "OthersGroup": "Altra" + "OthersGroup": "Altra", + "Today": "Oggi", + "Apply": "Fare domanda a" } } diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/nl.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/nl.json index 5875fe07b9..42d48d5900 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/nl.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/nl.json @@ -49,6 +49,8 @@ "ItemWillBeDeletedMessageWithFormat": "{0} wordt verwijderd!", "ItemWillBeDeletedMessage": "Dit item wordt verwijderd!", "ManageYourAccount": "Beheer uw account", - "OthersGroup": "Ander" + "OthersGroup": "Ander", + "Today": "Vandaag", + "Apply": "Toepassen" } } diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/pl-PL.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/pl-PL.json index f2b8227137..bd7a6d5818 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/pl-PL.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/pl-PL.json @@ -49,6 +49,8 @@ "ItemWillBeDeletedMessageWithFormat": "{0} zostanie usunięty!", "ItemWillBeDeletedMessage": "Ten element zostanie usunięty!", "ManageYourAccount": "Zarządzaj kontem", - "OthersGroup": "Inny" + "OthersGroup": "Inny", + "Today": "Dzisiaj", + "Apply": "Stosować" } } diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/pt-BR.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/pt-BR.json index 928c9299fb..a205b9442a 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/pt-BR.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/pt-BR.json @@ -49,6 +49,8 @@ "ItemWillBeDeletedMessageWithFormat": "{0} será excluído!", "ItemWillBeDeletedMessage": "Este item será excluído!", "ManageYourAccount": "Gerenciar sua conta", - "OthersGroup": "Outra" + "OthersGroup": "Outra", + "Today": "Hoje", + "Apply": "Aplicar" } } diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ro-RO.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ro-RO.json index 544b893c39..0edf60e833 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ro-RO.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ro-RO.json @@ -49,6 +49,8 @@ "ItemWillBeDeletedMessageWithFormat": "{0} va fi şters!", "ItemWillBeDeletedMessage": "Acest articol va fi şters!", "ManageYourAccount": "Administraţi-vă contul", - "OthersGroup": "Alte" + "OthersGroup": "Alte", + "Today": "Astăzi", + "Apply": "aplica" } } diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ru.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ru.json index 66f24ca65d..53104c18f4 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ru.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ru.json @@ -49,6 +49,8 @@ "ItemWillBeDeletedMessageWithFormat": "{0} будет удален!", "ItemWillBeDeletedMessage": "Этот предмет будет удален!", "ManageYourAccount": "Настройте свой аккаунт", - "OthersGroup": "Другой" + "OthersGroup": "Другой", + "Today": "Сегодня", + "Apply": "Применять" } } diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/sk.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/sk.json index 28278f04f2..313ce021de 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/sk.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/sk.json @@ -49,6 +49,8 @@ "ItemWillBeDeletedMessageWithFormat": "{0} sa vymaže!", "ItemWillBeDeletedMessage": "Táto položka bude vymazaná!", "ManageYourAccount": "Spravovať svoje konto", - "OthersGroup": "Iné" + "OthersGroup": "Iné", + "Today": "Dnes", + "Apply": "Použiť" } } diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/sl.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/sl.json index c05c1dc202..e7ff5ddc66 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/sl.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/sl.json @@ -49,6 +49,8 @@ "ItemWillBeDeletedMessageWithFormat": "{0} bo izbrisan!", "ItemWillBeDeletedMessage": "Ta element bo izbrisan!", "ManageYourAccount": "Upravljajte svoj račun", - "OthersGroup": "Ostalo" + "OthersGroup": "Ostalo", + "Today": "Danes", + "Apply": "Prijavite se" } } diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/vi.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/vi.json index 1b8bc5fb5b..581964a9b8 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/vi.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/vi.json @@ -49,6 +49,8 @@ "ItemWillBeDeletedMessageWithFormat": "{0} sẽ bị xóa!", "ItemWillBeDeletedMessage": "Vật phẩm này sẽ bị xoá!", "ManageYourAccount": "Quản lý tài khoản của bạn", - "OthersGroup": "Khác" + "OthersGroup": "Khác", + "Today": "Hôm nay", + "Apply": "Áp dụng" } } diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hans.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hans.json index bcf68dbcaa..51d5865924 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hans.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hans.json @@ -51,6 +51,8 @@ "ManageYourAccount": "管理你的账户", "OthersGroup": "其他", "CopiedToTheClipboard": "已复制到剪贴板", - "NotAssigned": "未分配" + "NotAssigned": "未分配", + "Today": "今天", + "Apply": "应用" } } diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hant.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hant.json index 1c2719b954..dac062d1cd 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hant.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hant.json @@ -51,6 +51,8 @@ "ManageYourAccount": "管理個人帳號", "OthersGroup": "其他", "CopiedToTheClipboard": "已复制到剪贴板", - "NotAssigned": "未分配" + "NotAssigned": "未分配", + "Today": "今天", + "Apply": "應用" } } diff --git a/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/Entities/AppEntityWithNavigations.cs b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/Entities/AppEntityWithNavigations.cs new file mode 100644 index 0000000000..e68d9d94b8 --- /dev/null +++ b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/Entities/AppEntityWithNavigations.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using Volo.Abp.Domain.Entities; + +namespace Volo.Abp.Auditing.App.Entities; + +[Audited] +public class AppEntityWithNavigations : AggregateRoot +{ + protected AppEntityWithNavigations() + { + + } + + public AppEntityWithNavigations(Guid id, string name) + : base(id) + { + Name = name; + FullName = name; + } + + public string Name { get; set; } + + public string FullName { get; set; } + + public virtual AppEntityWithNavigationChildOneToOne OneToOne { get; set; } + + public virtual List OneToMany { get; set; } + + public virtual List ManyToMany { get; set; } +} + +[Audited] +public class AppEntityWithNavigationChildOneToOne : Entity +{ + public string ChildName { get; set; } +} + +[Audited] +public class AppEntityWithNavigationChildOneToMany : Entity +{ + public Guid AppEntityWithNavigationId { get; set; } + + public string ChildName { get; set; } +} + +[Audited] +public class AppEntityWithNavigationChildManyToMany : Entity +{ + public string ChildName { get; set; } +} diff --git a/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/EntityFrameworkCore/AbpAuditingTestDbContext.cs b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/EntityFrameworkCore/AbpAuditingTestDbContext.cs index 8a0a798598..f6d4bf49ef 100644 --- a/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/EntityFrameworkCore/AbpAuditingTestDbContext.cs +++ b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/App/EntityFrameworkCore/AbpAuditingTestDbContext.cs @@ -27,6 +27,8 @@ public class AbpAuditingTestDbContext : AbpDbContext public DbSet AppEntityWithValueObject { get; set; } + public DbSet AppEntityWithNavigations { get; set; } + public AbpAuditingTestDbContext(DbContextOptions options) : base(options) { @@ -42,5 +44,14 @@ public class AbpAuditingTestDbContext : AbpDbContext b.ConfigureByConvention(); b.OwnsOne(v => v.AppEntityWithValueObjectAddress); }); + + modelBuilder.Entity(b => + { + b.ConfigureByConvention(); + b.HasOne(x => x.OneToOne).WithOne().HasForeignKey(x => x.Id); + b.HasMany(x => x.OneToMany).WithOne().HasForeignKey(x => x.AppEntityWithNavigationId); + b.HasMany(x => x.ManyToMany).WithMany(); + }); + } } diff --git a/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/Auditing_Tests.cs b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/Auditing_Tests.cs index 3aa0da5a9b..7154fd805c 100644 --- a/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/Auditing_Tests.cs +++ b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/Auditing_Tests.cs @@ -411,14 +411,172 @@ public class Auditing_Tests : AbpAuditingTestBase #pragma warning disable 4014 AuditingStore.Received().SaveAsync(Arg.Is(x => x.EntityChanges.Count == 2 && x.EntityChanges[0].ChangeType == EntityChangeType.Updated && - x.EntityChanges[0].EntityTypeFullName == typeof(AppEntityWithValueObject).FullName && + x.EntityChanges[0].EntityTypeFullName == typeof(AppEntityWithValueObjectAddress).FullName && + x.EntityChanges[0].PropertyChanges.Count == 1 && + x.EntityChanges[0].PropertyChanges[0].PropertyName == nameof(AppEntityWithValueObjectAddress.Country) && + x.EntityChanges[0].PropertyChanges[0].OriginalValue == "\"England\"" && + x.EntityChanges[0].PropertyChanges[0].NewValue == "\"Germany\"" && + + x.EntityChanges[1].ChangeType == EntityChangeType.Updated && + x.EntityChanges[1].EntityTypeFullName == typeof(AppEntityWithValueObject).FullName && + x.EntityChanges[1].PropertyChanges.Count == 1 && + x.EntityChanges[1].PropertyChanges[0].PropertyName == nameof(AppEntityWithValueObject.AppEntityWithValueObjectAddress))); + +#pragma warning restore 4014 + + using (var scope = _auditingManager.BeginScope()) + { + using (var uow = _unitOfWorkManager.Begin()) + { + var entity = await repository.GetAsync(entityId); + + entity.AppEntityWithValueObjectAddress = null; + + await repository.UpdateAsync(entity); + await uow.CompleteAsync(); + await scope.SaveAsync(); + } + } + +#pragma warning disable 4014 + AuditingStore.Received().SaveAsync(Arg.Is(x => x.EntityChanges.Count == 2 && + x.EntityChanges[0].ChangeType == EntityChangeType.Updated && + x.EntityChanges[0].EntityTypeFullName == typeof(AppEntityWithValueObjectAddress).FullName && + x.EntityChanges[0].PropertyChanges.Count == 1 && + x.EntityChanges[0].PropertyChanges[0].PropertyName == nameof(AppEntityWithValueObjectAddress.Country) && + x.EntityChanges[0].PropertyChanges[0].OriginalValue == "\"England\"" && + x.EntityChanges[0].PropertyChanges[0].NewValue == "\"Germany\"" && + + x.EntityChanges[1].ChangeType == EntityChangeType.Updated && + x.EntityChanges[1].EntityTypeFullName == typeof(AppEntityWithValueObject).FullName)); + +#pragma warning restore 4014 + } + + [Fact] + public virtual async Task Should_Write_AuditLog_For_Navigations_Changes() + { + var entityId = Guid.NewGuid(); + var repository = ServiceProvider.GetRequiredService>(); + await repository.InsertAsync(new AppEntityWithNavigations(entityId, "test name")); + + using (var scope = _auditingManager.BeginScope()) + { + using (var uow = _unitOfWorkManager.Begin()) + { + var entity = await repository.GetAsync(entityId); + + entity.FullName = "test full name"; + + await repository.UpdateAsync(entity); + + await uow.CompleteAsync(); + await scope.SaveAsync(); + } + } + +#pragma warning disable 4014 + AuditingStore.Received().SaveAsync(Arg.Is(x => x.EntityChanges.Count == 1 && + x.EntityChanges[0].ChangeType == EntityChangeType.Updated && + x.EntityChanges[0].EntityTypeFullName == typeof(AppEntityWithNavigations).FullName && + x.EntityChanges[0].PropertyChanges.Count == 1 && + x.EntityChanges[0].PropertyChanges[0].OriginalValue == "\"test name\"" && + x.EntityChanges[0].PropertyChanges[0].NewValue == "\"test full name\"" && + x.EntityChanges[0].PropertyChanges[0].PropertyName == nameof(AppEntityWithNavigations.FullName) && + x.EntityChanges[0].PropertyChanges[0].PropertyTypeFullName == typeof(string).FullName)); +#pragma warning restore 4014 + using (var scope = _auditingManager.BeginScope()) + { + using (var uow = _unitOfWorkManager.Begin()) + { + var entity = await repository.GetAsync(entityId); + + entity.OneToOne = new AppEntityWithNavigationChildOneToOne + { + ChildName = "ChildName" + }; + + await repository.UpdateAsync(entity); + + await uow.CompleteAsync(); + await scope.SaveAsync(); + } + } + +#pragma warning disable 4014 + AuditingStore.Received().SaveAsync(Arg.Is(x => x.EntityChanges.Count == 2 && + x.EntityChanges[0].ChangeType == EntityChangeType.Created && + x.EntityChanges[0].EntityTypeFullName == typeof(AppEntityWithNavigationChildOneToOne).FullName && + x.EntityChanges[1].ChangeType == EntityChangeType.Updated && + x.EntityChanges[1].EntityTypeFullName == typeof(AppEntityWithNavigations).FullName && + x.EntityChanges[1].PropertyChanges.Count == 1 && + x.EntityChanges[1].PropertyChanges[0].PropertyName == nameof(AppEntityWithNavigations.OneToOne) && + x.EntityChanges[1].PropertyChanges[0].PropertyTypeFullName == typeof(AppEntityWithNavigationChildOneToOne).FullName)); +#pragma warning restore 4014 + + using (var scope = _auditingManager.BeginScope()) + { + using (var uow = _unitOfWorkManager.Begin()) + { + var entity = await repository.GetAsync(entityId); + + entity.OneToMany = new List() + { + new AppEntityWithNavigationChildOneToMany + { + AppEntityWithNavigationId = entity.Id, + ChildName = "ChildName1" + } + }; + + await repository.UpdateAsync(entity); + await uow.CompleteAsync(); + await scope.SaveAsync(); + } + } + +#pragma warning disable 4014 + AuditingStore.Received().SaveAsync(Arg.Is(x => x.EntityChanges.Count == 2 && + x.EntityChanges[0].ChangeType == EntityChangeType.Created && + x.EntityChanges[0].EntityTypeFullName == typeof(AppEntityWithNavigationChildOneToMany).FullName && + x.EntityChanges[1].ChangeType == EntityChangeType.Updated && + x.EntityChanges[1].EntityTypeFullName == typeof(AppEntityWithNavigations).FullName && + x.EntityChanges[1].PropertyChanges.Count == 1 && + x.EntityChanges[1].PropertyChanges[0].PropertyName == nameof(AppEntityWithNavigations.OneToMany) && + x.EntityChanges[1].PropertyChanges[0].PropertyTypeFullName == typeof(List).FullName)); + +#pragma warning restore 4014 + + using (var scope = _auditingManager.BeginScope()) + { + using (var uow = _unitOfWorkManager.Begin()) + { + var entity = await repository.GetAsync(entityId); + + entity.ManyToMany = new List() + { + new AppEntityWithNavigationChildManyToMany + { + ChildName = "ChildName1" + } + }; + + await repository.UpdateAsync(entity); + await uow.CompleteAsync(); + await scope.SaveAsync(); + } + } + +#pragma warning disable 4014 + AuditingStore.Received().SaveAsync(Arg.Is(x => x.EntityChanges.Count == 2 && + x.EntityChanges[0].ChangeType == EntityChangeType.Created && + x.EntityChanges[0].EntityTypeFullName == typeof(AppEntityWithNavigationChildManyToMany).FullName && x.EntityChanges[1].ChangeType == EntityChangeType.Updated && - x.EntityChanges[1].EntityTypeFullName == typeof(AppEntityWithValueObjectAddress).FullName && + x.EntityChanges[1].EntityTypeFullName == typeof(AppEntityWithNavigations).FullName && x.EntityChanges[1].PropertyChanges.Count == 1 && - x.EntityChanges[1].PropertyChanges[0].PropertyName == nameof(AppEntityWithValueObjectAddress.Country) && - x.EntityChanges[1].PropertyChanges[0].OriginalValue == "\"England\"" && - x.EntityChanges[1].PropertyChanges[0].NewValue == "\"Germany\"")); + x.EntityChanges[1].PropertyChanges[0].PropertyName == nameof(AppEntityWithNavigations.ManyToMany) && + x.EntityChanges[1].PropertyChanges[0].PropertyTypeFullName == typeof(List).FullName)); #pragma warning restore 4014 } diff --git a/latest-versions.json b/latest-versions.json index 7823e6af9d..e2911011e7 100644 --- a/latest-versions.json +++ b/latest-versions.json @@ -1,6 +1,6 @@ [ { - "version": "7.4.0", + "version": "7.4.1", "releaseDate": "", "type": "stable", "message": "" diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs index ab5e2819cb..d4bb0dbc5e 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs @@ -242,14 +242,16 @@ public class LoginModel : AccountPageModel var user = await UserManager.FindByEmailAsync(email); if (user == null) { - user = await CreateExternalUserAsync(loginInfo); + return RedirectToPage("./Register", new { + IsExternalLogin = true, + ExternalLoginAuthSchema = loginInfo.LoginProvider, + ReturnUrl = returnUrl + }); } - else + + if (await UserManager.FindByLoginAsync(loginInfo.LoginProvider, loginInfo.ProviderKey) == null) { - if (await UserManager.FindByLoginAsync(loginInfo.LoginProvider, loginInfo.ProviderKey) == null) - { - CheckIdentityErrors(await UserManager.AddLoginAsync(user, loginInfo)); - } + CheckIdentityErrors(await UserManager.AddLoginAsync(user, loginInfo)); } await SignInManager.SignInAsync(user, false); @@ -264,35 +266,6 @@ public class LoginModel : AccountPageModel return RedirectSafely(returnUrl, returnUrlHash); } - protected virtual async Task CreateExternalUserAsync(ExternalLoginInfo info) - { - await IdentityOptions.SetAsync(); - - var emailAddress = info.Principal.FindFirstValue(AbpClaimTypes.Email) ?? info.Principal.FindFirstValue(ClaimTypes.Email); - var userName = await GetUserNameFromEmail(emailAddress); - - var user = new IdentityUser(GuidGenerator.Create(), userName, emailAddress, CurrentTenant.Id); - - CheckIdentityErrors(await UserManager.CreateAsync(user)); - CheckIdentityErrors(await UserManager.SetEmailAsync(user, emailAddress)); - CheckIdentityErrors(await UserManager.AddLoginAsync(user, info)); - CheckIdentityErrors(await UserManager.AddDefaultRolesAsync(user)); - - user.Name = info.Principal.FindFirstValue(AbpClaimTypes.Name); - user.Surname = info.Principal.FindFirstValue(AbpClaimTypes.SurName); - - var phoneNumber = info.Principal.FindFirstValue(AbpClaimTypes.PhoneNumber); - if (!phoneNumber.IsNullOrWhiteSpace()) - { - var phoneNumberConfirmed = string.Equals(info.Principal.FindFirstValue(AbpClaimTypes.PhoneNumberVerified), "true", StringComparison.InvariantCultureIgnoreCase); - user.SetPhoneNumber(phoneNumber, phoneNumberConfirmed); - } - - await UserManager.UpdateAsync(user); - - return user; - } - protected virtual async Task ReplaceEmailToUsernameOfInputIfNeeds() { if (!ValidationHelper.IsValidEmailAddress(LoginInput.UserNameOrEmailAddress)) diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml index fabe41ae6f..745368402c 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml @@ -12,7 +12,7 @@ @L["Login"]
- @if ((!Model.IsExternalLogin || Model.UserNameExtracted) && Model.EnableLocalRegister) + @if (Model.EnableLocalRegister || Model.IsExternalLogin) { } diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs index 722eca26b7..322a17e82f 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs @@ -37,7 +37,6 @@ public class RegisterModel : AccountPageModel [BindProperty(SupportsGet = true)] public string ExternalLoginAuthSchema { get; set; } - public bool UserNameExtracted { get; set; } public IEnumerable ExternalProviders { get; set; } public IEnumerable VisibleExternalProviders => ExternalProviders.Where(x => !string.IsNullOrWhiteSpace(x.DisplayName)); public bool EnableLocalRegister { get; set; } @@ -128,7 +127,6 @@ public class RegisterModel : AccountPageModel { Input.UserName = await GetUserNameFromEmail(Input.EmailAddress); } - UserNameExtracted = true; await RegisterExternalUserAsync(externalLoginInfo, Input.UserName, Input.EmailAddress); } else diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/AbpAuditLoggingDbContextModelBuilderExtensions.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/AbpAuditLoggingDbContextModelBuilderExtensions.cs index 8a3cd7de23..e63d806993 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/AbpAuditLoggingDbContextModelBuilderExtensions.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/AbpAuditLoggingDbContextModelBuilderExtensions.cs @@ -73,7 +73,7 @@ public static class AbpAuditLoggingDbContextModelBuilderExtensions b.ConfigureByConvention(); b.Property(x => x.EntityTypeFullName).HasMaxLength(EntityChangeConsts.MaxEntityTypeFullNameLength).IsRequired().HasColumnName(nameof(EntityChange.EntityTypeFullName)); - b.Property(x => x.EntityId).HasMaxLength(EntityChangeConsts.MaxEntityIdLength).IsRequired().HasColumnName(nameof(EntityChange.EntityId)); + b.Property(x => x.EntityId).HasMaxLength(EntityChangeConsts.MaxEntityIdLength).HasColumnName(nameof(EntityChange.EntityId)); b.Property(x => x.AuditLogId).IsRequired().HasColumnName(nameof(EntityChange.AuditLogId)); b.Property(x => x.ChangeTime).IsRequired().HasColumnName(nameof(EntityChange.ChangeTime)); b.Property(x => x.ChangeType).IsRequired().HasColumnName(nameof(EntityChange.ChangeType)); diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json index dd83d4934a..dd3cc1b622 100644 --- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json +++ b/modules/basic-theme/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": "~7.4.0", + "@abp/aspnetcore.mvc.ui.theme.shared": "~7.4.1", "@abp/prismjs": "^~7.3.2", "@abp/highlight.js": "^~7.3.2" }, diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json index 80700852b3..715a290a18 100644 --- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json +++ b/modules/basic-theme/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": "~7.4.0", - "@abp/prismjs": "~7.4.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "~7.4.1", + "@abp/prismjs": "~7.4.1" }, "devDependencies": {} } diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock index a61b076582..ec4f519955 100644 --- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock +++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock @@ -2,39 +2,39 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-7.4.0.tgz#5088dd82ce343e1123e025848f09b51df988b225" - integrity sha512-teT7I0kgjek/lHzpTg5VOVCQ3IL26nFB43Aa/45fuaSwh9FJd3IJNXGL6xwp85oKaptDYSBXIF4GbrUfp2Ugqg== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~7.4.0" - -"@abp/aspnetcore.mvc.ui.theme.shared@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-7.4.0.tgz#e676444a46214e850b0d916daeeb912774ac381d" - integrity sha512-X+dgdgHGUTyf0zaSPsqQp2ZZWu2+9gIRT4r4/LDgxchHgfNvcKRF8jH/JICcVgGD1adJvZzzDpTefL8CuAIRJA== - dependencies: - "@abp/aspnetcore.mvc.ui" "~7.4.0" - "@abp/bootstrap" "~7.4.0" - "@abp/bootstrap-datepicker" "~7.4.0" - "@abp/bootstrap-daterangepicker" "~7.4.0" - "@abp/datatables.net-bs5" "~7.4.0" - "@abp/font-awesome" "~7.4.0" - "@abp/jquery-form" "~7.4.0" - "@abp/jquery-validation-unobtrusive" "~7.4.0" - "@abp/lodash" "~7.4.0" - "@abp/luxon" "~7.4.0" - "@abp/malihu-custom-scrollbar-plugin" "~7.4.0" - "@abp/moment" "~7.4.0" - "@abp/select2" "~7.4.0" - "@abp/sweetalert2" "~7.4.0" - "@abp/timeago" "~7.4.0" - "@abp/toastr" "~7.4.0" - -"@abp/aspnetcore.mvc.ui@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-7.4.0.tgz#61e1b52d2a940e02242f57007bd3f0fcb583c09a" - integrity sha512-gdoxOBo10DWDYhUq1GVfguC0Ot8PYhoA3VLf88/RatL88BNUUlt0e71uMFcx/gk72fuAE+o9zXn/6nq1wtpSwQ== +"@abp/aspnetcore.mvc.ui.theme.basic@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-7.4.1.tgz#62df78aab8a0b374817fdbab6c6363529b43f925" + integrity sha512-KaPmBlwNjOl1+vwLj5O8J11YHBSRg4y0IIxtgZiculXQNFPHbYAXm8sfTw6Wcsx00STrhvUVJQxYMePNnOTCTg== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~7.4.1" + +"@abp/aspnetcore.mvc.ui.theme.shared@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-7.4.1.tgz#8f8679f5cf80137324ddbec9fcaa67332783e708" + integrity sha512-0uUKuTsi/ikLFUUNEqvrn7KimgsvuK+7m1yZD4o47FQlgGxTyt1zQY9w3K6YyhyC3lsT6qCwiAPIoFOzPkIg/Q== + dependencies: + "@abp/aspnetcore.mvc.ui" "~7.4.1" + "@abp/bootstrap" "~7.4.1" + "@abp/bootstrap-datepicker" "~7.4.1" + "@abp/bootstrap-daterangepicker" "~7.4.1" + "@abp/datatables.net-bs5" "~7.4.1" + "@abp/font-awesome" "~7.4.1" + "@abp/jquery-form" "~7.4.1" + "@abp/jquery-validation-unobtrusive" "~7.4.1" + "@abp/lodash" "~7.4.1" + "@abp/luxon" "~7.4.1" + "@abp/malihu-custom-scrollbar-plugin" "~7.4.1" + "@abp/moment" "~7.4.1" + "@abp/select2" "~7.4.1" + "@abp/sweetalert2" "~7.4.1" + "@abp/timeago" "~7.4.1" + "@abp/toastr" "~7.4.1" + +"@abp/aspnetcore.mvc.ui@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-7.4.1.tgz#49c13718a17569f97b71f978b50f367dff67b8f7" + integrity sha512-EvYrfk0mpSt1jAMZmfFcHoNWEJskzResKp0bflOYsYPsZPuJ5WraKsk4IEEpesYHCyHW5AAb5HBJHeoSbVLh4Q== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -43,175 +43,175 @@ merge-stream "^2.0.0" micromatch "^4.0.2" -"@abp/bootstrap-datepicker@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-7.4.0.tgz#75edc2127ca26d86bfefaa6e37579b06e32de5de" - integrity sha512-HXUa+kLjKu8sKr+kCZeNye9Pv/swRfKGAt/uJ2WUEvCJ4IVIMM1p6iMnOEEk/+3OGE64/PWu3cdE9dLP6izOaA== +"@abp/bootstrap-datepicker@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-7.4.1.tgz#f8f35d0edf71368faaae4e40a72fa846b0084f9b" + integrity sha512-hsu8ty6c2oOevsNoyFTQ4yJAu27qnz82MgRNVS8MRfdzo05/LhBhy/tKFm+PFYJqZULYlpQ1GXUF2+uGyazIeg== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap-daterangepicker@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-7.4.0.tgz#5058fc2a9354f0a71ac5393658e362779a3bdc46" - integrity sha512-EK0wzZUY9H3XPb9U3DvYVqh48fU+6IneNGYOk7dcda8CUYObd4Dl1nXligStCqgn2uePtwxDHRx40eV0GXmU/Q== +"@abp/bootstrap-daterangepicker@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-7.4.1.tgz#b133cefdbed0fa1b8f1bda916a9d46952237238a" + integrity sha512-NpmbsO4Xg48Zmr8OOlf1fxuNMnFIqmRrkHiKp9lP5c8am64+7rRzCwATw2UY0Ud+4n8/ws+Iki1dwPQF6db1zw== dependencies: bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-7.4.0.tgz#71be70660643d8f60d13d355b8c80b16e4854870" - integrity sha512-3Fa+fL5NH+0H2KK4MAaqNsiz0PYwK0+Oxjmd0NgKwcqV2vJzRrzS3WG5kITYjNz9QGdBV+FrhNX/NSRU8LDx3Q== +"@abp/bootstrap@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-7.4.1.tgz#b34a2fcc80e04212865652ee7f4f5498a6a61f6d" + integrity sha512-/qCgfrtNWZ2jui2iL6wd6MLrcxALSEFVBypaz1JK3WjEe7DvFAYvKLl7DugIv039/Sx3mbx/PJiQhx8CVZMsEA== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" bootstrap "^5.1.3" -"@abp/clipboard@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-7.4.0.tgz#f1d147df94ddf3ab53eeeb05aec3d5556064c5d6" - integrity sha512-z/nB1RQN/tmShSRwc9Fv1DsJSNM7+Zg4GnAtvZNpOHJp8LTVmsJWxLoUM7hF896W9E0JKr8tRuCVqulyh3IqKg== +"@abp/clipboard@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-7.4.1.tgz#31329ad4565b5075b486e9ca63fb0ff8a070ff9e" + integrity sha512-/+ylBPs/TEZdwywSSTnj96WoRJPwQnR6vlI+sX7h9wDfSDbMwuSSdETSnDVT21lkl8gonPONFZTL8D1u/KKAhg== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" clipboard "^2.0.8" -"@abp/core@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-7.4.0.tgz#8505d446a3b4d80ce476bd3352c1639c7dc486ec" - integrity sha512-yxrnw6eAEIj/CcX5jAwb4xmCsdqWaG+KRcBA8GFvqXbsK94IjqLDiJ3flo+QhGn2DXo40ISxofZop0CgSbP7Ew== +"@abp/core@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-7.4.1.tgz#1d14899ad16aac038806504eb0a5be9318cdcc0c" + integrity sha512-p0BAe2kCtgZmq8pilahmuxmye8DeRXt2KmnFRbmYE3j4d0uComFZpC72QOD1iro8bkmbsHfsHJpiVg4Sp4licw== dependencies: - "@abp/utils" "~7.4.0" + "@abp/utils" "~7.4.1" -"@abp/datatables.net-bs5@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-7.4.0.tgz#52d22e12a2420b402e03148793707d063db0088d" - integrity sha512-VvQv5w0cUpdDD9jX8aUEaLxFrc4A95JlmFnhCYIV1etL8HNOdZvmOThxorsImk31JfpyVYrY/Ze/rnWi2uhVvQ== +"@abp/datatables.net-bs5@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-7.4.1.tgz#821ee4c5db116f9810d65184855cea1fa7d47360" + integrity sha512-jpUzb65lCGYAxs/1qV3pRP8agHwIgZA9gDrudvR8S/3X3kNQWtmeKoFDZ93mhnl3aWPjWFKVrT2LeQeJw5XO5A== dependencies: - "@abp/datatables.net" "~7.4.0" + "@abp/datatables.net" "~7.4.1" datatables.net-bs5 "^1.11.4" -"@abp/datatables.net@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-7.4.0.tgz#9f12a1bb2abd05cd753b5d937d8a0350b2ff74ae" - integrity sha512-StOkMmIkcBUWzD9ToZ5J/hISRWdxbAWjwn7RuFXsoHXcY03mmD86g2oztjrWC5UFnRdpFnsfspTpbNqXFB9Vag== +"@abp/datatables.net@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-7.4.1.tgz#a4501e92e9995da0759b9ce55756fe92c4e8db59" + integrity sha512-BZOOZLH7XrGlX3aFK97cwV9+npsTzALSBo87OgwO2U6UpeFq7yAOvmC0+L9dmIUDISeORn5IFc/zTsSSIQnpHQ== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" datatables.net "^1.11.4" -"@abp/font-awesome@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-7.4.0.tgz#50059083b88706a0f71f55118472b378e4c66163" - integrity sha512-hKoPyM41HHCK6dg+8pQvjYJWzKABBCXrYQAIneMPQZUZqa4JLObKCva9TR7pu6pUp+9OVzg4fQOBM+nwpHtw4g== +"@abp/font-awesome@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-7.4.1.tgz#f6175a989aa64367830723f1dd9c607906716296" + integrity sha512-/ybaz4KROwFdG4Xv0yMTUMXOreDmKy1lKQuntqHEUnIorhXmkgcd5AQQ5AolJ4NmNdPNt1VYrRcTEmdz3nw+FA== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" "@fortawesome/fontawesome-free" "^5.15.4" -"@abp/jquery-form@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-7.4.0.tgz#7ab3be241ee09f1e2843bd1b4d0b0b86d4446e30" - integrity sha512-OmTRuZ7QK1oe2ayNLqEpRJk4Ogk0wt/hIFtJHwQkCtDuCggoR5sQz4vn1vgrD19MxGq07dow5IgjbbhHv1vtEg== +"@abp/jquery-form@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-7.4.1.tgz#67978c41cda204b4c2027d81fc66844379313fa6" + integrity sha512-JZ1D47s/kpTlfMcpD4Jrlh98bhEDsIlWJauvAYaS0EBPIU9V2zHGQ+h9GPFbSPrXe4sYxPSREcsc8KUVMhT5MQ== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-7.4.0.tgz#0c564e39c4997dd9b8af7d2023615a06d6fd9834" - integrity sha512-vFB3RKkDlDXbHlDJ64uo3jWW1IRXwiCaPf+mcB77Wpt5+0Dn7eWqjBT7KyHBrsV08ghIqY/Q4nXntFJrmLcuEA== +"@abp/jquery-validation-unobtrusive@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-7.4.1.tgz#fe5c90ade419e83505884dd50dd5988d766f177b" + integrity sha512-oHHV/ukap+vDvQ8CnEWnOrrsLkHXIcMk+SjNKe/dyK5VzOVLDpMatRFmloLs2igYVXTqDGjmDlTswTFdJUarcQ== dependencies: - "@abp/jquery-validation" "~7.4.0" + "@abp/jquery-validation" "~7.4.1" jquery-validation-unobtrusive "^3.2.12" -"@abp/jquery-validation@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-7.4.0.tgz#f2aaba8f4c023e93f0051cc9a05c6d82fa5c7254" - integrity sha512-vN4srLT5UXAKXpKHbZgySWT+N2DjRYivgtifpZHMTGFLMW14W+tfi5zhR4H4JvqJpuO6ZKNiz15zA1zwEBK0Tw== +"@abp/jquery-validation@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-7.4.1.tgz#c2c06bc28770832a9ad73eac000586faed3bdbe3" + integrity sha512-A5iFT2EWfGHXrBb/ov5f0grZ2o2xkDaYtps/FnDUwBYdIdD8E7bbJsWp6ytvZDciO0XmEqAoVOxmiij7ue/SOg== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" jquery-validation "^1.19.3" -"@abp/jquery@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-7.4.0.tgz#206891b20f250537d05d907d2b6cd682fec76496" - integrity sha512-DeYo02T6WVhdpLloSPb6ooqtpksu1HtcbbQhIP9E1P7jHSzZoNiJvoKXHiFUcj5PYiGKl9d/o89hM/apWzyreQ== +"@abp/jquery@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-7.4.1.tgz#b5e16834e6c7871ad6392612ac8e2de8617eb353" + integrity sha512-X3RcovvRYISHcsb6W3U3iVsofw6yomoiouoB1tSIy2/tvUbu9n7N/3MM0CUujFm/xib7s3z1tVxFssS9smT7sw== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" jquery "~3.6.0" -"@abp/lodash@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-7.4.0.tgz#93f20abee776dbfa7aa45e2e710f2768f262fda5" - integrity sha512-h4Fnjm+VLwp1F3r57B9MrHhwyOYMo5oP285a85zzAYLkhwcDy7f1nbHKHMQ3ZTaeJVmiRnVaH+3sdUdslCRt5g== +"@abp/lodash@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-7.4.1.tgz#d0f84b7b9cbd989d59ebde594ed7acb8bc720b61" + integrity sha512-RFjZCyAPZnpvT0SJbxXzzmMYbuocSWBlezvjAVA8MiTrOXdZO4VyaTFjIuQcAdSrZhtpFGeYWxAjHshVplxMbw== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" lodash "^4.17.21" -"@abp/luxon@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-7.4.0.tgz#2ba7ff307c8f7c24d818a9c33635b86fd6810db9" - integrity sha512-ROCx7aihM+agdYy7Tkz+GiScx68KY5qwGTnj8P7QabGFChzVUic6RuBG+2Obmfonc6uT7Rq0c8JDGrsGNe/w8A== +"@abp/luxon@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-7.4.1.tgz#e0c0947d2b77f98b9cdaf7d1143025879361c3c9" + integrity sha512-k1wh8tT1529MtNC2gSXEIKdimBXBwubXeLisgpIPx6lkJo1Op6pAz2ERwFXeyktqGdYyuFcnewJIxmS7EPtWhg== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" luxon "^2.3.0" -"@abp/malihu-custom-scrollbar-plugin@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-7.4.0.tgz#aba68877481f4339e048f2ae3cfbe93197145a0a" - integrity sha512-Ntodhi4k0HFQmImYTP5SYf/WDm7aUGJLaGsfePm77HJ6DhGgalIGqtM8NiFXzo/3GmMY0XSo8Wxrs1mSCdtsOA== +"@abp/malihu-custom-scrollbar-plugin@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-7.4.1.tgz#aa7ec247197a258277549052780b38fd9e748c6c" + integrity sha512-pm/wIaiRSgGxelOf8AiL4JKFNZOQ6s2WbR6pULiP2HSNCgCpWYJ2s8fvj7VP3lAHIa98v3m8PSMSUhqaANxZ/Q== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-7.4.0.tgz#2490d9c7cdcaeca8d0ba9ebef5e7298caf0c9e09" - integrity sha512-ftsUEgO17GbVawA1GplGFzEeIM4NX004AmS6/fPI3o5isX7o1buF9q9TXdnwUuFEJKZxS4KpveRqzTL5t9k0BQ== +"@abp/moment@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-7.4.1.tgz#1c28ccb13eecdd13695edf8641ca9867b318e37d" + integrity sha512-7vRJyAK5ER9z+LV1xUSAAtWlPlhv8yhM/nHjhC+IQSP/+V1D7VLA6EKxAEexGw7wX6HY8oMOWP9HxDHMb5hKQA== dependencies: moment "^2.9.0" -"@abp/prismjs@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-7.4.0.tgz#8572f36f853c7054d77d02f3098cd844ee321ed7" - integrity sha512-y/Iy6pddQeVazEITktPot8JOPdAEOVAfmYkTBP3DIIPvoYr3kf6rwfzBUalMw5CEjWZ9BaIszDgFCk5ucNHHwQ== +"@abp/prismjs@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-7.4.1.tgz#df4387dbc2f0c77ddb9b6bd0ade9a5db29b9cee2" + integrity sha512-bI7pEKWy32aRYSb2ZziiH6Teebyd8km+1TXADy1yks9i9G5eLWe4/CSdwWpI4M+8ggM8CsdhrZ6/U+55BpXPQA== dependencies: - "@abp/clipboard" "~7.4.0" - "@abp/core" "~7.4.0" + "@abp/clipboard" "~7.4.1" + "@abp/core" "~7.4.1" prismjs "^1.26.0" -"@abp/select2@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-7.4.0.tgz#2f455cc991b7bb4df9ed426097bc2996cac12697" - integrity sha512-DwprX4MIoqMzSdh7eFg7EjGIz4ftYZub6jG9Sk3r+sxabbhpbFTxKOpXnhBWYi7L7uTQ8YDFk/5NeXO+Rm50Ww== +"@abp/select2@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-7.4.1.tgz#d7ea53cfec285a06278db362131b7510d5b73900" + integrity sha512-0S66iy7HuB74qqOSDraoF7UvXqz2PrnOKy+3EYMTMskOn4pWaq03JMR8xxEgZ8CtmsrqlE1a4wt1Yt9b3FIc0w== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" select2 "^4.0.13" -"@abp/sweetalert2@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-7.4.0.tgz#db1b4bd45cbabd61172591abc8ce223b5f607c4e" - integrity sha512-XqHPRnTASaRtbJIZYKW1KSKIJ8tynL8DuPCSMjcp4iyUlk+gnzxvbqXeNVjc2ojxj78T/42M/vITNoiiTYuKUw== +"@abp/sweetalert2@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-7.4.1.tgz#6722a40e5115cc341b7543aa0fa3b5a7ae9515b2" + integrity sha512-9jAHrYqCp5qykYfNNbqgESL6egixofVwonjZlb+lLWHAkIX+gQ2ApUNDFSXPtKUh2n9sXhSfF8SSg+BHP/bkCA== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" sweetalert2 "^11.3.6" -"@abp/timeago@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-7.4.0.tgz#245fe09370f38311a67a594c8a3c884aea59cc90" - integrity sha512-khxK6EICUaGCUM1HkACw/8rlPQNssoQvCK64bNqEHBCXgPUmTcqSj5MEGiNOYbgGyWeH2IAMtJEYPqX1g1wqSA== +"@abp/timeago@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-7.4.1.tgz#243d342ba131878ae7f892909c9cae07cf54902b" + integrity sha512-a0Vl2NFwTxzRmH5akWo8BRUxa6sK72z8OoXwUFkZOUqMWBCHK7ffNiN1/fbSgA+7HpSZdDvIthjYwBt57DxLdQ== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" timeago "^1.6.7" -"@abp/toastr@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-7.4.0.tgz#16ba0414a27c9a21bc7556a078b175445edcf608" - integrity sha512-oM4HT2m95cK/9sB4AEQAKUMSGBep6wZTgM/46+o2IvvMdMPrGR2mPu9V9wi3y817FRgY+/qQTfy5TZWyTuIpVQ== +"@abp/toastr@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-7.4.1.tgz#345545a41b6145e54477c6c376193a6dbd62bdda" + integrity sha512-OLCvPJYSrcT2spcq9nO838Q22VhJ63Kdzasz1HugdVNqgcFCCSsqaoXrJGUcf5GrZx7PNloz7uf1I3txYMeZtA== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" toastr "^2.1.4" -"@abp/utils@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-7.4.0.tgz#b31fb6e5dff07463535479a6bb62dc733d7119c8" - integrity sha512-CcR3tfuEsVM60DYL1A0cH6BkUTsasOoBDv/b63uLCoEOq/g8ntelD/SpRSgfDXK74P9M8OE5ZFxlXWDiYuzAFg== +"@abp/utils@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-7.4.1.tgz#2ce4c4d659c2ae9bc23b71b79fa3c6e120eaecaf" + integrity sha512-eFeoOXcz9cVkDKpOfd2VWmpAojASfsqfvACZqi1UmF16OcjsFIkxmIvhh1fpbT4A+eQLbaFFLIsf6gYb//tXhg== dependencies: just-compare "^2.3.0" diff --git a/modules/blogging/app/Volo.BloggingTestApp/package.json b/modules/blogging/app/Volo.BloggingTestApp/package.json index 1c94891ca1..1239d9b938 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/package.json +++ b/modules/blogging/app/Volo.BloggingTestApp/package.json @@ -3,7 +3,7 @@ "name": "volo.blogtestapp", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~7.4.0", - "@abp/blogging": "~7.4.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "~7.4.1", + "@abp/blogging": "~7.4.1" } } diff --git a/modules/blogging/app/Volo.BloggingTestApp/yarn.lock b/modules/blogging/app/Volo.BloggingTestApp/yarn.lock index 4469115786..db39937c38 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/yarn.lock +++ b/modules/blogging/app/Volo.BloggingTestApp/yarn.lock @@ -2,39 +2,39 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-7.4.0.tgz#5088dd82ce343e1123e025848f09b51df988b225" - integrity sha512-teT7I0kgjek/lHzpTg5VOVCQ3IL26nFB43Aa/45fuaSwh9FJd3IJNXGL6xwp85oKaptDYSBXIF4GbrUfp2Ugqg== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~7.4.0" - -"@abp/aspnetcore.mvc.ui.theme.shared@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-7.4.0.tgz#e676444a46214e850b0d916daeeb912774ac381d" - integrity sha512-X+dgdgHGUTyf0zaSPsqQp2ZZWu2+9gIRT4r4/LDgxchHgfNvcKRF8jH/JICcVgGD1adJvZzzDpTefL8CuAIRJA== - dependencies: - "@abp/aspnetcore.mvc.ui" "~7.4.0" - "@abp/bootstrap" "~7.4.0" - "@abp/bootstrap-datepicker" "~7.4.0" - "@abp/bootstrap-daterangepicker" "~7.4.0" - "@abp/datatables.net-bs5" "~7.4.0" - "@abp/font-awesome" "~7.4.0" - "@abp/jquery-form" "~7.4.0" - "@abp/jquery-validation-unobtrusive" "~7.4.0" - "@abp/lodash" "~7.4.0" - "@abp/luxon" "~7.4.0" - "@abp/malihu-custom-scrollbar-plugin" "~7.4.0" - "@abp/moment" "~7.4.0" - "@abp/select2" "~7.4.0" - "@abp/sweetalert2" "~7.4.0" - "@abp/timeago" "~7.4.0" - "@abp/toastr" "~7.4.0" - -"@abp/aspnetcore.mvc.ui@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-7.4.0.tgz#61e1b52d2a940e02242f57007bd3f0fcb583c09a" - integrity sha512-gdoxOBo10DWDYhUq1GVfguC0Ot8PYhoA3VLf88/RatL88BNUUlt0e71uMFcx/gk72fuAE+o9zXn/6nq1wtpSwQ== +"@abp/aspnetcore.mvc.ui.theme.basic@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-7.4.1.tgz#62df78aab8a0b374817fdbab6c6363529b43f925" + integrity sha512-KaPmBlwNjOl1+vwLj5O8J11YHBSRg4y0IIxtgZiculXQNFPHbYAXm8sfTw6Wcsx00STrhvUVJQxYMePNnOTCTg== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~7.4.1" + +"@abp/aspnetcore.mvc.ui.theme.shared@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-7.4.1.tgz#8f8679f5cf80137324ddbec9fcaa67332783e708" + integrity sha512-0uUKuTsi/ikLFUUNEqvrn7KimgsvuK+7m1yZD4o47FQlgGxTyt1zQY9w3K6YyhyC3lsT6qCwiAPIoFOzPkIg/Q== + dependencies: + "@abp/aspnetcore.mvc.ui" "~7.4.1" + "@abp/bootstrap" "~7.4.1" + "@abp/bootstrap-datepicker" "~7.4.1" + "@abp/bootstrap-daterangepicker" "~7.4.1" + "@abp/datatables.net-bs5" "~7.4.1" + "@abp/font-awesome" "~7.4.1" + "@abp/jquery-form" "~7.4.1" + "@abp/jquery-validation-unobtrusive" "~7.4.1" + "@abp/lodash" "~7.4.1" + "@abp/luxon" "~7.4.1" + "@abp/malihu-custom-scrollbar-plugin" "~7.4.1" + "@abp/moment" "~7.4.1" + "@abp/select2" "~7.4.1" + "@abp/sweetalert2" "~7.4.1" + "@abp/timeago" "~7.4.1" + "@abp/toastr" "~7.4.1" + +"@abp/aspnetcore.mvc.ui@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-7.4.1.tgz#49c13718a17569f97b71f978b50f367dff67b8f7" + integrity sha512-EvYrfk0mpSt1jAMZmfFcHoNWEJskzResKp0bflOYsYPsZPuJ5WraKsk4IEEpesYHCyHW5AAb5HBJHeoSbVLh4Q== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -43,201 +43,201 @@ merge-stream "^2.0.0" micromatch "^4.0.2" -"@abp/blogging@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-7.4.0.tgz#9d674d055df1124d2624959472f9790d24d5c9e5" - integrity sha512-yqPFwSCzKTyJ6kZAj0TO/OH+bYFmro6PbnT+C/L7+FlaqSXM2VTzLUVuFQFoudNAanlobadF/Rm9RxE+LE1oWg== +"@abp/blogging@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-7.4.1.tgz#b2a781f154c98fe69ce2c2948b422f2aaca6fd12" + integrity sha512-OHEw0tiQsJb6y1S3YbRSnw438sZx/msu4vxsJPYKeigyxubyyN8Ndl0NKP6BukrslmtLbnYwh/e/7Kpi+/Bs1g== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~7.4.0" - "@abp/owl.carousel" "~7.4.0" - "@abp/prismjs" "~7.4.0" - "@abp/tui-editor" "~7.4.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "~7.4.1" + "@abp/owl.carousel" "~7.4.1" + "@abp/prismjs" "~7.4.1" + "@abp/tui-editor" "~7.4.1" -"@abp/bootstrap-datepicker@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-7.4.0.tgz#75edc2127ca26d86bfefaa6e37579b06e32de5de" - integrity sha512-HXUa+kLjKu8sKr+kCZeNye9Pv/swRfKGAt/uJ2WUEvCJ4IVIMM1p6iMnOEEk/+3OGE64/PWu3cdE9dLP6izOaA== +"@abp/bootstrap-datepicker@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-7.4.1.tgz#f8f35d0edf71368faaae4e40a72fa846b0084f9b" + integrity sha512-hsu8ty6c2oOevsNoyFTQ4yJAu27qnz82MgRNVS8MRfdzo05/LhBhy/tKFm+PFYJqZULYlpQ1GXUF2+uGyazIeg== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap-daterangepicker@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-7.4.0.tgz#5058fc2a9354f0a71ac5393658e362779a3bdc46" - integrity sha512-EK0wzZUY9H3XPb9U3DvYVqh48fU+6IneNGYOk7dcda8CUYObd4Dl1nXligStCqgn2uePtwxDHRx40eV0GXmU/Q== +"@abp/bootstrap-daterangepicker@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-7.4.1.tgz#b133cefdbed0fa1b8f1bda916a9d46952237238a" + integrity sha512-NpmbsO4Xg48Zmr8OOlf1fxuNMnFIqmRrkHiKp9lP5c8am64+7rRzCwATw2UY0Ud+4n8/ws+Iki1dwPQF6db1zw== dependencies: bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-7.4.0.tgz#71be70660643d8f60d13d355b8c80b16e4854870" - integrity sha512-3Fa+fL5NH+0H2KK4MAaqNsiz0PYwK0+Oxjmd0NgKwcqV2vJzRrzS3WG5kITYjNz9QGdBV+FrhNX/NSRU8LDx3Q== +"@abp/bootstrap@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-7.4.1.tgz#b34a2fcc80e04212865652ee7f4f5498a6a61f6d" + integrity sha512-/qCgfrtNWZ2jui2iL6wd6MLrcxALSEFVBypaz1JK3WjEe7DvFAYvKLl7DugIv039/Sx3mbx/PJiQhx8CVZMsEA== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" bootstrap "^5.1.3" -"@abp/clipboard@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-7.4.0.tgz#f1d147df94ddf3ab53eeeb05aec3d5556064c5d6" - integrity sha512-z/nB1RQN/tmShSRwc9Fv1DsJSNM7+Zg4GnAtvZNpOHJp8LTVmsJWxLoUM7hF896W9E0JKr8tRuCVqulyh3IqKg== +"@abp/clipboard@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-7.4.1.tgz#31329ad4565b5075b486e9ca63fb0ff8a070ff9e" + integrity sha512-/+ylBPs/TEZdwywSSTnj96WoRJPwQnR6vlI+sX7h9wDfSDbMwuSSdETSnDVT21lkl8gonPONFZTL8D1u/KKAhg== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" clipboard "^2.0.8" -"@abp/core@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-7.4.0.tgz#8505d446a3b4d80ce476bd3352c1639c7dc486ec" - integrity sha512-yxrnw6eAEIj/CcX5jAwb4xmCsdqWaG+KRcBA8GFvqXbsK94IjqLDiJ3flo+QhGn2DXo40ISxofZop0CgSbP7Ew== +"@abp/core@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-7.4.1.tgz#1d14899ad16aac038806504eb0a5be9318cdcc0c" + integrity sha512-p0BAe2kCtgZmq8pilahmuxmye8DeRXt2KmnFRbmYE3j4d0uComFZpC72QOD1iro8bkmbsHfsHJpiVg4Sp4licw== dependencies: - "@abp/utils" "~7.4.0" + "@abp/utils" "~7.4.1" -"@abp/datatables.net-bs5@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-7.4.0.tgz#52d22e12a2420b402e03148793707d063db0088d" - integrity sha512-VvQv5w0cUpdDD9jX8aUEaLxFrc4A95JlmFnhCYIV1etL8HNOdZvmOThxorsImk31JfpyVYrY/Ze/rnWi2uhVvQ== +"@abp/datatables.net-bs5@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-7.4.1.tgz#821ee4c5db116f9810d65184855cea1fa7d47360" + integrity sha512-jpUzb65lCGYAxs/1qV3pRP8agHwIgZA9gDrudvR8S/3X3kNQWtmeKoFDZ93mhnl3aWPjWFKVrT2LeQeJw5XO5A== dependencies: - "@abp/datatables.net" "~7.4.0" + "@abp/datatables.net" "~7.4.1" datatables.net-bs5 "^1.11.4" -"@abp/datatables.net@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-7.4.0.tgz#9f12a1bb2abd05cd753b5d937d8a0350b2ff74ae" - integrity sha512-StOkMmIkcBUWzD9ToZ5J/hISRWdxbAWjwn7RuFXsoHXcY03mmD86g2oztjrWC5UFnRdpFnsfspTpbNqXFB9Vag== +"@abp/datatables.net@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-7.4.1.tgz#a4501e92e9995da0759b9ce55756fe92c4e8db59" + integrity sha512-BZOOZLH7XrGlX3aFK97cwV9+npsTzALSBo87OgwO2U6UpeFq7yAOvmC0+L9dmIUDISeORn5IFc/zTsSSIQnpHQ== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" datatables.net "^1.11.4" -"@abp/font-awesome@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-7.4.0.tgz#50059083b88706a0f71f55118472b378e4c66163" - integrity sha512-hKoPyM41HHCK6dg+8pQvjYJWzKABBCXrYQAIneMPQZUZqa4JLObKCva9TR7pu6pUp+9OVzg4fQOBM+nwpHtw4g== +"@abp/font-awesome@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-7.4.1.tgz#f6175a989aa64367830723f1dd9c607906716296" + integrity sha512-/ybaz4KROwFdG4Xv0yMTUMXOreDmKy1lKQuntqHEUnIorhXmkgcd5AQQ5AolJ4NmNdPNt1VYrRcTEmdz3nw+FA== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" "@fortawesome/fontawesome-free" "^5.15.4" -"@abp/jquery-form@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-7.4.0.tgz#7ab3be241ee09f1e2843bd1b4d0b0b86d4446e30" - integrity sha512-OmTRuZ7QK1oe2ayNLqEpRJk4Ogk0wt/hIFtJHwQkCtDuCggoR5sQz4vn1vgrD19MxGq07dow5IgjbbhHv1vtEg== +"@abp/jquery-form@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-7.4.1.tgz#67978c41cda204b4c2027d81fc66844379313fa6" + integrity sha512-JZ1D47s/kpTlfMcpD4Jrlh98bhEDsIlWJauvAYaS0EBPIU9V2zHGQ+h9GPFbSPrXe4sYxPSREcsc8KUVMhT5MQ== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-7.4.0.tgz#0c564e39c4997dd9b8af7d2023615a06d6fd9834" - integrity sha512-vFB3RKkDlDXbHlDJ64uo3jWW1IRXwiCaPf+mcB77Wpt5+0Dn7eWqjBT7KyHBrsV08ghIqY/Q4nXntFJrmLcuEA== +"@abp/jquery-validation-unobtrusive@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-7.4.1.tgz#fe5c90ade419e83505884dd50dd5988d766f177b" + integrity sha512-oHHV/ukap+vDvQ8CnEWnOrrsLkHXIcMk+SjNKe/dyK5VzOVLDpMatRFmloLs2igYVXTqDGjmDlTswTFdJUarcQ== dependencies: - "@abp/jquery-validation" "~7.4.0" + "@abp/jquery-validation" "~7.4.1" jquery-validation-unobtrusive "^3.2.12" -"@abp/jquery-validation@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-7.4.0.tgz#f2aaba8f4c023e93f0051cc9a05c6d82fa5c7254" - integrity sha512-vN4srLT5UXAKXpKHbZgySWT+N2DjRYivgtifpZHMTGFLMW14W+tfi5zhR4H4JvqJpuO6ZKNiz15zA1zwEBK0Tw== +"@abp/jquery-validation@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-7.4.1.tgz#c2c06bc28770832a9ad73eac000586faed3bdbe3" + integrity sha512-A5iFT2EWfGHXrBb/ov5f0grZ2o2xkDaYtps/FnDUwBYdIdD8E7bbJsWp6ytvZDciO0XmEqAoVOxmiij7ue/SOg== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" jquery-validation "^1.19.3" -"@abp/jquery@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-7.4.0.tgz#206891b20f250537d05d907d2b6cd682fec76496" - integrity sha512-DeYo02T6WVhdpLloSPb6ooqtpksu1HtcbbQhIP9E1P7jHSzZoNiJvoKXHiFUcj5PYiGKl9d/o89hM/apWzyreQ== +"@abp/jquery@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-7.4.1.tgz#b5e16834e6c7871ad6392612ac8e2de8617eb353" + integrity sha512-X3RcovvRYISHcsb6W3U3iVsofw6yomoiouoB1tSIy2/tvUbu9n7N/3MM0CUujFm/xib7s3z1tVxFssS9smT7sw== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" jquery "~3.6.0" -"@abp/lodash@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-7.4.0.tgz#93f20abee776dbfa7aa45e2e710f2768f262fda5" - integrity sha512-h4Fnjm+VLwp1F3r57B9MrHhwyOYMo5oP285a85zzAYLkhwcDy7f1nbHKHMQ3ZTaeJVmiRnVaH+3sdUdslCRt5g== +"@abp/lodash@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-7.4.1.tgz#d0f84b7b9cbd989d59ebde594ed7acb8bc720b61" + integrity sha512-RFjZCyAPZnpvT0SJbxXzzmMYbuocSWBlezvjAVA8MiTrOXdZO4VyaTFjIuQcAdSrZhtpFGeYWxAjHshVplxMbw== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" lodash "^4.17.21" -"@abp/luxon@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-7.4.0.tgz#2ba7ff307c8f7c24d818a9c33635b86fd6810db9" - integrity sha512-ROCx7aihM+agdYy7Tkz+GiScx68KY5qwGTnj8P7QabGFChzVUic6RuBG+2Obmfonc6uT7Rq0c8JDGrsGNe/w8A== +"@abp/luxon@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-7.4.1.tgz#e0c0947d2b77f98b9cdaf7d1143025879361c3c9" + integrity sha512-k1wh8tT1529MtNC2gSXEIKdimBXBwubXeLisgpIPx6lkJo1Op6pAz2ERwFXeyktqGdYyuFcnewJIxmS7EPtWhg== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" luxon "^2.3.0" -"@abp/malihu-custom-scrollbar-plugin@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-7.4.0.tgz#aba68877481f4339e048f2ae3cfbe93197145a0a" - integrity sha512-Ntodhi4k0HFQmImYTP5SYf/WDm7aUGJLaGsfePm77HJ6DhGgalIGqtM8NiFXzo/3GmMY0XSo8Wxrs1mSCdtsOA== +"@abp/malihu-custom-scrollbar-plugin@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-7.4.1.tgz#aa7ec247197a258277549052780b38fd9e748c6c" + integrity sha512-pm/wIaiRSgGxelOf8AiL4JKFNZOQ6s2WbR6pULiP2HSNCgCpWYJ2s8fvj7VP3lAHIa98v3m8PSMSUhqaANxZ/Q== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-7.4.0.tgz#2490d9c7cdcaeca8d0ba9ebef5e7298caf0c9e09" - integrity sha512-ftsUEgO17GbVawA1GplGFzEeIM4NX004AmS6/fPI3o5isX7o1buF9q9TXdnwUuFEJKZxS4KpveRqzTL5t9k0BQ== +"@abp/moment@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-7.4.1.tgz#1c28ccb13eecdd13695edf8641ca9867b318e37d" + integrity sha512-7vRJyAK5ER9z+LV1xUSAAtWlPlhv8yhM/nHjhC+IQSP/+V1D7VLA6EKxAEexGw7wX6HY8oMOWP9HxDHMb5hKQA== dependencies: moment "^2.9.0" -"@abp/owl.carousel@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-7.4.0.tgz#5b70c90659d9e5951780e2c7204cfb6884b808f9" - integrity sha512-qddfSyXJweA7eV+REtMKeghlviIME20pplW+cz9RxetZpwe4g0bhWjUkfA/7F7c20YNIBkAVO8yfeBzip19wqw== +"@abp/owl.carousel@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-7.4.1.tgz#9db15032e4639a1b50e08aa7eaaf779f2cf30f6c" + integrity sha512-GNktio3GJqWsu4CrynbTkLucOG97W2rB8LnDxhvINcGow6hrDP3RzcExCqeh+miU6I44VvtC4uySyIYaXJoQ3A== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" owl.carousel "^2.3.4" -"@abp/prismjs@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-7.4.0.tgz#8572f36f853c7054d77d02f3098cd844ee321ed7" - integrity sha512-y/Iy6pddQeVazEITktPot8JOPdAEOVAfmYkTBP3DIIPvoYr3kf6rwfzBUalMw5CEjWZ9BaIszDgFCk5ucNHHwQ== +"@abp/prismjs@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-7.4.1.tgz#df4387dbc2f0c77ddb9b6bd0ade9a5db29b9cee2" + integrity sha512-bI7pEKWy32aRYSb2ZziiH6Teebyd8km+1TXADy1yks9i9G5eLWe4/CSdwWpI4M+8ggM8CsdhrZ6/U+55BpXPQA== dependencies: - "@abp/clipboard" "~7.4.0" - "@abp/core" "~7.4.0" + "@abp/clipboard" "~7.4.1" + "@abp/core" "~7.4.1" prismjs "^1.26.0" -"@abp/select2@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-7.4.0.tgz#2f455cc991b7bb4df9ed426097bc2996cac12697" - integrity sha512-DwprX4MIoqMzSdh7eFg7EjGIz4ftYZub6jG9Sk3r+sxabbhpbFTxKOpXnhBWYi7L7uTQ8YDFk/5NeXO+Rm50Ww== +"@abp/select2@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-7.4.1.tgz#d7ea53cfec285a06278db362131b7510d5b73900" + integrity sha512-0S66iy7HuB74qqOSDraoF7UvXqz2PrnOKy+3EYMTMskOn4pWaq03JMR8xxEgZ8CtmsrqlE1a4wt1Yt9b3FIc0w== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" select2 "^4.0.13" -"@abp/sweetalert2@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-7.4.0.tgz#db1b4bd45cbabd61172591abc8ce223b5f607c4e" - integrity sha512-XqHPRnTASaRtbJIZYKW1KSKIJ8tynL8DuPCSMjcp4iyUlk+gnzxvbqXeNVjc2ojxj78T/42M/vITNoiiTYuKUw== +"@abp/sweetalert2@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-7.4.1.tgz#6722a40e5115cc341b7543aa0fa3b5a7ae9515b2" + integrity sha512-9jAHrYqCp5qykYfNNbqgESL6egixofVwonjZlb+lLWHAkIX+gQ2ApUNDFSXPtKUh2n9sXhSfF8SSg+BHP/bkCA== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" sweetalert2 "^11.3.6" -"@abp/timeago@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-7.4.0.tgz#245fe09370f38311a67a594c8a3c884aea59cc90" - integrity sha512-khxK6EICUaGCUM1HkACw/8rlPQNssoQvCK64bNqEHBCXgPUmTcqSj5MEGiNOYbgGyWeH2IAMtJEYPqX1g1wqSA== +"@abp/timeago@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-7.4.1.tgz#243d342ba131878ae7f892909c9cae07cf54902b" + integrity sha512-a0Vl2NFwTxzRmH5akWo8BRUxa6sK72z8OoXwUFkZOUqMWBCHK7ffNiN1/fbSgA+7HpSZdDvIthjYwBt57DxLdQ== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" timeago "^1.6.7" -"@abp/toastr@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-7.4.0.tgz#16ba0414a27c9a21bc7556a078b175445edcf608" - integrity sha512-oM4HT2m95cK/9sB4AEQAKUMSGBep6wZTgM/46+o2IvvMdMPrGR2mPu9V9wi3y817FRgY+/qQTfy5TZWyTuIpVQ== +"@abp/toastr@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-7.4.1.tgz#345545a41b6145e54477c6c376193a6dbd62bdda" + integrity sha512-OLCvPJYSrcT2spcq9nO838Q22VhJ63Kdzasz1HugdVNqgcFCCSsqaoXrJGUcf5GrZx7PNloz7uf1I3txYMeZtA== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" toastr "^2.1.4" -"@abp/tui-editor@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-7.4.0.tgz#831efd947b5a255d73365248e443d43f834c5a75" - integrity sha512-G/aCeG0lrFjEdE/YRbpFWuhuaGDFDqO5+/otIQSOxcR/bkjE1kLrdH5KDYGIa9QUaq7GbKn7yFnjrv9s5ajxzQ== +"@abp/tui-editor@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-7.4.1.tgz#4adaffcc3d62c7f2159d6acbca71e14780270277" + integrity sha512-0wiLq03+EB6or9uBbz1ZEWnOAoUjJqqFDONVEv2LtuqWlaiDwzILrSMxihTyFsLGrSAUdezfk2L83DoJT6SsVg== dependencies: - "@abp/jquery" "~7.4.0" - "@abp/prismjs" "~7.4.0" + "@abp/jquery" "~7.4.1" + "@abp/prismjs" "~7.4.1" -"@abp/utils@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-7.4.0.tgz#b31fb6e5dff07463535479a6bb62dc733d7119c8" - integrity sha512-CcR3tfuEsVM60DYL1A0cH6BkUTsasOoBDv/b63uLCoEOq/g8ntelD/SpRSgfDXK74P9M8OE5ZFxlXWDiYuzAFg== +"@abp/utils@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-7.4.1.tgz#2ce4c4d659c2ae9bc23b71b79fa3c6e120eaecaf" + integrity sha512-eFeoOXcz9cVkDKpOfd2VWmpAojASfsqfvACZqi1UmF16OcjsFIkxmIvhh1fpbT4A+eQLbaFFLIsf6gYb//tXhg== dependencies: just-compare "^2.3.0" diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/ImageFormatHelper.cs b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/ImageFormatHelper.cs index 9fccb1e03a..32060bf501 100644 --- a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/ImageFormatHelper.cs +++ b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/ImageFormatHelper.cs @@ -10,9 +10,9 @@ namespace Volo.Blogging.Areas.Blog.Helpers { public static IImageFormat GetImageRawFormat(Stream stream) { - using (var image = Image.Load(stream, out var imageFormat)) + using (var image = Image.Load(stream)) { - return imageFormat; + return image.Metadata.DecodedImageFormat; } } diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json index 93e2ccb7f5..9e72809edd 100644 --- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json +++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json @@ -3,6 +3,6 @@ "name": "client-simulation-web", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~7.4.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "~7.4.1" } } diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock index 9c4c145174..8c3619aab1 100644 --- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock +++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock @@ -2,39 +2,39 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-7.4.0.tgz#5088dd82ce343e1123e025848f09b51df988b225" - integrity sha512-teT7I0kgjek/lHzpTg5VOVCQ3IL26nFB43Aa/45fuaSwh9FJd3IJNXGL6xwp85oKaptDYSBXIF4GbrUfp2Ugqg== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~7.4.0" - -"@abp/aspnetcore.mvc.ui.theme.shared@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-7.4.0.tgz#e676444a46214e850b0d916daeeb912774ac381d" - integrity sha512-X+dgdgHGUTyf0zaSPsqQp2ZZWu2+9gIRT4r4/LDgxchHgfNvcKRF8jH/JICcVgGD1adJvZzzDpTefL8CuAIRJA== - dependencies: - "@abp/aspnetcore.mvc.ui" "~7.4.0" - "@abp/bootstrap" "~7.4.0" - "@abp/bootstrap-datepicker" "~7.4.0" - "@abp/bootstrap-daterangepicker" "~7.4.0" - "@abp/datatables.net-bs5" "~7.4.0" - "@abp/font-awesome" "~7.4.0" - "@abp/jquery-form" "~7.4.0" - "@abp/jquery-validation-unobtrusive" "~7.4.0" - "@abp/lodash" "~7.4.0" - "@abp/luxon" "~7.4.0" - "@abp/malihu-custom-scrollbar-plugin" "~7.4.0" - "@abp/moment" "~7.4.0" - "@abp/select2" "~7.4.0" - "@abp/sweetalert2" "~7.4.0" - "@abp/timeago" "~7.4.0" - "@abp/toastr" "~7.4.0" - -"@abp/aspnetcore.mvc.ui@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-7.4.0.tgz#61e1b52d2a940e02242f57007bd3f0fcb583c09a" - integrity sha512-gdoxOBo10DWDYhUq1GVfguC0Ot8PYhoA3VLf88/RatL88BNUUlt0e71uMFcx/gk72fuAE+o9zXn/6nq1wtpSwQ== +"@abp/aspnetcore.mvc.ui.theme.basic@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-7.4.1.tgz#62df78aab8a0b374817fdbab6c6363529b43f925" + integrity sha512-KaPmBlwNjOl1+vwLj5O8J11YHBSRg4y0IIxtgZiculXQNFPHbYAXm8sfTw6Wcsx00STrhvUVJQxYMePNnOTCTg== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~7.4.1" + +"@abp/aspnetcore.mvc.ui.theme.shared@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-7.4.1.tgz#8f8679f5cf80137324ddbec9fcaa67332783e708" + integrity sha512-0uUKuTsi/ikLFUUNEqvrn7KimgsvuK+7m1yZD4o47FQlgGxTyt1zQY9w3K6YyhyC3lsT6qCwiAPIoFOzPkIg/Q== + dependencies: + "@abp/aspnetcore.mvc.ui" "~7.4.1" + "@abp/bootstrap" "~7.4.1" + "@abp/bootstrap-datepicker" "~7.4.1" + "@abp/bootstrap-daterangepicker" "~7.4.1" + "@abp/datatables.net-bs5" "~7.4.1" + "@abp/font-awesome" "~7.4.1" + "@abp/jquery-form" "~7.4.1" + "@abp/jquery-validation-unobtrusive" "~7.4.1" + "@abp/lodash" "~7.4.1" + "@abp/luxon" "~7.4.1" + "@abp/malihu-custom-scrollbar-plugin" "~7.4.1" + "@abp/moment" "~7.4.1" + "@abp/select2" "~7.4.1" + "@abp/sweetalert2" "~7.4.1" + "@abp/timeago" "~7.4.1" + "@abp/toastr" "~7.4.1" + +"@abp/aspnetcore.mvc.ui@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-7.4.1.tgz#49c13718a17569f97b71f978b50f367dff67b8f7" + integrity sha512-EvYrfk0mpSt1jAMZmfFcHoNWEJskzResKp0bflOYsYPsZPuJ5WraKsk4IEEpesYHCyHW5AAb5HBJHeoSbVLh4Q== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -43,158 +43,158 @@ merge-stream "^2.0.0" micromatch "^4.0.2" -"@abp/bootstrap-datepicker@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-7.4.0.tgz#75edc2127ca26d86bfefaa6e37579b06e32de5de" - integrity sha512-HXUa+kLjKu8sKr+kCZeNye9Pv/swRfKGAt/uJ2WUEvCJ4IVIMM1p6iMnOEEk/+3OGE64/PWu3cdE9dLP6izOaA== +"@abp/bootstrap-datepicker@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-7.4.1.tgz#f8f35d0edf71368faaae4e40a72fa846b0084f9b" + integrity sha512-hsu8ty6c2oOevsNoyFTQ4yJAu27qnz82MgRNVS8MRfdzo05/LhBhy/tKFm+PFYJqZULYlpQ1GXUF2+uGyazIeg== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap-daterangepicker@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-7.4.0.tgz#5058fc2a9354f0a71ac5393658e362779a3bdc46" - integrity sha512-EK0wzZUY9H3XPb9U3DvYVqh48fU+6IneNGYOk7dcda8CUYObd4Dl1nXligStCqgn2uePtwxDHRx40eV0GXmU/Q== +"@abp/bootstrap-daterangepicker@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-7.4.1.tgz#b133cefdbed0fa1b8f1bda916a9d46952237238a" + integrity sha512-NpmbsO4Xg48Zmr8OOlf1fxuNMnFIqmRrkHiKp9lP5c8am64+7rRzCwATw2UY0Ud+4n8/ws+Iki1dwPQF6db1zw== dependencies: bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-7.4.0.tgz#71be70660643d8f60d13d355b8c80b16e4854870" - integrity sha512-3Fa+fL5NH+0H2KK4MAaqNsiz0PYwK0+Oxjmd0NgKwcqV2vJzRrzS3WG5kITYjNz9QGdBV+FrhNX/NSRU8LDx3Q== +"@abp/bootstrap@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-7.4.1.tgz#b34a2fcc80e04212865652ee7f4f5498a6a61f6d" + integrity sha512-/qCgfrtNWZ2jui2iL6wd6MLrcxALSEFVBypaz1JK3WjEe7DvFAYvKLl7DugIv039/Sx3mbx/PJiQhx8CVZMsEA== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" bootstrap "^5.1.3" -"@abp/core@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-7.4.0.tgz#8505d446a3b4d80ce476bd3352c1639c7dc486ec" - integrity sha512-yxrnw6eAEIj/CcX5jAwb4xmCsdqWaG+KRcBA8GFvqXbsK94IjqLDiJ3flo+QhGn2DXo40ISxofZop0CgSbP7Ew== +"@abp/core@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-7.4.1.tgz#1d14899ad16aac038806504eb0a5be9318cdcc0c" + integrity sha512-p0BAe2kCtgZmq8pilahmuxmye8DeRXt2KmnFRbmYE3j4d0uComFZpC72QOD1iro8bkmbsHfsHJpiVg4Sp4licw== dependencies: - "@abp/utils" "~7.4.0" + "@abp/utils" "~7.4.1" -"@abp/datatables.net-bs5@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-7.4.0.tgz#52d22e12a2420b402e03148793707d063db0088d" - integrity sha512-VvQv5w0cUpdDD9jX8aUEaLxFrc4A95JlmFnhCYIV1etL8HNOdZvmOThxorsImk31JfpyVYrY/Ze/rnWi2uhVvQ== +"@abp/datatables.net-bs5@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-7.4.1.tgz#821ee4c5db116f9810d65184855cea1fa7d47360" + integrity sha512-jpUzb65lCGYAxs/1qV3pRP8agHwIgZA9gDrudvR8S/3X3kNQWtmeKoFDZ93mhnl3aWPjWFKVrT2LeQeJw5XO5A== dependencies: - "@abp/datatables.net" "~7.4.0" + "@abp/datatables.net" "~7.4.1" datatables.net-bs5 "^1.11.4" -"@abp/datatables.net@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-7.4.0.tgz#9f12a1bb2abd05cd753b5d937d8a0350b2ff74ae" - integrity sha512-StOkMmIkcBUWzD9ToZ5J/hISRWdxbAWjwn7RuFXsoHXcY03mmD86g2oztjrWC5UFnRdpFnsfspTpbNqXFB9Vag== +"@abp/datatables.net@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-7.4.1.tgz#a4501e92e9995da0759b9ce55756fe92c4e8db59" + integrity sha512-BZOOZLH7XrGlX3aFK97cwV9+npsTzALSBo87OgwO2U6UpeFq7yAOvmC0+L9dmIUDISeORn5IFc/zTsSSIQnpHQ== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" datatables.net "^1.11.4" -"@abp/font-awesome@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-7.4.0.tgz#50059083b88706a0f71f55118472b378e4c66163" - integrity sha512-hKoPyM41HHCK6dg+8pQvjYJWzKABBCXrYQAIneMPQZUZqa4JLObKCva9TR7pu6pUp+9OVzg4fQOBM+nwpHtw4g== +"@abp/font-awesome@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-7.4.1.tgz#f6175a989aa64367830723f1dd9c607906716296" + integrity sha512-/ybaz4KROwFdG4Xv0yMTUMXOreDmKy1lKQuntqHEUnIorhXmkgcd5AQQ5AolJ4NmNdPNt1VYrRcTEmdz3nw+FA== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" "@fortawesome/fontawesome-free" "^5.15.4" -"@abp/jquery-form@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-7.4.0.tgz#7ab3be241ee09f1e2843bd1b4d0b0b86d4446e30" - integrity sha512-OmTRuZ7QK1oe2ayNLqEpRJk4Ogk0wt/hIFtJHwQkCtDuCggoR5sQz4vn1vgrD19MxGq07dow5IgjbbhHv1vtEg== +"@abp/jquery-form@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-7.4.1.tgz#67978c41cda204b4c2027d81fc66844379313fa6" + integrity sha512-JZ1D47s/kpTlfMcpD4Jrlh98bhEDsIlWJauvAYaS0EBPIU9V2zHGQ+h9GPFbSPrXe4sYxPSREcsc8KUVMhT5MQ== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-7.4.0.tgz#0c564e39c4997dd9b8af7d2023615a06d6fd9834" - integrity sha512-vFB3RKkDlDXbHlDJ64uo3jWW1IRXwiCaPf+mcB77Wpt5+0Dn7eWqjBT7KyHBrsV08ghIqY/Q4nXntFJrmLcuEA== +"@abp/jquery-validation-unobtrusive@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-7.4.1.tgz#fe5c90ade419e83505884dd50dd5988d766f177b" + integrity sha512-oHHV/ukap+vDvQ8CnEWnOrrsLkHXIcMk+SjNKe/dyK5VzOVLDpMatRFmloLs2igYVXTqDGjmDlTswTFdJUarcQ== dependencies: - "@abp/jquery-validation" "~7.4.0" + "@abp/jquery-validation" "~7.4.1" jquery-validation-unobtrusive "^3.2.12" -"@abp/jquery-validation@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-7.4.0.tgz#f2aaba8f4c023e93f0051cc9a05c6d82fa5c7254" - integrity sha512-vN4srLT5UXAKXpKHbZgySWT+N2DjRYivgtifpZHMTGFLMW14W+tfi5zhR4H4JvqJpuO6ZKNiz15zA1zwEBK0Tw== +"@abp/jquery-validation@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-7.4.1.tgz#c2c06bc28770832a9ad73eac000586faed3bdbe3" + integrity sha512-A5iFT2EWfGHXrBb/ov5f0grZ2o2xkDaYtps/FnDUwBYdIdD8E7bbJsWp6ytvZDciO0XmEqAoVOxmiij7ue/SOg== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" jquery-validation "^1.19.3" -"@abp/jquery@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-7.4.0.tgz#206891b20f250537d05d907d2b6cd682fec76496" - integrity sha512-DeYo02T6WVhdpLloSPb6ooqtpksu1HtcbbQhIP9E1P7jHSzZoNiJvoKXHiFUcj5PYiGKl9d/o89hM/apWzyreQ== +"@abp/jquery@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-7.4.1.tgz#b5e16834e6c7871ad6392612ac8e2de8617eb353" + integrity sha512-X3RcovvRYISHcsb6W3U3iVsofw6yomoiouoB1tSIy2/tvUbu9n7N/3MM0CUujFm/xib7s3z1tVxFssS9smT7sw== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" jquery "~3.6.0" -"@abp/lodash@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-7.4.0.tgz#93f20abee776dbfa7aa45e2e710f2768f262fda5" - integrity sha512-h4Fnjm+VLwp1F3r57B9MrHhwyOYMo5oP285a85zzAYLkhwcDy7f1nbHKHMQ3ZTaeJVmiRnVaH+3sdUdslCRt5g== +"@abp/lodash@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-7.4.1.tgz#d0f84b7b9cbd989d59ebde594ed7acb8bc720b61" + integrity sha512-RFjZCyAPZnpvT0SJbxXzzmMYbuocSWBlezvjAVA8MiTrOXdZO4VyaTFjIuQcAdSrZhtpFGeYWxAjHshVplxMbw== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" lodash "^4.17.21" -"@abp/luxon@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-7.4.0.tgz#2ba7ff307c8f7c24d818a9c33635b86fd6810db9" - integrity sha512-ROCx7aihM+agdYy7Tkz+GiScx68KY5qwGTnj8P7QabGFChzVUic6RuBG+2Obmfonc6uT7Rq0c8JDGrsGNe/w8A== +"@abp/luxon@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-7.4.1.tgz#e0c0947d2b77f98b9cdaf7d1143025879361c3c9" + integrity sha512-k1wh8tT1529MtNC2gSXEIKdimBXBwubXeLisgpIPx6lkJo1Op6pAz2ERwFXeyktqGdYyuFcnewJIxmS7EPtWhg== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" luxon "^2.3.0" -"@abp/malihu-custom-scrollbar-plugin@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-7.4.0.tgz#aba68877481f4339e048f2ae3cfbe93197145a0a" - integrity sha512-Ntodhi4k0HFQmImYTP5SYf/WDm7aUGJLaGsfePm77HJ6DhGgalIGqtM8NiFXzo/3GmMY0XSo8Wxrs1mSCdtsOA== +"@abp/malihu-custom-scrollbar-plugin@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-7.4.1.tgz#aa7ec247197a258277549052780b38fd9e748c6c" + integrity sha512-pm/wIaiRSgGxelOf8AiL4JKFNZOQ6s2WbR6pULiP2HSNCgCpWYJ2s8fvj7VP3lAHIa98v3m8PSMSUhqaANxZ/Q== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-7.4.0.tgz#2490d9c7cdcaeca8d0ba9ebef5e7298caf0c9e09" - integrity sha512-ftsUEgO17GbVawA1GplGFzEeIM4NX004AmS6/fPI3o5isX7o1buF9q9TXdnwUuFEJKZxS4KpveRqzTL5t9k0BQ== +"@abp/moment@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-7.4.1.tgz#1c28ccb13eecdd13695edf8641ca9867b318e37d" + integrity sha512-7vRJyAK5ER9z+LV1xUSAAtWlPlhv8yhM/nHjhC+IQSP/+V1D7VLA6EKxAEexGw7wX6HY8oMOWP9HxDHMb5hKQA== dependencies: moment "^2.9.0" -"@abp/select2@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-7.4.0.tgz#2f455cc991b7bb4df9ed426097bc2996cac12697" - integrity sha512-DwprX4MIoqMzSdh7eFg7EjGIz4ftYZub6jG9Sk3r+sxabbhpbFTxKOpXnhBWYi7L7uTQ8YDFk/5NeXO+Rm50Ww== +"@abp/select2@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-7.4.1.tgz#d7ea53cfec285a06278db362131b7510d5b73900" + integrity sha512-0S66iy7HuB74qqOSDraoF7UvXqz2PrnOKy+3EYMTMskOn4pWaq03JMR8xxEgZ8CtmsrqlE1a4wt1Yt9b3FIc0w== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" select2 "^4.0.13" -"@abp/sweetalert2@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-7.4.0.tgz#db1b4bd45cbabd61172591abc8ce223b5f607c4e" - integrity sha512-XqHPRnTASaRtbJIZYKW1KSKIJ8tynL8DuPCSMjcp4iyUlk+gnzxvbqXeNVjc2ojxj78T/42M/vITNoiiTYuKUw== +"@abp/sweetalert2@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-7.4.1.tgz#6722a40e5115cc341b7543aa0fa3b5a7ae9515b2" + integrity sha512-9jAHrYqCp5qykYfNNbqgESL6egixofVwonjZlb+lLWHAkIX+gQ2ApUNDFSXPtKUh2n9sXhSfF8SSg+BHP/bkCA== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" sweetalert2 "^11.3.6" -"@abp/timeago@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-7.4.0.tgz#245fe09370f38311a67a594c8a3c884aea59cc90" - integrity sha512-khxK6EICUaGCUM1HkACw/8rlPQNssoQvCK64bNqEHBCXgPUmTcqSj5MEGiNOYbgGyWeH2IAMtJEYPqX1g1wqSA== +"@abp/timeago@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-7.4.1.tgz#243d342ba131878ae7f892909c9cae07cf54902b" + integrity sha512-a0Vl2NFwTxzRmH5akWo8BRUxa6sK72z8OoXwUFkZOUqMWBCHK7ffNiN1/fbSgA+7HpSZdDvIthjYwBt57DxLdQ== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" timeago "^1.6.7" -"@abp/toastr@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-7.4.0.tgz#16ba0414a27c9a21bc7556a078b175445edcf608" - integrity sha512-oM4HT2m95cK/9sB4AEQAKUMSGBep6wZTgM/46+o2IvvMdMPrGR2mPu9V9wi3y817FRgY+/qQTfy5TZWyTuIpVQ== +"@abp/toastr@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-7.4.1.tgz#345545a41b6145e54477c6c376193a6dbd62bdda" + integrity sha512-OLCvPJYSrcT2spcq9nO838Q22VhJ63Kdzasz1HugdVNqgcFCCSsqaoXrJGUcf5GrZx7PNloz7uf1I3txYMeZtA== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" toastr "^2.1.4" -"@abp/utils@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-7.4.0.tgz#b31fb6e5dff07463535479a6bb62dc733d7119c8" - integrity sha512-CcR3tfuEsVM60DYL1A0cH6BkUTsasOoBDv/b63uLCoEOq/g8ntelD/SpRSgfDXK74P9M8OE5ZFxlXWDiYuzAFg== +"@abp/utils@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-7.4.1.tgz#2ce4c4d659c2ae9bc23b71b79fa3c6e120eaecaf" + integrity sha512-eFeoOXcz9cVkDKpOfd2VWmpAojASfsqfvACZqi1UmF16OcjsFIkxmIvhh1fpbT4A+eQLbaFFLIsf6gYb//tXhg== dependencies: just-compare "^2.3.0" diff --git a/modules/cms-kit/README.md b/modules/cms-kit/README.md new file mode 100644 index 0000000000..0f04a38ab8 --- /dev/null +++ b/modules/cms-kit/README.md @@ -0,0 +1,24 @@ +# CMS Kit + +## Updating Client Proxies + +This project have 3 types of client proxies. Before updating client proxies, make sure `Volo.CmsKit.Web.Unified` project is running. +Then you can update Client proxies in 3 different projects. Execute the following commands in the directory of the each project. + +- CMS Kit Public (**Volo.CmsKit.Public.HttpApi.Client**) + ```bash + abp generate-proxy -t csharp -url https://localhost:44349 -m cms-kit --without-contracts + ``` + +- CMS Kit Common (**Volo.CmsKit.Common.HttpApi.Client**) + + ```bash + abp generate-proxy -t csharp -url https://localhost:44349 -m cms-kit-common --without-contracts + ``` + +- CMS Kit Admin (**Volo.CmsKit.Admin.HttpApi.Client**) + + ```bash + abp generate-proxy -t csharp -url https://localhost:44349 -m cms-kit-admin --without-contracts + ``` + diff --git a/modules/cms-kit/angular/package.json b/modules/cms-kit/angular/package.json index 616089d5d9..ac8ba74119 100644 --- a/modules/cms-kit/angular/package.json +++ b/modules/cms-kit/angular/package.json @@ -15,11 +15,11 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~7.4.0", - "@abp/ng.identity": "~7.4.0", - "@abp/ng.setting-management": "~7.4.0", - "@abp/ng.tenant-management": "~7.4.0", - "@abp/ng.theme.basic": "~7.4.0", + "@abp/ng.account": "~7.4.1", + "@abp/ng.identity": "~7.4.1", + "@abp/ng.setting-management": "~7.4.1", + "@abp/ng.tenant-management": "~7.4.1", + "@abp/ng.theme.basic": "~7.4.1", "@angular/animations": "~10.0.0", "@angular/common": "~10.0.0", "@angular/compiler": "~10.0.0", diff --git a/modules/cms-kit/angular/projects/cms-kit/package.json b/modules/cms-kit/angular/projects/cms-kit/package.json index 16e2158730..384a49000e 100644 --- a/modules/cms-kit/angular/projects/cms-kit/package.json +++ b/modules/cms-kit/angular/projects/cms-kit/package.json @@ -4,8 +4,8 @@ "peerDependencies": { "@angular/common": "^9.1.11", "@angular/core": "^9.1.11", - "@abp/ng.core": ">=7.4.0", - "@abp/ng.theme.shared": ">=7.4.0" + "@abp/ng.core": ">=7.4.1", + "@abp/ng.theme.shared": ">=7.4.1" }, "dependencies": { "tslib": "^2.0.0" diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json index c98ab25773..afc96007fd 100644 --- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json @@ -3,6 +3,6 @@ "name": "my-app-identityserver", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~7.4.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "~7.4.1" } } diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock index 9c4c145174..8c3619aab1 100644 --- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock @@ -2,39 +2,39 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-7.4.0.tgz#5088dd82ce343e1123e025848f09b51df988b225" - integrity sha512-teT7I0kgjek/lHzpTg5VOVCQ3IL26nFB43Aa/45fuaSwh9FJd3IJNXGL6xwp85oKaptDYSBXIF4GbrUfp2Ugqg== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~7.4.0" - -"@abp/aspnetcore.mvc.ui.theme.shared@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-7.4.0.tgz#e676444a46214e850b0d916daeeb912774ac381d" - integrity sha512-X+dgdgHGUTyf0zaSPsqQp2ZZWu2+9gIRT4r4/LDgxchHgfNvcKRF8jH/JICcVgGD1adJvZzzDpTefL8CuAIRJA== - dependencies: - "@abp/aspnetcore.mvc.ui" "~7.4.0" - "@abp/bootstrap" "~7.4.0" - "@abp/bootstrap-datepicker" "~7.4.0" - "@abp/bootstrap-daterangepicker" "~7.4.0" - "@abp/datatables.net-bs5" "~7.4.0" - "@abp/font-awesome" "~7.4.0" - "@abp/jquery-form" "~7.4.0" - "@abp/jquery-validation-unobtrusive" "~7.4.0" - "@abp/lodash" "~7.4.0" - "@abp/luxon" "~7.4.0" - "@abp/malihu-custom-scrollbar-plugin" "~7.4.0" - "@abp/moment" "~7.4.0" - "@abp/select2" "~7.4.0" - "@abp/sweetalert2" "~7.4.0" - "@abp/timeago" "~7.4.0" - "@abp/toastr" "~7.4.0" - -"@abp/aspnetcore.mvc.ui@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-7.4.0.tgz#61e1b52d2a940e02242f57007bd3f0fcb583c09a" - integrity sha512-gdoxOBo10DWDYhUq1GVfguC0Ot8PYhoA3VLf88/RatL88BNUUlt0e71uMFcx/gk72fuAE+o9zXn/6nq1wtpSwQ== +"@abp/aspnetcore.mvc.ui.theme.basic@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-7.4.1.tgz#62df78aab8a0b374817fdbab6c6363529b43f925" + integrity sha512-KaPmBlwNjOl1+vwLj5O8J11YHBSRg4y0IIxtgZiculXQNFPHbYAXm8sfTw6Wcsx00STrhvUVJQxYMePNnOTCTg== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~7.4.1" + +"@abp/aspnetcore.mvc.ui.theme.shared@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-7.4.1.tgz#8f8679f5cf80137324ddbec9fcaa67332783e708" + integrity sha512-0uUKuTsi/ikLFUUNEqvrn7KimgsvuK+7m1yZD4o47FQlgGxTyt1zQY9w3K6YyhyC3lsT6qCwiAPIoFOzPkIg/Q== + dependencies: + "@abp/aspnetcore.mvc.ui" "~7.4.1" + "@abp/bootstrap" "~7.4.1" + "@abp/bootstrap-datepicker" "~7.4.1" + "@abp/bootstrap-daterangepicker" "~7.4.1" + "@abp/datatables.net-bs5" "~7.4.1" + "@abp/font-awesome" "~7.4.1" + "@abp/jquery-form" "~7.4.1" + "@abp/jquery-validation-unobtrusive" "~7.4.1" + "@abp/lodash" "~7.4.1" + "@abp/luxon" "~7.4.1" + "@abp/malihu-custom-scrollbar-plugin" "~7.4.1" + "@abp/moment" "~7.4.1" + "@abp/select2" "~7.4.1" + "@abp/sweetalert2" "~7.4.1" + "@abp/timeago" "~7.4.1" + "@abp/toastr" "~7.4.1" + +"@abp/aspnetcore.mvc.ui@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-7.4.1.tgz#49c13718a17569f97b71f978b50f367dff67b8f7" + integrity sha512-EvYrfk0mpSt1jAMZmfFcHoNWEJskzResKp0bflOYsYPsZPuJ5WraKsk4IEEpesYHCyHW5AAb5HBJHeoSbVLh4Q== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -43,158 +43,158 @@ merge-stream "^2.0.0" micromatch "^4.0.2" -"@abp/bootstrap-datepicker@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-7.4.0.tgz#75edc2127ca26d86bfefaa6e37579b06e32de5de" - integrity sha512-HXUa+kLjKu8sKr+kCZeNye9Pv/swRfKGAt/uJ2WUEvCJ4IVIMM1p6iMnOEEk/+3OGE64/PWu3cdE9dLP6izOaA== +"@abp/bootstrap-datepicker@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-7.4.1.tgz#f8f35d0edf71368faaae4e40a72fa846b0084f9b" + integrity sha512-hsu8ty6c2oOevsNoyFTQ4yJAu27qnz82MgRNVS8MRfdzo05/LhBhy/tKFm+PFYJqZULYlpQ1GXUF2+uGyazIeg== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap-daterangepicker@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-7.4.0.tgz#5058fc2a9354f0a71ac5393658e362779a3bdc46" - integrity sha512-EK0wzZUY9H3XPb9U3DvYVqh48fU+6IneNGYOk7dcda8CUYObd4Dl1nXligStCqgn2uePtwxDHRx40eV0GXmU/Q== +"@abp/bootstrap-daterangepicker@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-7.4.1.tgz#b133cefdbed0fa1b8f1bda916a9d46952237238a" + integrity sha512-NpmbsO4Xg48Zmr8OOlf1fxuNMnFIqmRrkHiKp9lP5c8am64+7rRzCwATw2UY0Ud+4n8/ws+Iki1dwPQF6db1zw== dependencies: bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-7.4.0.tgz#71be70660643d8f60d13d355b8c80b16e4854870" - integrity sha512-3Fa+fL5NH+0H2KK4MAaqNsiz0PYwK0+Oxjmd0NgKwcqV2vJzRrzS3WG5kITYjNz9QGdBV+FrhNX/NSRU8LDx3Q== +"@abp/bootstrap@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-7.4.1.tgz#b34a2fcc80e04212865652ee7f4f5498a6a61f6d" + integrity sha512-/qCgfrtNWZ2jui2iL6wd6MLrcxALSEFVBypaz1JK3WjEe7DvFAYvKLl7DugIv039/Sx3mbx/PJiQhx8CVZMsEA== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" bootstrap "^5.1.3" -"@abp/core@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-7.4.0.tgz#8505d446a3b4d80ce476bd3352c1639c7dc486ec" - integrity sha512-yxrnw6eAEIj/CcX5jAwb4xmCsdqWaG+KRcBA8GFvqXbsK94IjqLDiJ3flo+QhGn2DXo40ISxofZop0CgSbP7Ew== +"@abp/core@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-7.4.1.tgz#1d14899ad16aac038806504eb0a5be9318cdcc0c" + integrity sha512-p0BAe2kCtgZmq8pilahmuxmye8DeRXt2KmnFRbmYE3j4d0uComFZpC72QOD1iro8bkmbsHfsHJpiVg4Sp4licw== dependencies: - "@abp/utils" "~7.4.0" + "@abp/utils" "~7.4.1" -"@abp/datatables.net-bs5@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-7.4.0.tgz#52d22e12a2420b402e03148793707d063db0088d" - integrity sha512-VvQv5w0cUpdDD9jX8aUEaLxFrc4A95JlmFnhCYIV1etL8HNOdZvmOThxorsImk31JfpyVYrY/Ze/rnWi2uhVvQ== +"@abp/datatables.net-bs5@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-7.4.1.tgz#821ee4c5db116f9810d65184855cea1fa7d47360" + integrity sha512-jpUzb65lCGYAxs/1qV3pRP8agHwIgZA9gDrudvR8S/3X3kNQWtmeKoFDZ93mhnl3aWPjWFKVrT2LeQeJw5XO5A== dependencies: - "@abp/datatables.net" "~7.4.0" + "@abp/datatables.net" "~7.4.1" datatables.net-bs5 "^1.11.4" -"@abp/datatables.net@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-7.4.0.tgz#9f12a1bb2abd05cd753b5d937d8a0350b2ff74ae" - integrity sha512-StOkMmIkcBUWzD9ToZ5J/hISRWdxbAWjwn7RuFXsoHXcY03mmD86g2oztjrWC5UFnRdpFnsfspTpbNqXFB9Vag== +"@abp/datatables.net@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-7.4.1.tgz#a4501e92e9995da0759b9ce55756fe92c4e8db59" + integrity sha512-BZOOZLH7XrGlX3aFK97cwV9+npsTzALSBo87OgwO2U6UpeFq7yAOvmC0+L9dmIUDISeORn5IFc/zTsSSIQnpHQ== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" datatables.net "^1.11.4" -"@abp/font-awesome@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-7.4.0.tgz#50059083b88706a0f71f55118472b378e4c66163" - integrity sha512-hKoPyM41HHCK6dg+8pQvjYJWzKABBCXrYQAIneMPQZUZqa4JLObKCva9TR7pu6pUp+9OVzg4fQOBM+nwpHtw4g== +"@abp/font-awesome@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-7.4.1.tgz#f6175a989aa64367830723f1dd9c607906716296" + integrity sha512-/ybaz4KROwFdG4Xv0yMTUMXOreDmKy1lKQuntqHEUnIorhXmkgcd5AQQ5AolJ4NmNdPNt1VYrRcTEmdz3nw+FA== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" "@fortawesome/fontawesome-free" "^5.15.4" -"@abp/jquery-form@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-7.4.0.tgz#7ab3be241ee09f1e2843bd1b4d0b0b86d4446e30" - integrity sha512-OmTRuZ7QK1oe2ayNLqEpRJk4Ogk0wt/hIFtJHwQkCtDuCggoR5sQz4vn1vgrD19MxGq07dow5IgjbbhHv1vtEg== +"@abp/jquery-form@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-7.4.1.tgz#67978c41cda204b4c2027d81fc66844379313fa6" + integrity sha512-JZ1D47s/kpTlfMcpD4Jrlh98bhEDsIlWJauvAYaS0EBPIU9V2zHGQ+h9GPFbSPrXe4sYxPSREcsc8KUVMhT5MQ== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-7.4.0.tgz#0c564e39c4997dd9b8af7d2023615a06d6fd9834" - integrity sha512-vFB3RKkDlDXbHlDJ64uo3jWW1IRXwiCaPf+mcB77Wpt5+0Dn7eWqjBT7KyHBrsV08ghIqY/Q4nXntFJrmLcuEA== +"@abp/jquery-validation-unobtrusive@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-7.4.1.tgz#fe5c90ade419e83505884dd50dd5988d766f177b" + integrity sha512-oHHV/ukap+vDvQ8CnEWnOrrsLkHXIcMk+SjNKe/dyK5VzOVLDpMatRFmloLs2igYVXTqDGjmDlTswTFdJUarcQ== dependencies: - "@abp/jquery-validation" "~7.4.0" + "@abp/jquery-validation" "~7.4.1" jquery-validation-unobtrusive "^3.2.12" -"@abp/jquery-validation@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-7.4.0.tgz#f2aaba8f4c023e93f0051cc9a05c6d82fa5c7254" - integrity sha512-vN4srLT5UXAKXpKHbZgySWT+N2DjRYivgtifpZHMTGFLMW14W+tfi5zhR4H4JvqJpuO6ZKNiz15zA1zwEBK0Tw== +"@abp/jquery-validation@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-7.4.1.tgz#c2c06bc28770832a9ad73eac000586faed3bdbe3" + integrity sha512-A5iFT2EWfGHXrBb/ov5f0grZ2o2xkDaYtps/FnDUwBYdIdD8E7bbJsWp6ytvZDciO0XmEqAoVOxmiij7ue/SOg== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" jquery-validation "^1.19.3" -"@abp/jquery@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-7.4.0.tgz#206891b20f250537d05d907d2b6cd682fec76496" - integrity sha512-DeYo02T6WVhdpLloSPb6ooqtpksu1HtcbbQhIP9E1P7jHSzZoNiJvoKXHiFUcj5PYiGKl9d/o89hM/apWzyreQ== +"@abp/jquery@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-7.4.1.tgz#b5e16834e6c7871ad6392612ac8e2de8617eb353" + integrity sha512-X3RcovvRYISHcsb6W3U3iVsofw6yomoiouoB1tSIy2/tvUbu9n7N/3MM0CUujFm/xib7s3z1tVxFssS9smT7sw== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" jquery "~3.6.0" -"@abp/lodash@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-7.4.0.tgz#93f20abee776dbfa7aa45e2e710f2768f262fda5" - integrity sha512-h4Fnjm+VLwp1F3r57B9MrHhwyOYMo5oP285a85zzAYLkhwcDy7f1nbHKHMQ3ZTaeJVmiRnVaH+3sdUdslCRt5g== +"@abp/lodash@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-7.4.1.tgz#d0f84b7b9cbd989d59ebde594ed7acb8bc720b61" + integrity sha512-RFjZCyAPZnpvT0SJbxXzzmMYbuocSWBlezvjAVA8MiTrOXdZO4VyaTFjIuQcAdSrZhtpFGeYWxAjHshVplxMbw== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" lodash "^4.17.21" -"@abp/luxon@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-7.4.0.tgz#2ba7ff307c8f7c24d818a9c33635b86fd6810db9" - integrity sha512-ROCx7aihM+agdYy7Tkz+GiScx68KY5qwGTnj8P7QabGFChzVUic6RuBG+2Obmfonc6uT7Rq0c8JDGrsGNe/w8A== +"@abp/luxon@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-7.4.1.tgz#e0c0947d2b77f98b9cdaf7d1143025879361c3c9" + integrity sha512-k1wh8tT1529MtNC2gSXEIKdimBXBwubXeLisgpIPx6lkJo1Op6pAz2ERwFXeyktqGdYyuFcnewJIxmS7EPtWhg== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" luxon "^2.3.0" -"@abp/malihu-custom-scrollbar-plugin@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-7.4.0.tgz#aba68877481f4339e048f2ae3cfbe93197145a0a" - integrity sha512-Ntodhi4k0HFQmImYTP5SYf/WDm7aUGJLaGsfePm77HJ6DhGgalIGqtM8NiFXzo/3GmMY0XSo8Wxrs1mSCdtsOA== +"@abp/malihu-custom-scrollbar-plugin@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-7.4.1.tgz#aa7ec247197a258277549052780b38fd9e748c6c" + integrity sha512-pm/wIaiRSgGxelOf8AiL4JKFNZOQ6s2WbR6pULiP2HSNCgCpWYJ2s8fvj7VP3lAHIa98v3m8PSMSUhqaANxZ/Q== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-7.4.0.tgz#2490d9c7cdcaeca8d0ba9ebef5e7298caf0c9e09" - integrity sha512-ftsUEgO17GbVawA1GplGFzEeIM4NX004AmS6/fPI3o5isX7o1buF9q9TXdnwUuFEJKZxS4KpveRqzTL5t9k0BQ== +"@abp/moment@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-7.4.1.tgz#1c28ccb13eecdd13695edf8641ca9867b318e37d" + integrity sha512-7vRJyAK5ER9z+LV1xUSAAtWlPlhv8yhM/nHjhC+IQSP/+V1D7VLA6EKxAEexGw7wX6HY8oMOWP9HxDHMb5hKQA== dependencies: moment "^2.9.0" -"@abp/select2@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-7.4.0.tgz#2f455cc991b7bb4df9ed426097bc2996cac12697" - integrity sha512-DwprX4MIoqMzSdh7eFg7EjGIz4ftYZub6jG9Sk3r+sxabbhpbFTxKOpXnhBWYi7L7uTQ8YDFk/5NeXO+Rm50Ww== +"@abp/select2@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-7.4.1.tgz#d7ea53cfec285a06278db362131b7510d5b73900" + integrity sha512-0S66iy7HuB74qqOSDraoF7UvXqz2PrnOKy+3EYMTMskOn4pWaq03JMR8xxEgZ8CtmsrqlE1a4wt1Yt9b3FIc0w== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" select2 "^4.0.13" -"@abp/sweetalert2@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-7.4.0.tgz#db1b4bd45cbabd61172591abc8ce223b5f607c4e" - integrity sha512-XqHPRnTASaRtbJIZYKW1KSKIJ8tynL8DuPCSMjcp4iyUlk+gnzxvbqXeNVjc2ojxj78T/42M/vITNoiiTYuKUw== +"@abp/sweetalert2@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-7.4.1.tgz#6722a40e5115cc341b7543aa0fa3b5a7ae9515b2" + integrity sha512-9jAHrYqCp5qykYfNNbqgESL6egixofVwonjZlb+lLWHAkIX+gQ2ApUNDFSXPtKUh2n9sXhSfF8SSg+BHP/bkCA== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" sweetalert2 "^11.3.6" -"@abp/timeago@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-7.4.0.tgz#245fe09370f38311a67a594c8a3c884aea59cc90" - integrity sha512-khxK6EICUaGCUM1HkACw/8rlPQNssoQvCK64bNqEHBCXgPUmTcqSj5MEGiNOYbgGyWeH2IAMtJEYPqX1g1wqSA== +"@abp/timeago@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-7.4.1.tgz#243d342ba131878ae7f892909c9cae07cf54902b" + integrity sha512-a0Vl2NFwTxzRmH5akWo8BRUxa6sK72z8OoXwUFkZOUqMWBCHK7ffNiN1/fbSgA+7HpSZdDvIthjYwBt57DxLdQ== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" timeago "^1.6.7" -"@abp/toastr@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-7.4.0.tgz#16ba0414a27c9a21bc7556a078b175445edcf608" - integrity sha512-oM4HT2m95cK/9sB4AEQAKUMSGBep6wZTgM/46+o2IvvMdMPrGR2mPu9V9wi3y817FRgY+/qQTfy5TZWyTuIpVQ== +"@abp/toastr@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-7.4.1.tgz#345545a41b6145e54477c6c376193a6dbd62bdda" + integrity sha512-OLCvPJYSrcT2spcq9nO838Q22VhJ63Kdzasz1HugdVNqgcFCCSsqaoXrJGUcf5GrZx7PNloz7uf1I3txYMeZtA== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" toastr "^2.1.4" -"@abp/utils@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-7.4.0.tgz#b31fb6e5dff07463535479a6bb62dc733d7119c8" - integrity sha512-CcR3tfuEsVM60DYL1A0cH6BkUTsasOoBDv/b63uLCoEOq/g8ntelD/SpRSgfDXK74P9M8OE5ZFxlXWDiYuzAFg== +"@abp/utils@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-7.4.1.tgz#2ce4c4d659c2ae9bc23b71b79fa3c6e120eaecaf" + integrity sha512-eFeoOXcz9cVkDKpOfd2VWmpAojASfsqfvACZqi1UmF16OcjsFIkxmIvhh1fpbT4A+eQLbaFFLIsf6gYb//tXhg== dependencies: just-compare "^2.3.0" diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json b/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json index 7fbc0569f6..212b67b1c1 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~7.4.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "~7.4.1" } } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock index 9c4c145174..8c3619aab1 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock @@ -2,39 +2,39 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-7.4.0.tgz#5088dd82ce343e1123e025848f09b51df988b225" - integrity sha512-teT7I0kgjek/lHzpTg5VOVCQ3IL26nFB43Aa/45fuaSwh9FJd3IJNXGL6xwp85oKaptDYSBXIF4GbrUfp2Ugqg== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~7.4.0" - -"@abp/aspnetcore.mvc.ui.theme.shared@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-7.4.0.tgz#e676444a46214e850b0d916daeeb912774ac381d" - integrity sha512-X+dgdgHGUTyf0zaSPsqQp2ZZWu2+9gIRT4r4/LDgxchHgfNvcKRF8jH/JICcVgGD1adJvZzzDpTefL8CuAIRJA== - dependencies: - "@abp/aspnetcore.mvc.ui" "~7.4.0" - "@abp/bootstrap" "~7.4.0" - "@abp/bootstrap-datepicker" "~7.4.0" - "@abp/bootstrap-daterangepicker" "~7.4.0" - "@abp/datatables.net-bs5" "~7.4.0" - "@abp/font-awesome" "~7.4.0" - "@abp/jquery-form" "~7.4.0" - "@abp/jquery-validation-unobtrusive" "~7.4.0" - "@abp/lodash" "~7.4.0" - "@abp/luxon" "~7.4.0" - "@abp/malihu-custom-scrollbar-plugin" "~7.4.0" - "@abp/moment" "~7.4.0" - "@abp/select2" "~7.4.0" - "@abp/sweetalert2" "~7.4.0" - "@abp/timeago" "~7.4.0" - "@abp/toastr" "~7.4.0" - -"@abp/aspnetcore.mvc.ui@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-7.4.0.tgz#61e1b52d2a940e02242f57007bd3f0fcb583c09a" - integrity sha512-gdoxOBo10DWDYhUq1GVfguC0Ot8PYhoA3VLf88/RatL88BNUUlt0e71uMFcx/gk72fuAE+o9zXn/6nq1wtpSwQ== +"@abp/aspnetcore.mvc.ui.theme.basic@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-7.4.1.tgz#62df78aab8a0b374817fdbab6c6363529b43f925" + integrity sha512-KaPmBlwNjOl1+vwLj5O8J11YHBSRg4y0IIxtgZiculXQNFPHbYAXm8sfTw6Wcsx00STrhvUVJQxYMePNnOTCTg== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~7.4.1" + +"@abp/aspnetcore.mvc.ui.theme.shared@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-7.4.1.tgz#8f8679f5cf80137324ddbec9fcaa67332783e708" + integrity sha512-0uUKuTsi/ikLFUUNEqvrn7KimgsvuK+7m1yZD4o47FQlgGxTyt1zQY9w3K6YyhyC3lsT6qCwiAPIoFOzPkIg/Q== + dependencies: + "@abp/aspnetcore.mvc.ui" "~7.4.1" + "@abp/bootstrap" "~7.4.1" + "@abp/bootstrap-datepicker" "~7.4.1" + "@abp/bootstrap-daterangepicker" "~7.4.1" + "@abp/datatables.net-bs5" "~7.4.1" + "@abp/font-awesome" "~7.4.1" + "@abp/jquery-form" "~7.4.1" + "@abp/jquery-validation-unobtrusive" "~7.4.1" + "@abp/lodash" "~7.4.1" + "@abp/luxon" "~7.4.1" + "@abp/malihu-custom-scrollbar-plugin" "~7.4.1" + "@abp/moment" "~7.4.1" + "@abp/select2" "~7.4.1" + "@abp/sweetalert2" "~7.4.1" + "@abp/timeago" "~7.4.1" + "@abp/toastr" "~7.4.1" + +"@abp/aspnetcore.mvc.ui@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-7.4.1.tgz#49c13718a17569f97b71f978b50f367dff67b8f7" + integrity sha512-EvYrfk0mpSt1jAMZmfFcHoNWEJskzResKp0bflOYsYPsZPuJ5WraKsk4IEEpesYHCyHW5AAb5HBJHeoSbVLh4Q== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -43,158 +43,158 @@ merge-stream "^2.0.0" micromatch "^4.0.2" -"@abp/bootstrap-datepicker@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-7.4.0.tgz#75edc2127ca26d86bfefaa6e37579b06e32de5de" - integrity sha512-HXUa+kLjKu8sKr+kCZeNye9Pv/swRfKGAt/uJ2WUEvCJ4IVIMM1p6iMnOEEk/+3OGE64/PWu3cdE9dLP6izOaA== +"@abp/bootstrap-datepicker@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-7.4.1.tgz#f8f35d0edf71368faaae4e40a72fa846b0084f9b" + integrity sha512-hsu8ty6c2oOevsNoyFTQ4yJAu27qnz82MgRNVS8MRfdzo05/LhBhy/tKFm+PFYJqZULYlpQ1GXUF2+uGyazIeg== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap-daterangepicker@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-7.4.0.tgz#5058fc2a9354f0a71ac5393658e362779a3bdc46" - integrity sha512-EK0wzZUY9H3XPb9U3DvYVqh48fU+6IneNGYOk7dcda8CUYObd4Dl1nXligStCqgn2uePtwxDHRx40eV0GXmU/Q== +"@abp/bootstrap-daterangepicker@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-7.4.1.tgz#b133cefdbed0fa1b8f1bda916a9d46952237238a" + integrity sha512-NpmbsO4Xg48Zmr8OOlf1fxuNMnFIqmRrkHiKp9lP5c8am64+7rRzCwATw2UY0Ud+4n8/ws+Iki1dwPQF6db1zw== dependencies: bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-7.4.0.tgz#71be70660643d8f60d13d355b8c80b16e4854870" - integrity sha512-3Fa+fL5NH+0H2KK4MAaqNsiz0PYwK0+Oxjmd0NgKwcqV2vJzRrzS3WG5kITYjNz9QGdBV+FrhNX/NSRU8LDx3Q== +"@abp/bootstrap@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-7.4.1.tgz#b34a2fcc80e04212865652ee7f4f5498a6a61f6d" + integrity sha512-/qCgfrtNWZ2jui2iL6wd6MLrcxALSEFVBypaz1JK3WjEe7DvFAYvKLl7DugIv039/Sx3mbx/PJiQhx8CVZMsEA== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" bootstrap "^5.1.3" -"@abp/core@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-7.4.0.tgz#8505d446a3b4d80ce476bd3352c1639c7dc486ec" - integrity sha512-yxrnw6eAEIj/CcX5jAwb4xmCsdqWaG+KRcBA8GFvqXbsK94IjqLDiJ3flo+QhGn2DXo40ISxofZop0CgSbP7Ew== +"@abp/core@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-7.4.1.tgz#1d14899ad16aac038806504eb0a5be9318cdcc0c" + integrity sha512-p0BAe2kCtgZmq8pilahmuxmye8DeRXt2KmnFRbmYE3j4d0uComFZpC72QOD1iro8bkmbsHfsHJpiVg4Sp4licw== dependencies: - "@abp/utils" "~7.4.0" + "@abp/utils" "~7.4.1" -"@abp/datatables.net-bs5@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-7.4.0.tgz#52d22e12a2420b402e03148793707d063db0088d" - integrity sha512-VvQv5w0cUpdDD9jX8aUEaLxFrc4A95JlmFnhCYIV1etL8HNOdZvmOThxorsImk31JfpyVYrY/Ze/rnWi2uhVvQ== +"@abp/datatables.net-bs5@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-7.4.1.tgz#821ee4c5db116f9810d65184855cea1fa7d47360" + integrity sha512-jpUzb65lCGYAxs/1qV3pRP8agHwIgZA9gDrudvR8S/3X3kNQWtmeKoFDZ93mhnl3aWPjWFKVrT2LeQeJw5XO5A== dependencies: - "@abp/datatables.net" "~7.4.0" + "@abp/datatables.net" "~7.4.1" datatables.net-bs5 "^1.11.4" -"@abp/datatables.net@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-7.4.0.tgz#9f12a1bb2abd05cd753b5d937d8a0350b2ff74ae" - integrity sha512-StOkMmIkcBUWzD9ToZ5J/hISRWdxbAWjwn7RuFXsoHXcY03mmD86g2oztjrWC5UFnRdpFnsfspTpbNqXFB9Vag== +"@abp/datatables.net@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-7.4.1.tgz#a4501e92e9995da0759b9ce55756fe92c4e8db59" + integrity sha512-BZOOZLH7XrGlX3aFK97cwV9+npsTzALSBo87OgwO2U6UpeFq7yAOvmC0+L9dmIUDISeORn5IFc/zTsSSIQnpHQ== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" datatables.net "^1.11.4" -"@abp/font-awesome@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-7.4.0.tgz#50059083b88706a0f71f55118472b378e4c66163" - integrity sha512-hKoPyM41HHCK6dg+8pQvjYJWzKABBCXrYQAIneMPQZUZqa4JLObKCva9TR7pu6pUp+9OVzg4fQOBM+nwpHtw4g== +"@abp/font-awesome@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-7.4.1.tgz#f6175a989aa64367830723f1dd9c607906716296" + integrity sha512-/ybaz4KROwFdG4Xv0yMTUMXOreDmKy1lKQuntqHEUnIorhXmkgcd5AQQ5AolJ4NmNdPNt1VYrRcTEmdz3nw+FA== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" "@fortawesome/fontawesome-free" "^5.15.4" -"@abp/jquery-form@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-7.4.0.tgz#7ab3be241ee09f1e2843bd1b4d0b0b86d4446e30" - integrity sha512-OmTRuZ7QK1oe2ayNLqEpRJk4Ogk0wt/hIFtJHwQkCtDuCggoR5sQz4vn1vgrD19MxGq07dow5IgjbbhHv1vtEg== +"@abp/jquery-form@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-7.4.1.tgz#67978c41cda204b4c2027d81fc66844379313fa6" + integrity sha512-JZ1D47s/kpTlfMcpD4Jrlh98bhEDsIlWJauvAYaS0EBPIU9V2zHGQ+h9GPFbSPrXe4sYxPSREcsc8KUVMhT5MQ== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-7.4.0.tgz#0c564e39c4997dd9b8af7d2023615a06d6fd9834" - integrity sha512-vFB3RKkDlDXbHlDJ64uo3jWW1IRXwiCaPf+mcB77Wpt5+0Dn7eWqjBT7KyHBrsV08ghIqY/Q4nXntFJrmLcuEA== +"@abp/jquery-validation-unobtrusive@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-7.4.1.tgz#fe5c90ade419e83505884dd50dd5988d766f177b" + integrity sha512-oHHV/ukap+vDvQ8CnEWnOrrsLkHXIcMk+SjNKe/dyK5VzOVLDpMatRFmloLs2igYVXTqDGjmDlTswTFdJUarcQ== dependencies: - "@abp/jquery-validation" "~7.4.0" + "@abp/jquery-validation" "~7.4.1" jquery-validation-unobtrusive "^3.2.12" -"@abp/jquery-validation@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-7.4.0.tgz#f2aaba8f4c023e93f0051cc9a05c6d82fa5c7254" - integrity sha512-vN4srLT5UXAKXpKHbZgySWT+N2DjRYivgtifpZHMTGFLMW14W+tfi5zhR4H4JvqJpuO6ZKNiz15zA1zwEBK0Tw== +"@abp/jquery-validation@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-7.4.1.tgz#c2c06bc28770832a9ad73eac000586faed3bdbe3" + integrity sha512-A5iFT2EWfGHXrBb/ov5f0grZ2o2xkDaYtps/FnDUwBYdIdD8E7bbJsWp6ytvZDciO0XmEqAoVOxmiij7ue/SOg== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" jquery-validation "^1.19.3" -"@abp/jquery@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-7.4.0.tgz#206891b20f250537d05d907d2b6cd682fec76496" - integrity sha512-DeYo02T6WVhdpLloSPb6ooqtpksu1HtcbbQhIP9E1P7jHSzZoNiJvoKXHiFUcj5PYiGKl9d/o89hM/apWzyreQ== +"@abp/jquery@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-7.4.1.tgz#b5e16834e6c7871ad6392612ac8e2de8617eb353" + integrity sha512-X3RcovvRYISHcsb6W3U3iVsofw6yomoiouoB1tSIy2/tvUbu9n7N/3MM0CUujFm/xib7s3z1tVxFssS9smT7sw== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" jquery "~3.6.0" -"@abp/lodash@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-7.4.0.tgz#93f20abee776dbfa7aa45e2e710f2768f262fda5" - integrity sha512-h4Fnjm+VLwp1F3r57B9MrHhwyOYMo5oP285a85zzAYLkhwcDy7f1nbHKHMQ3ZTaeJVmiRnVaH+3sdUdslCRt5g== +"@abp/lodash@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-7.4.1.tgz#d0f84b7b9cbd989d59ebde594ed7acb8bc720b61" + integrity sha512-RFjZCyAPZnpvT0SJbxXzzmMYbuocSWBlezvjAVA8MiTrOXdZO4VyaTFjIuQcAdSrZhtpFGeYWxAjHshVplxMbw== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" lodash "^4.17.21" -"@abp/luxon@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-7.4.0.tgz#2ba7ff307c8f7c24d818a9c33635b86fd6810db9" - integrity sha512-ROCx7aihM+agdYy7Tkz+GiScx68KY5qwGTnj8P7QabGFChzVUic6RuBG+2Obmfonc6uT7Rq0c8JDGrsGNe/w8A== +"@abp/luxon@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-7.4.1.tgz#e0c0947d2b77f98b9cdaf7d1143025879361c3c9" + integrity sha512-k1wh8tT1529MtNC2gSXEIKdimBXBwubXeLisgpIPx6lkJo1Op6pAz2ERwFXeyktqGdYyuFcnewJIxmS7EPtWhg== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" luxon "^2.3.0" -"@abp/malihu-custom-scrollbar-plugin@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-7.4.0.tgz#aba68877481f4339e048f2ae3cfbe93197145a0a" - integrity sha512-Ntodhi4k0HFQmImYTP5SYf/WDm7aUGJLaGsfePm77HJ6DhGgalIGqtM8NiFXzo/3GmMY0XSo8Wxrs1mSCdtsOA== +"@abp/malihu-custom-scrollbar-plugin@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-7.4.1.tgz#aa7ec247197a258277549052780b38fd9e748c6c" + integrity sha512-pm/wIaiRSgGxelOf8AiL4JKFNZOQ6s2WbR6pULiP2HSNCgCpWYJ2s8fvj7VP3lAHIa98v3m8PSMSUhqaANxZ/Q== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-7.4.0.tgz#2490d9c7cdcaeca8d0ba9ebef5e7298caf0c9e09" - integrity sha512-ftsUEgO17GbVawA1GplGFzEeIM4NX004AmS6/fPI3o5isX7o1buF9q9TXdnwUuFEJKZxS4KpveRqzTL5t9k0BQ== +"@abp/moment@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-7.4.1.tgz#1c28ccb13eecdd13695edf8641ca9867b318e37d" + integrity sha512-7vRJyAK5ER9z+LV1xUSAAtWlPlhv8yhM/nHjhC+IQSP/+V1D7VLA6EKxAEexGw7wX6HY8oMOWP9HxDHMb5hKQA== dependencies: moment "^2.9.0" -"@abp/select2@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-7.4.0.tgz#2f455cc991b7bb4df9ed426097bc2996cac12697" - integrity sha512-DwprX4MIoqMzSdh7eFg7EjGIz4ftYZub6jG9Sk3r+sxabbhpbFTxKOpXnhBWYi7L7uTQ8YDFk/5NeXO+Rm50Ww== +"@abp/select2@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-7.4.1.tgz#d7ea53cfec285a06278db362131b7510d5b73900" + integrity sha512-0S66iy7HuB74qqOSDraoF7UvXqz2PrnOKy+3EYMTMskOn4pWaq03JMR8xxEgZ8CtmsrqlE1a4wt1Yt9b3FIc0w== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" select2 "^4.0.13" -"@abp/sweetalert2@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-7.4.0.tgz#db1b4bd45cbabd61172591abc8ce223b5f607c4e" - integrity sha512-XqHPRnTASaRtbJIZYKW1KSKIJ8tynL8DuPCSMjcp4iyUlk+gnzxvbqXeNVjc2ojxj78T/42M/vITNoiiTYuKUw== +"@abp/sweetalert2@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-7.4.1.tgz#6722a40e5115cc341b7543aa0fa3b5a7ae9515b2" + integrity sha512-9jAHrYqCp5qykYfNNbqgESL6egixofVwonjZlb+lLWHAkIX+gQ2ApUNDFSXPtKUh2n9sXhSfF8SSg+BHP/bkCA== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" sweetalert2 "^11.3.6" -"@abp/timeago@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-7.4.0.tgz#245fe09370f38311a67a594c8a3c884aea59cc90" - integrity sha512-khxK6EICUaGCUM1HkACw/8rlPQNssoQvCK64bNqEHBCXgPUmTcqSj5MEGiNOYbgGyWeH2IAMtJEYPqX1g1wqSA== +"@abp/timeago@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-7.4.1.tgz#243d342ba131878ae7f892909c9cae07cf54902b" + integrity sha512-a0Vl2NFwTxzRmH5akWo8BRUxa6sK72z8OoXwUFkZOUqMWBCHK7ffNiN1/fbSgA+7HpSZdDvIthjYwBt57DxLdQ== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" timeago "^1.6.7" -"@abp/toastr@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-7.4.0.tgz#16ba0414a27c9a21bc7556a078b175445edcf608" - integrity sha512-oM4HT2m95cK/9sB4AEQAKUMSGBep6wZTgM/46+o2IvvMdMPrGR2mPu9V9wi3y817FRgY+/qQTfy5TZWyTuIpVQ== +"@abp/toastr@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-7.4.1.tgz#345545a41b6145e54477c6c376193a6dbd62bdda" + integrity sha512-OLCvPJYSrcT2spcq9nO838Q22VhJ63Kdzasz1HugdVNqgcFCCSsqaoXrJGUcf5GrZx7PNloz7uf1I3txYMeZtA== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" toastr "^2.1.4" -"@abp/utils@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-7.4.0.tgz#b31fb6e5dff07463535479a6bb62dc733d7119c8" - integrity sha512-CcR3tfuEsVM60DYL1A0cH6BkUTsasOoBDv/b63uLCoEOq/g8ntelD/SpRSgfDXK74P9M8OE5ZFxlXWDiYuzAFg== +"@abp/utils@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-7.4.1.tgz#2ce4c4d659c2ae9bc23b71b79fa3c6e120eaecaf" + integrity sha512-eFeoOXcz9cVkDKpOfd2VWmpAojASfsqfvACZqi1UmF16OcjsFIkxmIvhh1fpbT4A+eQLbaFFLIsf6gYb//tXhg== dependencies: just-compare "^2.3.0" diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Pages/Index.cshtml b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Pages/Index.cshtml index 1b3f3ff94c..5302289fb3 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Pages/Index.cshtml +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Pages/Index.cshtml @@ -48,7 +48,12 @@ @if (GlobalFeatureManager.Instance.IsEnabled()) { - @await Component.InvokeAsync(typeof(RatingViewComponent), new {entityType = "quote", entityId = "1"}) + @await Component.InvokeAsync(typeof(RatingViewComponent), new + { + entityType = "quote", + entityId = "1", + isReadOnly = false + }) } @@ -60,7 +65,13 @@ @if (GlobalFeatureManager.Instance.IsEnabled()) { - @await Component.InvokeAsync(typeof(CommentingViewComponent), new {entityType = "quote", entityId = "1", referralLinks = new [] {"nofollow"}}) + @await Component.InvokeAsync(typeof(CommentingViewComponent), new + { + entityType = "quote", + entityId = "1", + isReadOnly = false, + referralLinks = new [] {"nofollow"} + }) } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json index a4a8e6fff1..6d059608f6 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json +++ b/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": "~7.4.0", - "@abp/cms-kit": "7.4.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "~7.4.1", + "@abp/cms-kit": "7.4.1" } } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock index 87286d8e3c..8e20f36041 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock @@ -2,39 +2,39 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-7.4.0.tgz#5088dd82ce343e1123e025848f09b51df988b225" - integrity sha512-teT7I0kgjek/lHzpTg5VOVCQ3IL26nFB43Aa/45fuaSwh9FJd3IJNXGL6xwp85oKaptDYSBXIF4GbrUfp2Ugqg== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~7.4.0" - -"@abp/aspnetcore.mvc.ui.theme.shared@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-7.4.0.tgz#e676444a46214e850b0d916daeeb912774ac381d" - integrity sha512-X+dgdgHGUTyf0zaSPsqQp2ZZWu2+9gIRT4r4/LDgxchHgfNvcKRF8jH/JICcVgGD1adJvZzzDpTefL8CuAIRJA== - dependencies: - "@abp/aspnetcore.mvc.ui" "~7.4.0" - "@abp/bootstrap" "~7.4.0" - "@abp/bootstrap-datepicker" "~7.4.0" - "@abp/bootstrap-daterangepicker" "~7.4.0" - "@abp/datatables.net-bs5" "~7.4.0" - "@abp/font-awesome" "~7.4.0" - "@abp/jquery-form" "~7.4.0" - "@abp/jquery-validation-unobtrusive" "~7.4.0" - "@abp/lodash" "~7.4.0" - "@abp/luxon" "~7.4.0" - "@abp/malihu-custom-scrollbar-plugin" "~7.4.0" - "@abp/moment" "~7.4.0" - "@abp/select2" "~7.4.0" - "@abp/sweetalert2" "~7.4.0" - "@abp/timeago" "~7.4.0" - "@abp/toastr" "~7.4.0" - -"@abp/aspnetcore.mvc.ui@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-7.4.0.tgz#61e1b52d2a940e02242f57007bd3f0fcb583c09a" - integrity sha512-gdoxOBo10DWDYhUq1GVfguC0Ot8PYhoA3VLf88/RatL88BNUUlt0e71uMFcx/gk72fuAE+o9zXn/6nq1wtpSwQ== +"@abp/aspnetcore.mvc.ui.theme.basic@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-7.4.1.tgz#62df78aab8a0b374817fdbab6c6363529b43f925" + integrity sha512-KaPmBlwNjOl1+vwLj5O8J11YHBSRg4y0IIxtgZiculXQNFPHbYAXm8sfTw6Wcsx00STrhvUVJQxYMePNnOTCTg== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~7.4.1" + +"@abp/aspnetcore.mvc.ui.theme.shared@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-7.4.1.tgz#8f8679f5cf80137324ddbec9fcaa67332783e708" + integrity sha512-0uUKuTsi/ikLFUUNEqvrn7KimgsvuK+7m1yZD4o47FQlgGxTyt1zQY9w3K6YyhyC3lsT6qCwiAPIoFOzPkIg/Q== + dependencies: + "@abp/aspnetcore.mvc.ui" "~7.4.1" + "@abp/bootstrap" "~7.4.1" + "@abp/bootstrap-datepicker" "~7.4.1" + "@abp/bootstrap-daterangepicker" "~7.4.1" + "@abp/datatables.net-bs5" "~7.4.1" + "@abp/font-awesome" "~7.4.1" + "@abp/jquery-form" "~7.4.1" + "@abp/jquery-validation-unobtrusive" "~7.4.1" + "@abp/lodash" "~7.4.1" + "@abp/luxon" "~7.4.1" + "@abp/malihu-custom-scrollbar-plugin" "~7.4.1" + "@abp/moment" "~7.4.1" + "@abp/select2" "~7.4.1" + "@abp/sweetalert2" "~7.4.1" + "@abp/timeago" "~7.4.1" + "@abp/toastr" "~7.4.1" + +"@abp/aspnetcore.mvc.ui@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-7.4.1.tgz#49c13718a17569f97b71f978b50f367dff67b8f7" + integrity sha512-EvYrfk0mpSt1jAMZmfFcHoNWEJskzResKp0bflOYsYPsZPuJ5WraKsk4IEEpesYHCyHW5AAb5HBJHeoSbVLh4Q== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -43,257 +43,257 @@ merge-stream "^2.0.0" micromatch "^4.0.2" -"@abp/bootstrap-datepicker@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-7.4.0.tgz#75edc2127ca26d86bfefaa6e37579b06e32de5de" - integrity sha512-HXUa+kLjKu8sKr+kCZeNye9Pv/swRfKGAt/uJ2WUEvCJ4IVIMM1p6iMnOEEk/+3OGE64/PWu3cdE9dLP6izOaA== +"@abp/bootstrap-datepicker@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-7.4.1.tgz#f8f35d0edf71368faaae4e40a72fa846b0084f9b" + integrity sha512-hsu8ty6c2oOevsNoyFTQ4yJAu27qnz82MgRNVS8MRfdzo05/LhBhy/tKFm+PFYJqZULYlpQ1GXUF2+uGyazIeg== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap-daterangepicker@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-7.4.0.tgz#5058fc2a9354f0a71ac5393658e362779a3bdc46" - integrity sha512-EK0wzZUY9H3XPb9U3DvYVqh48fU+6IneNGYOk7dcda8CUYObd4Dl1nXligStCqgn2uePtwxDHRx40eV0GXmU/Q== +"@abp/bootstrap-daterangepicker@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-7.4.1.tgz#b133cefdbed0fa1b8f1bda916a9d46952237238a" + integrity sha512-NpmbsO4Xg48Zmr8OOlf1fxuNMnFIqmRrkHiKp9lP5c8am64+7rRzCwATw2UY0Ud+4n8/ws+Iki1dwPQF6db1zw== dependencies: bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-7.4.0.tgz#71be70660643d8f60d13d355b8c80b16e4854870" - integrity sha512-3Fa+fL5NH+0H2KK4MAaqNsiz0PYwK0+Oxjmd0NgKwcqV2vJzRrzS3WG5kITYjNz9QGdBV+FrhNX/NSRU8LDx3Q== +"@abp/bootstrap@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-7.4.1.tgz#b34a2fcc80e04212865652ee7f4f5498a6a61f6d" + integrity sha512-/qCgfrtNWZ2jui2iL6wd6MLrcxALSEFVBypaz1JK3WjEe7DvFAYvKLl7DugIv039/Sx3mbx/PJiQhx8CVZMsEA== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" bootstrap "^5.1.3" -"@abp/clipboard@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-7.4.0.tgz#f1d147df94ddf3ab53eeeb05aec3d5556064c5d6" - integrity sha512-z/nB1RQN/tmShSRwc9Fv1DsJSNM7+Zg4GnAtvZNpOHJp8LTVmsJWxLoUM7hF896W9E0JKr8tRuCVqulyh3IqKg== +"@abp/clipboard@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-7.4.1.tgz#31329ad4565b5075b486e9ca63fb0ff8a070ff9e" + integrity sha512-/+ylBPs/TEZdwywSSTnj96WoRJPwQnR6vlI+sX7h9wDfSDbMwuSSdETSnDVT21lkl8gonPONFZTL8D1u/KKAhg== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" clipboard "^2.0.8" -"@abp/cms-kit.admin@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/cms-kit.admin/-/cms-kit.admin-7.4.0.tgz#89465edaf6ccb44d517ca999dff68a9382bb3b36" - integrity sha512-QnCJF9YgzpS76cX1CXgeKGX41a5tltqf5tX/zryWaXyQxGgc/2gmVIT5NBsOABLNePmtAYGnF2GtwOygikOJCw== +"@abp/cms-kit.admin@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/cms-kit.admin/-/cms-kit.admin-7.4.1.tgz#aab06e7741b5cd5717ca2d1b4966a3ac1882646e" + integrity sha512-6mNdNp1m8dt/LK6HBDbaLs0DUnrAgWZVYWGGAc/ajrQPoZhw0gptqf4raAYnt0yDx+/30/Lw2cwsQQl5uAr5mw== dependencies: - "@abp/codemirror" "~7.4.0" - "@abp/jstree" "~7.4.0" - "@abp/slugify" "~7.4.0" - "@abp/tui-editor" "~7.4.0" - "@abp/uppy" "~7.4.0" + "@abp/codemirror" "~7.4.1" + "@abp/jstree" "~7.4.1" + "@abp/slugify" "~7.4.1" + "@abp/tui-editor" "~7.4.1" + "@abp/uppy" "~7.4.1" -"@abp/cms-kit.public@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/cms-kit.public/-/cms-kit.public-7.4.0.tgz#c13c7e7f155a76f699d6a32f918e74d83ebcdff9" - integrity sha512-5+RJRAH2AK+Do2iNo0KDEqgqt+UwtMpCzIn/Rpcgn+WtiqyJ9XNqn9A8mISasPtXzXvrZplQrSmCAjAUSm1AeA== +"@abp/cms-kit.public@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/cms-kit.public/-/cms-kit.public-7.4.1.tgz#b140eb556985f18e2482cd9422b262fdcad5e6d1" + integrity sha512-5sPirQw6dtnKYTdZuMV9+rH1/W4ZUu3Apo3DwzCLs+VDw6KyaA3TlgYBmtwzXzaAU/e1MDMDjtTumMZos7DeeQ== dependencies: - "@abp/highlight.js" "~7.4.0" - "@abp/star-rating-svg" "~7.4.0" + "@abp/highlight.js" "~7.4.1" + "@abp/star-rating-svg" "~7.4.1" -"@abp/cms-kit@7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/cms-kit/-/cms-kit-7.4.0.tgz#a385f344d08fb95ec163d132f10dbb6e1cc6643d" - integrity sha512-TPWR5vB3p/Ki3iXgM+jk+cdGNhnyzpkziDb4hIL5pOkNFWL7npNNCjlZvppGMzuq/lo31KW5VTBoL4Qf369S6Q== +"@abp/cms-kit@7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/cms-kit/-/cms-kit-7.4.1.tgz#d04ceb79c8593dcd478df0c7293e4f31076250c6" + integrity sha512-VfInnERSq2o5nTvX6VRaFlWIx/tkz31ObRe1XRUU2tafK2W3CWgT85OXft9X0+CeSTyg3LTId9Gy8vtJ2yHm8w== dependencies: - "@abp/cms-kit.admin" "~7.4.0" - "@abp/cms-kit.public" "~7.4.0" + "@abp/cms-kit.admin" "~7.4.1" + "@abp/cms-kit.public" "~7.4.1" -"@abp/codemirror@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-7.4.0.tgz#a7b0805b6db3ed011bed044cc986bf6d48c7a969" - integrity sha512-4+c8jVKFK0O3XZTCh07AcUQCqQhKKEMdvS1KwYbMWD8ZMA9LGAL4Dj+uhkLDrYkwHvtmcQtbw7q37Xlb+uTKJA== +"@abp/codemirror@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-7.4.1.tgz#ed501eaa95ad81bc83336eaff244fc2f70e8b133" + integrity sha512-EyxMJb3puv9jA4xMfQjRe6ZfsupZgQRg7+gxNXWEM8HyTbvrCPgRgrxlbN0KM9jeSAO8GiKgrOPhGpAeZks7sw== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" codemirror "^5.65.1" -"@abp/core@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-7.4.0.tgz#8505d446a3b4d80ce476bd3352c1639c7dc486ec" - integrity sha512-yxrnw6eAEIj/CcX5jAwb4xmCsdqWaG+KRcBA8GFvqXbsK94IjqLDiJ3flo+QhGn2DXo40ISxofZop0CgSbP7Ew== +"@abp/core@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-7.4.1.tgz#1d14899ad16aac038806504eb0a5be9318cdcc0c" + integrity sha512-p0BAe2kCtgZmq8pilahmuxmye8DeRXt2KmnFRbmYE3j4d0uComFZpC72QOD1iro8bkmbsHfsHJpiVg4Sp4licw== dependencies: - "@abp/utils" "~7.4.0" + "@abp/utils" "~7.4.1" -"@abp/datatables.net-bs5@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-7.4.0.tgz#52d22e12a2420b402e03148793707d063db0088d" - integrity sha512-VvQv5w0cUpdDD9jX8aUEaLxFrc4A95JlmFnhCYIV1etL8HNOdZvmOThxorsImk31JfpyVYrY/Ze/rnWi2uhVvQ== +"@abp/datatables.net-bs5@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-7.4.1.tgz#821ee4c5db116f9810d65184855cea1fa7d47360" + integrity sha512-jpUzb65lCGYAxs/1qV3pRP8agHwIgZA9gDrudvR8S/3X3kNQWtmeKoFDZ93mhnl3aWPjWFKVrT2LeQeJw5XO5A== dependencies: - "@abp/datatables.net" "~7.4.0" + "@abp/datatables.net" "~7.4.1" datatables.net-bs5 "^1.11.4" -"@abp/datatables.net@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-7.4.0.tgz#9f12a1bb2abd05cd753b5d937d8a0350b2ff74ae" - integrity sha512-StOkMmIkcBUWzD9ToZ5J/hISRWdxbAWjwn7RuFXsoHXcY03mmD86g2oztjrWC5UFnRdpFnsfspTpbNqXFB9Vag== +"@abp/datatables.net@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-7.4.1.tgz#a4501e92e9995da0759b9ce55756fe92c4e8db59" + integrity sha512-BZOOZLH7XrGlX3aFK97cwV9+npsTzALSBo87OgwO2U6UpeFq7yAOvmC0+L9dmIUDISeORn5IFc/zTsSSIQnpHQ== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" datatables.net "^1.11.4" -"@abp/font-awesome@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-7.4.0.tgz#50059083b88706a0f71f55118472b378e4c66163" - integrity sha512-hKoPyM41HHCK6dg+8pQvjYJWzKABBCXrYQAIneMPQZUZqa4JLObKCva9TR7pu6pUp+9OVzg4fQOBM+nwpHtw4g== +"@abp/font-awesome@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-7.4.1.tgz#f6175a989aa64367830723f1dd9c607906716296" + integrity sha512-/ybaz4KROwFdG4Xv0yMTUMXOreDmKy1lKQuntqHEUnIorhXmkgcd5AQQ5AolJ4NmNdPNt1VYrRcTEmdz3nw+FA== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" "@fortawesome/fontawesome-free" "^5.15.4" -"@abp/highlight.js@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-7.4.0.tgz#5e0e0a4ac26463450a8ac4453721fe7432f63fb5" - integrity sha512-AbFgsqRHcJUhjCPpYxJaM+cTNZCMCq7A8UAHfrVFH3bWqQAodYNqO4/qt9B2s0EDrG4QCD82ksX23cmdGk4O3g== +"@abp/highlight.js@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-7.4.1.tgz#33417a919b2bb1e5d0e001cade3441ef956a29a0" + integrity sha512-pCU6zORLDzOv4GS7+SMyXYR0yUaZXwkioBnLim5+FLGYoeXn4/Jus4wAGMTiMd0kq+oimMPzHlelUPqSzx92ZQ== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" "@highlightjs/cdn-assets" "~11.4.0" -"@abp/jquery-form@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-7.4.0.tgz#7ab3be241ee09f1e2843bd1b4d0b0b86d4446e30" - integrity sha512-OmTRuZ7QK1oe2ayNLqEpRJk4Ogk0wt/hIFtJHwQkCtDuCggoR5sQz4vn1vgrD19MxGq07dow5IgjbbhHv1vtEg== +"@abp/jquery-form@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-7.4.1.tgz#67978c41cda204b4c2027d81fc66844379313fa6" + integrity sha512-JZ1D47s/kpTlfMcpD4Jrlh98bhEDsIlWJauvAYaS0EBPIU9V2zHGQ+h9GPFbSPrXe4sYxPSREcsc8KUVMhT5MQ== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-7.4.0.tgz#0c564e39c4997dd9b8af7d2023615a06d6fd9834" - integrity sha512-vFB3RKkDlDXbHlDJ64uo3jWW1IRXwiCaPf+mcB77Wpt5+0Dn7eWqjBT7KyHBrsV08ghIqY/Q4nXntFJrmLcuEA== +"@abp/jquery-validation-unobtrusive@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-7.4.1.tgz#fe5c90ade419e83505884dd50dd5988d766f177b" + integrity sha512-oHHV/ukap+vDvQ8CnEWnOrrsLkHXIcMk+SjNKe/dyK5VzOVLDpMatRFmloLs2igYVXTqDGjmDlTswTFdJUarcQ== dependencies: - "@abp/jquery-validation" "~7.4.0" + "@abp/jquery-validation" "~7.4.1" jquery-validation-unobtrusive "^3.2.12" -"@abp/jquery-validation@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-7.4.0.tgz#f2aaba8f4c023e93f0051cc9a05c6d82fa5c7254" - integrity sha512-vN4srLT5UXAKXpKHbZgySWT+N2DjRYivgtifpZHMTGFLMW14W+tfi5zhR4H4JvqJpuO6ZKNiz15zA1zwEBK0Tw== +"@abp/jquery-validation@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-7.4.1.tgz#c2c06bc28770832a9ad73eac000586faed3bdbe3" + integrity sha512-A5iFT2EWfGHXrBb/ov5f0grZ2o2xkDaYtps/FnDUwBYdIdD8E7bbJsWp6ytvZDciO0XmEqAoVOxmiij7ue/SOg== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" jquery-validation "^1.19.3" -"@abp/jquery@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-7.4.0.tgz#206891b20f250537d05d907d2b6cd682fec76496" - integrity sha512-DeYo02T6WVhdpLloSPb6ooqtpksu1HtcbbQhIP9E1P7jHSzZoNiJvoKXHiFUcj5PYiGKl9d/o89hM/apWzyreQ== +"@abp/jquery@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-7.4.1.tgz#b5e16834e6c7871ad6392612ac8e2de8617eb353" + integrity sha512-X3RcovvRYISHcsb6W3U3iVsofw6yomoiouoB1tSIy2/tvUbu9n7N/3MM0CUujFm/xib7s3z1tVxFssS9smT7sw== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" jquery "~3.6.0" -"@abp/jstree@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jstree/-/jstree-7.4.0.tgz#67fa92c9f043c422fe87bb97dcc64ae597901f91" - integrity sha512-vDC+ZdK9OCSthbmw9P8+ezNtRG1KM3+t1S/0t50La24Wo37QVJuA4IeIPbhYxvZ8Urh9ZYphUqsNXylcXDWuZQ== +"@abp/jstree@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jstree/-/jstree-7.4.1.tgz#43dea84e32c07a29e4a7d770fedf03b2e6d0b07d" + integrity sha512-yf1r5vUF2bDl3MBW8ONY1COFYsLk0NMVS3XJzwVsaT99I+BfQ6Ll3EjWGYaieKNwWqzJfG2d8cJH/6Psn+MB0w== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" jstree "^3.3.12" -"@abp/lodash@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-7.4.0.tgz#93f20abee776dbfa7aa45e2e710f2768f262fda5" - integrity sha512-h4Fnjm+VLwp1F3r57B9MrHhwyOYMo5oP285a85zzAYLkhwcDy7f1nbHKHMQ3ZTaeJVmiRnVaH+3sdUdslCRt5g== +"@abp/lodash@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-7.4.1.tgz#d0f84b7b9cbd989d59ebde594ed7acb8bc720b61" + integrity sha512-RFjZCyAPZnpvT0SJbxXzzmMYbuocSWBlezvjAVA8MiTrOXdZO4VyaTFjIuQcAdSrZhtpFGeYWxAjHshVplxMbw== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" lodash "^4.17.21" -"@abp/luxon@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-7.4.0.tgz#2ba7ff307c8f7c24d818a9c33635b86fd6810db9" - integrity sha512-ROCx7aihM+agdYy7Tkz+GiScx68KY5qwGTnj8P7QabGFChzVUic6RuBG+2Obmfonc6uT7Rq0c8JDGrsGNe/w8A== +"@abp/luxon@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-7.4.1.tgz#e0c0947d2b77f98b9cdaf7d1143025879361c3c9" + integrity sha512-k1wh8tT1529MtNC2gSXEIKdimBXBwubXeLisgpIPx6lkJo1Op6pAz2ERwFXeyktqGdYyuFcnewJIxmS7EPtWhg== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" luxon "^2.3.0" -"@abp/malihu-custom-scrollbar-plugin@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-7.4.0.tgz#aba68877481f4339e048f2ae3cfbe93197145a0a" - integrity sha512-Ntodhi4k0HFQmImYTP5SYf/WDm7aUGJLaGsfePm77HJ6DhGgalIGqtM8NiFXzo/3GmMY0XSo8Wxrs1mSCdtsOA== +"@abp/malihu-custom-scrollbar-plugin@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-7.4.1.tgz#aa7ec247197a258277549052780b38fd9e748c6c" + integrity sha512-pm/wIaiRSgGxelOf8AiL4JKFNZOQ6s2WbR6pULiP2HSNCgCpWYJ2s8fvj7VP3lAHIa98v3m8PSMSUhqaANxZ/Q== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-7.4.0.tgz#2490d9c7cdcaeca8d0ba9ebef5e7298caf0c9e09" - integrity sha512-ftsUEgO17GbVawA1GplGFzEeIM4NX004AmS6/fPI3o5isX7o1buF9q9TXdnwUuFEJKZxS4KpveRqzTL5t9k0BQ== +"@abp/moment@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-7.4.1.tgz#1c28ccb13eecdd13695edf8641ca9867b318e37d" + integrity sha512-7vRJyAK5ER9z+LV1xUSAAtWlPlhv8yhM/nHjhC+IQSP/+V1D7VLA6EKxAEexGw7wX6HY8oMOWP9HxDHMb5hKQA== dependencies: moment "^2.9.0" -"@abp/prismjs@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-7.4.0.tgz#8572f36f853c7054d77d02f3098cd844ee321ed7" - integrity sha512-y/Iy6pddQeVazEITktPot8JOPdAEOVAfmYkTBP3DIIPvoYr3kf6rwfzBUalMw5CEjWZ9BaIszDgFCk5ucNHHwQ== +"@abp/prismjs@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-7.4.1.tgz#df4387dbc2f0c77ddb9b6bd0ade9a5db29b9cee2" + integrity sha512-bI7pEKWy32aRYSb2ZziiH6Teebyd8km+1TXADy1yks9i9G5eLWe4/CSdwWpI4M+8ggM8CsdhrZ6/U+55BpXPQA== dependencies: - "@abp/clipboard" "~7.4.0" - "@abp/core" "~7.4.0" + "@abp/clipboard" "~7.4.1" + "@abp/core" "~7.4.1" prismjs "^1.26.0" -"@abp/select2@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-7.4.0.tgz#2f455cc991b7bb4df9ed426097bc2996cac12697" - integrity sha512-DwprX4MIoqMzSdh7eFg7EjGIz4ftYZub6jG9Sk3r+sxabbhpbFTxKOpXnhBWYi7L7uTQ8YDFk/5NeXO+Rm50Ww== +"@abp/select2@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-7.4.1.tgz#d7ea53cfec285a06278db362131b7510d5b73900" + integrity sha512-0S66iy7HuB74qqOSDraoF7UvXqz2PrnOKy+3EYMTMskOn4pWaq03JMR8xxEgZ8CtmsrqlE1a4wt1Yt9b3FIc0w== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" select2 "^4.0.13" -"@abp/slugify@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/slugify/-/slugify-7.4.0.tgz#7a174b6b526bbfa4f4916ad9350ea373ab2aa95c" - integrity sha512-F1XEkEJbgVv044CdYJi0msiqtu0Om+SwQuuTC3pt3x52eLFeJHhoKnoc1+kNijsh291boP3fJc53Jkkfx7nLhA== +"@abp/slugify@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/slugify/-/slugify-7.4.1.tgz#6d3d64cb84cd9d9d2e2a9846aa5ea057df631630" + integrity sha512-aXB+N7TfqdJlTWYO79UmowCohB4k02QK0BWB0XUHyoBjqMDs2+776+ETNxGdvmPg+Xql48+YT9GS8dSwA+VBkg== dependencies: slugify "^1.6.5" -"@abp/star-rating-svg@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/star-rating-svg/-/star-rating-svg-7.4.0.tgz#6c43454f60b259b4dd243ccc260d01b3cfe881a7" - integrity sha512-UJ/DgF1rK0hj4gjaGV+F9wOd2htkWNyb83RBbob23sTByLuFcibF/TJTLBErYbvZ05+KOU3+7pTq46EBw5mdtg== +"@abp/star-rating-svg@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/star-rating-svg/-/star-rating-svg-7.4.1.tgz#ac8fe734e5395fd2fb0079ca4ad1170a5e345a3c" + integrity sha512-avIu/3wTIHCkJiWBBA1Mfr70PuSu9ebnrp9igWdm3PdR6vlM8OI9Nfk+3YKuAAiHyDkL9WniQL0f50tY1ToI0Q== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" star-rating-svg "^3.5.0" -"@abp/sweetalert2@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-7.4.0.tgz#db1b4bd45cbabd61172591abc8ce223b5f607c4e" - integrity sha512-XqHPRnTASaRtbJIZYKW1KSKIJ8tynL8DuPCSMjcp4iyUlk+gnzxvbqXeNVjc2ojxj78T/42M/vITNoiiTYuKUw== +"@abp/sweetalert2@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-7.4.1.tgz#6722a40e5115cc341b7543aa0fa3b5a7ae9515b2" + integrity sha512-9jAHrYqCp5qykYfNNbqgESL6egixofVwonjZlb+lLWHAkIX+gQ2ApUNDFSXPtKUh2n9sXhSfF8SSg+BHP/bkCA== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" sweetalert2 "^11.3.6" -"@abp/timeago@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-7.4.0.tgz#245fe09370f38311a67a594c8a3c884aea59cc90" - integrity sha512-khxK6EICUaGCUM1HkACw/8rlPQNssoQvCK64bNqEHBCXgPUmTcqSj5MEGiNOYbgGyWeH2IAMtJEYPqX1g1wqSA== +"@abp/timeago@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-7.4.1.tgz#243d342ba131878ae7f892909c9cae07cf54902b" + integrity sha512-a0Vl2NFwTxzRmH5akWo8BRUxa6sK72z8OoXwUFkZOUqMWBCHK7ffNiN1/fbSgA+7HpSZdDvIthjYwBt57DxLdQ== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" timeago "^1.6.7" -"@abp/toastr@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-7.4.0.tgz#16ba0414a27c9a21bc7556a078b175445edcf608" - integrity sha512-oM4HT2m95cK/9sB4AEQAKUMSGBep6wZTgM/46+o2IvvMdMPrGR2mPu9V9wi3y817FRgY+/qQTfy5TZWyTuIpVQ== +"@abp/toastr@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-7.4.1.tgz#345545a41b6145e54477c6c376193a6dbd62bdda" + integrity sha512-OLCvPJYSrcT2spcq9nO838Q22VhJ63Kdzasz1HugdVNqgcFCCSsqaoXrJGUcf5GrZx7PNloz7uf1I3txYMeZtA== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" toastr "^2.1.4" -"@abp/tui-editor@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-7.4.0.tgz#831efd947b5a255d73365248e443d43f834c5a75" - integrity sha512-G/aCeG0lrFjEdE/YRbpFWuhuaGDFDqO5+/otIQSOxcR/bkjE1kLrdH5KDYGIa9QUaq7GbKn7yFnjrv9s5ajxzQ== +"@abp/tui-editor@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-7.4.1.tgz#4adaffcc3d62c7f2159d6acbca71e14780270277" + integrity sha512-0wiLq03+EB6or9uBbz1ZEWnOAoUjJqqFDONVEv2LtuqWlaiDwzILrSMxihTyFsLGrSAUdezfk2L83DoJT6SsVg== dependencies: - "@abp/jquery" "~7.4.0" - "@abp/prismjs" "~7.4.0" + "@abp/jquery" "~7.4.1" + "@abp/prismjs" "~7.4.1" -"@abp/uppy@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/uppy/-/uppy-7.4.0.tgz#015fc9966c2f6fa6ee77ecdf73a3e1a80cb625d3" - integrity sha512-/Hj5kCv+gRkylCvBlb3OHfI2cfLuI5+1o2C4L4HhoYmggrCuFf7L6vZGNaDa7LYOtENliLx3wAqpByv6Vd/onA== +"@abp/uppy@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/uppy/-/uppy-7.4.1.tgz#84f906e48711f28552f430239a5735184e589275" + integrity sha512-oCOxAzdYpc1QkwL2h+jBxL9xGF0aAYxcrmvzzYqHCyXC8NG/xEtLFCJvek6cCnSGS5W+v62ZuuyzM03N9ucGNg== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" uppy "^1.16.1" -"@abp/utils@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-7.4.0.tgz#b31fb6e5dff07463535479a6bb62dc733d7119c8" - integrity sha512-CcR3tfuEsVM60DYL1A0cH6BkUTsasOoBDv/b63uLCoEOq/g8ntelD/SpRSgfDXK74P9M8OE5ZFxlXWDiYuzAFg== +"@abp/utils@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-7.4.1.tgz#2ce4c4d659c2ae9bc23b71b79fa3c6e120eaecaf" + integrity sha512-eFeoOXcz9cVkDKpOfd2VWmpAojASfsqfvACZqi1UmF16OcjsFIkxmIvhh1fpbT4A+eQLbaFFLIsf6gYb//tXhg== dependencies: just-compare "^2.3.0" diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/cms-kit-admin-generate-proxy.json b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/cms-kit-admin-generate-proxy.json index 73b1e7dfd4..cbb5992ebd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/cms-kit-admin-generate-proxy.json +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/cms-kit-admin-generate-proxy.json @@ -2873,8 +2873,8 @@ "nameOnMethod": "input", "name": "Status", "jsonName": null, - "type": "Volo.CmsKit.Blogs.BlogPostStatus?", - "typeSimple": "Volo.CmsKit.Blogs.BlogPostStatus?", + "type": "System.String", + "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": null, diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Blogs/CreateModal.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Blogs/CreateModal.cshtml index 5aba4f2431..b348a63115 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Blogs/CreateModal.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Blogs/CreateModal.cshtml @@ -9,6 +9,7 @@ @using Volo.Abp.Data @using Volo.Abp.Localization @using Volo.Abp.ObjectExtending +@using Volo.CmsKit.Web @inject IStringLocalizerFactory StringLocalizerFactory @inherits CmsKitAdminPageBase @@ -25,7 +26,7 @@ - + @foreach (var propertyInfo in ObjectExtensionManager.Instance.GetProperties()) { diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Blogs/UpdateModal.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Blogs/UpdateModal.cshtml index 65eccddef5..e3385e929b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Blogs/UpdateModal.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Blogs/UpdateModal.cshtml @@ -8,6 +8,7 @@ @using Volo.Abp.Data @using Volo.Abp.Localization @using Volo.Abp.ObjectExtending +@using Volo.CmsKit.Web @inject IStringLocalizerFactory StringLocalizerFactory @inherits CmsKitAdminPageBase @@ -26,7 +27,7 @@ - + @foreach (var propertyInfo in ObjectExtensionManager.Instance.GetProperties()) { diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Create.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Create.cshtml index e674c08600..afef4bdad5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Create.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Create.cshtml @@ -59,7 +59,7 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Update.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Update.cshtml index f1bd33d212..08fc064226 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Update.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Update.cshtml @@ -64,7 +64,7 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/Volo/CmsKit/Blogs/BlogFeatureClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/Volo/CmsKit/Blogs/BlogFeatureClientProxy.Generated.cs new file mode 100644 index 0000000000..77485c92db --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/Volo/CmsKit/Blogs/BlogFeatureClientProxy.Generated.cs @@ -0,0 +1,28 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Http.Client; +using Volo.Abp.Http.Client.ClientProxying; +using Volo.Abp.Http.Modeling; +using Volo.CmsKit.Blogs; + +// ReSharper disable once CheckNamespace +namespace Volo.CmsKit.Blogs; + +[Dependency(ReplaceServices = true)] +[ExposeServices(typeof(IBlogFeatureAppService), typeof(BlogFeatureClientProxy))] +public partial class BlogFeatureClientProxy : ClientProxyBase, IBlogFeatureAppService +{ + public virtual async Task GetOrDefaultAsync(Guid blogId, string featureName) + { + return await RequestAsync(nameof(GetOrDefaultAsync), new ClientProxyRequestTypeValue + { + { typeof(Guid), blogId }, + { typeof(string), featureName } + }); + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/Volo/CmsKit/Blogs/BlogFeatureClientProxy.cs b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/Volo/CmsKit/Blogs/BlogFeatureClientProxy.cs new file mode 100644 index 0000000000..e9752dfcc9 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/Volo/CmsKit/Blogs/BlogFeatureClientProxy.cs @@ -0,0 +1,7 @@ +// This file is part of BlogFeatureClientProxy, you can customize it here +// ReSharper disable once CheckNamespace +namespace Volo.CmsKit.Blogs; + +public partial class BlogFeatureClientProxy +{ +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/Volo/CmsKit/MediaDescriptors/MediaDescriptorClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/Volo/CmsKit/MediaDescriptors/MediaDescriptorClientProxy.Generated.cs new file mode 100644 index 0000000000..67eaa76785 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/Volo/CmsKit/MediaDescriptors/MediaDescriptorClientProxy.Generated.cs @@ -0,0 +1,28 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Content; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Http.Client; +using Volo.Abp.Http.Client.ClientProxying; +using Volo.Abp.Http.Modeling; +using Volo.CmsKit.MediaDescriptors; + +// ReSharper disable once CheckNamespace +namespace Volo.CmsKit.MediaDescriptors; + +[Dependency(ReplaceServices = true)] +[ExposeServices(typeof(IMediaDescriptorAppService), typeof(MediaDescriptorClientProxy))] +public partial class MediaDescriptorClientProxy : ClientProxyBase, IMediaDescriptorAppService +{ + public virtual async Task DownloadAsync(Guid id) + { + return await RequestAsync(nameof(DownloadAsync), new ClientProxyRequestTypeValue + { + { typeof(Guid), id } + }); + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/Volo/CmsKit/MediaDescriptors/MediaDescriptorClientProxy.cs b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/Volo/CmsKit/MediaDescriptors/MediaDescriptorClientProxy.cs new file mode 100644 index 0000000000..028ccff1a2 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/Volo/CmsKit/MediaDescriptors/MediaDescriptorClientProxy.cs @@ -0,0 +1,7 @@ +// This file is part of MediaDescriptorClientProxy, you can customize it here +// ReSharper disable once CheckNamespace +namespace Volo.CmsKit.MediaDescriptors; + +public partial class MediaDescriptorClientProxy +{ +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/cms-kit-common-generate-proxy.json b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/cms-kit-common-generate-proxy.json index 6b7b45220a..07e4bf762c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/cms-kit-common-generate-proxy.json +++ b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/cms-kit-common-generate-proxy.json @@ -8,11 +8,32 @@ "controllerName": "MediaDescriptor", "controllerGroupName": "MediaDescriptor", "isRemoteService": true, + "isIntegrationService": false, "apiVersion": null, "type": "Volo.CmsKit.MediaDescriptors.MediaDescriptorController", "interfaces": [ { - "type": "Volo.CmsKit.MediaDescriptors.IMediaDescriptorAppService" + "type": "Volo.CmsKit.MediaDescriptors.IMediaDescriptorAppService", + "name": "IMediaDescriptorAppService", + "methods": [ + { + "name": "DownloadAsync", + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "Volo.Abp.Content.RemoteStreamContent", + "typeSimple": "Volo.Abp.Content.RemoteStreamContent" + } + } + ] } ], "actions": { @@ -59,11 +80,40 @@ "controllerName": "BlogFeature", "controllerGroupName": "BlogFeature", "isRemoteService": true, + "isIntegrationService": false, "apiVersion": null, "type": "Volo.CmsKit.Blogs.BlogFeatureController", "interfaces": [ { - "type": "Volo.CmsKit.Blogs.IBlogFeatureAppService" + "type": "Volo.CmsKit.Blogs.IBlogFeatureAppService", + "name": "IBlogFeatureAppService", + "methods": [ + { + "name": "GetOrDefaultAsync", + "parametersOnMethod": [ + { + "name": "blogId", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "featureName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "Volo.CmsKit.Blogs.BlogFeatureDto", + "typeSimple": "Volo.CmsKit.Blogs.BlogFeatureDto" + } + } + ] } ], "actions": { diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/CmsBlogsWebConsts.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/CmsBlogsWebConsts.cs new file mode 100644 index 0000000000..7793856414 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/CmsBlogsWebConsts.cs @@ -0,0 +1,6 @@ +namespace Volo.CmsKit.Web; + +public static class CmsBlogsWebConsts +{ + public static string BlogsRoutePrefix { get; set; } = "blogs"; +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ar.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ar.json index b26a1fe2a8..9ef0948c80 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ar.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ar.json @@ -77,6 +77,7 @@ "PageId": "صفحة", "Pages": "الصفحات", "PageSlugInformation": "سبيكة تستخدم على url. سيكون عنوان url الخاص بك هو \"/{slug}}\".", + "BlogSlugInformation": "سبيكة تستخدم على url. سيكون عنوان url الخاص بك هو \"/{0}/{slug}}\".", "Permission:BlogManagement": "إدارة المدونة", "Permission:BlogManagement.Create": "إنشاء", "Permission:BlogManagement.Delete": "حذف", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/cs.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/cs.json index 8344a53ee2..383ba53bfc 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/cs.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/cs.json @@ -77,6 +77,7 @@ "PageId": "Strana", "Pages": "stránky", "PageSlugInformation": "Na adrese URL je použit Slug. Vaše adresa URL bude '/{{slug}}'.", + "BlogSlugInformation": "Na adrese URL je použit Slug. Vaše adresa URL bude '/{0}/{{slug}}'.", "Permission:BlogManagement": "Správa blogu", "Permission:BlogManagement.Create": "Vytvořit", "Permission:BlogManagement.Delete": "Vymazat", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/de-DE.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/de-DE.json index 3a4b0a5569..8a34408bab 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/de-DE.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/de-DE.json @@ -77,6 +77,7 @@ "PageId": "Buchseite", "Pages": "Seiten", "PageSlugInformation": "Slug wird auf URL verwendet. Ihre URL lautet '/{{slug}}'.", + "BlogSlugInformation": "Slug wird auf URL verwendet. Ihre URL lautet '/{0}/{{slug}}'.", "Permission:BlogManagement": "Blog-Verwaltung", "Permission:BlogManagement.Create": "Schaffen", "Permission:BlogManagement.Delete": "Löschen", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/el.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/el.json index c686723d33..7155c127a3 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/el.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/el.json @@ -77,6 +77,7 @@ "PageId": "Σελίδα", "Pages": "Σελίδες", "PageSlugInformation": "Το Slug χρησιμοποιείται στο url. Το url σας θα είναι '/{{slug}}'.", + "BlogSlugInformation": "Το Slug χρησιμοποιείται στο url. Το url σας θα είναι '/{0}/{{slug}}'.", "Permission:BlogManagement": "Διαχείριση ιστολογίου", "Permission:BlogManagement.Create": "Δημιουργώ", "Permission:BlogManagement.Delete": "Διαγράφω", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index e879b7e339..0169f42b7e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json @@ -76,6 +76,7 @@ "PageId": "Page", "Pages": "Pages", "PageSlugInformation": "Slug is used on url. Your url will be '/{{slug}}'.", + "BlogSlugInformation": "Slug is used on url. Your url will be '/{0}/{{slug}}'.", "Permission:BlogManagement": "Blog Management", "Permission:BlogManagement.Create": "Create", "Permission:BlogManagement.Delete": "Delete", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/es.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/es.json index ea9b318b93..fb8e963115 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/es.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/es.json @@ -77,6 +77,7 @@ "PageId": "Página", "Pages": "Paginas", "PageSlugInformation": "Slug se usa en la URL. Su URL será '/{{slug}}'.", + "BlogSlugInformation": "Slug se usa en la URL. Su URL será '/{0}/{{slug}}'.", "Permission:BlogManagement": "Gestión de blogs", "Permission:BlogManagement.Create": "Crear", "Permission:BlogManagement.Delete": "Borrar", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fi.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fi.json index 1ead360d61..54a0ea97a4 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fi.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fi.json @@ -76,6 +76,7 @@ "PageId": "Sivu", "Pages": "Sivut", "PageSlugInformation": "Etanaa käytetään URL-osoitteessa. URL-osoitteesi on '/{{slug}}'.", + "BlogSlugInformation": "Etanaa käytetään URL-osoitteessa. URL-osoitteesi on '/{0}/{{slug}}'.", "Permission:BlogManagement": "Blogin hallinta", "Permission:BlogManagement.Create": "Luonti", "Permission:BlogManagement.Delete": "Poisto", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fr.json index 445c7b3578..bbd4f67955 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fr.json @@ -77,6 +77,7 @@ "PageId": "Page", "Pages": "Pages", "PageSlugInformation": "Slug est utilisé sur l'url. Votre URL sera '/{{slug}}'.", + "BlogSlugInformation": "Slug est utilisé sur l'url. Votre URL sera '/{0}/{{slug}}'.", "Permission:BlogManagement": "Gestion de blog", "Permission:BlogManagement.Create": "Créer", "Permission:BlogManagement.Delete": "Effacer", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hi.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hi.json index fffe151260..b251ac8c18 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hi.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hi.json @@ -77,6 +77,7 @@ "PageId": "पृष्ठ", "Pages": "पृष्ठों", "PageSlugInformation": "स्लग का उपयोग url पर किया जाता है। आपका url '/{{slug}}' होगा।", + "BlogSlugInformation": "स्लग का उपयोग url पर किया जाता है। आपका url '/{0}/{{slug}}' होगा।", "Permission:BlogManagement": "ब्लॉग प्रबंधन", "Permission:BlogManagement.Create": "सृजन करना", "Permission:BlogManagement.Delete": "हटाएं", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hu.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hu.json index 4c1047e178..43afc9575c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hu.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hu.json @@ -76,6 +76,7 @@ "PageId": "oldal", "Pages": "Oldalak", "PageSlugInformation": "A Slug az url-en használatos. Az Ön URL-je a következő lesz: '/{{slug}}'.", + "BlogSlugInformation": "A Slug az url-en használatos. Az Ön URL-je a következő lesz: '/{0}/{{slug}}'.", "Permission:BlogManagement": "Blogkezelés", "Permission:BlogManagement.Create": "Teremt", "Permission:BlogManagement.Delete": "Töröl", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/is.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/is.json index 43c98adcc2..8b7bebc1ea 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/is.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/is.json @@ -76,7 +76,8 @@ "PageDeletionConfirmationMessage": "Ertu viss um að eyða þessari síðu?", "PageId": "Síða", "Pages": "Síður", - "PageSlugInformation": "Snigill er notaður á slóð. Slóðin þín verður '/síður/{{slug}}'.", + "PageSlugInformation": "Snigill er notaður á slóð. Slóðin þín verður '/{{slug}}'.", + "BlogSlugInformation": "Snigill er notaður á slóð. Slóðin þín verður '/{0}/{{slug}}'.", "Permission:BlogManagement": "Bloggstjórnun", "Permission:BlogManagement.Create": "Búa til", "Permission:BlogManagement.Delete": "Eyða", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/it.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/it.json index bddf4affc2..3575754a8c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/it.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/it.json @@ -77,6 +77,7 @@ "PageId": "Pagina", "Pages": "Pagine", "PageSlugInformation": "Lo slug viene utilizzato sull'URL. Il tuo URL sarà '/{{slug}}'.", + "BlogSlugInformation": "Lo slug viene utilizzato sull'URL. Il tuo URL sarà '/{0}/{{slug}}'.", "Permission:BlogManagement": "Gestione del blog", "Permission:BlogManagement.Create": "Crea", "Permission:BlogManagement.Delete": "Elimina", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/nl.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/nl.json index d06ba78bf4..ef370edf26 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/nl.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/nl.json @@ -77,6 +77,7 @@ "PageId": "Bladzijde", "Pages": "Pagina's", "PageSlugInformation": "Slug wordt gebruikt voor de url. Uw url wordt '/{{slug}}'.", + "BlogSlugInformation": "Slug wordt gebruikt voor de url. Uw url wordt '/{0}/{{slug}}'.", "Permission:BlogManagement": "Blogbeheer", "Permission:BlogManagement.Create": "Toevoegen", "Permission:BlogManagement.Delete": "Verwijderen", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/pl-PL.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/pl-PL.json index a775020f7a..0bdef5d26b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/pl-PL.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/pl-PL.json @@ -77,6 +77,7 @@ "PageId": "Strona", "Pages": "Strony", "PageSlugInformation": "Slug jest używany na adresie URL. Twój adres URL to „/{{slug}}”.", + "BlogSlugInformation": "Slug jest używany na adresie URL. Twój adres URL to „/{0}/{{slug}}”.", "Permission:BlogManagement": "Zarządzanie blogiem", "Permission:BlogManagement.Create": "Tworzyć", "Permission:BlogManagement.Delete": "Kasować", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/pt-BR.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/pt-BR.json index c306e6f58c..9510e2a67d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/pt-BR.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/pt-BR.json @@ -77,6 +77,7 @@ "PageId": "Página", "Pages": "Páginas", "PageSlugInformation": "Slug é usado na url. Sua url será '/{{slug}}'.", + "BlogSlugInformation": "Slug é usado na url. Sua url será '/{0}/{{slug}}'.", "Permission:BlogManagement": "Gerenciamento de blogs", "Permission:BlogManagement.Create": "Criar", "Permission:BlogManagement.Delete": "Excluir", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ro-RO.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ro-RO.json index 7712530ee7..21b9ac5a24 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ro-RO.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ro-RO.json @@ -77,6 +77,7 @@ "PageId": "Pagina", "Pages": "Pagini", "PageSlugInformation": "Slug este folosit pe url. Url-ul dumneavoastră va fi '/{{slug}}'.", + "BlogSlugInformation": "Slug este folosit pe url. Url-ul dumneavoastră va fi '/{0}/{{slug}}'.", "Permission:BlogManagement": "Administrare Blog", "Permission:BlogManagement.Create": "Creează", "Permission:BlogManagement.Delete": "Şterge", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ru.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ru.json index e30641ce50..a1a809f9fa 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ru.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ru.json @@ -77,6 +77,7 @@ "PageId": "Страница", "Pages": "Страницы", "PageSlugInformation": "Слаг используется для URL. Ваш URL-адрес будет '/{{slug}}'.", + "BlogSlugInformation": "Слаг используется для URL. Ваш URL-адрес будет '/{0}/{{slug}}'.", "Permission:BlogManagement": "Управление блогом", "Permission:BlogManagement.Create": "Создавать", "Permission:BlogManagement.Delete": "Удалить", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sk.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sk.json index 7fc0e7c254..af320c8a19 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sk.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sk.json @@ -77,6 +77,7 @@ "PageId": "Stránka", "Pages": "Stránky", "PageSlugInformation": "Slug sa používa v URL. Vaša URL bude '/{{slug}}'.", + "BlogSlugInformation": "Slug sa používa v URL. Vaša URL bude '/{0}/{{slug}}'.", "Permission:BlogManagement": "Správa blogov", "Permission:BlogManagement.Create": "Vytvoriť", "Permission:BlogManagement.Delete": "Zmazať", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sl.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sl.json index 0e0d12e2e6..972b7da430 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sl.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sl.json @@ -77,6 +77,7 @@ "PageId": "stran", "Pages": "strani", "PageSlugInformation": "Slug se uporablja na url-ju. Vaš url bo '/{{slug}}'.", + "BlogSlugInformation": "Slug se uporablja na url-ju. Vaš url bo '/{0}/{{slug}}'.", "Permission:BlogManagement": "Upravljanje blogov", "Permission:BlogManagement.Create": "Ustvari", "Permission:BlogManagement.Delete": "Izbriši", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json index c84cdc6312..78c5f9341e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json @@ -76,6 +76,7 @@ "PageId": "Sayfa", "Pages": "Sayfalar", "PageSlugInformation": "Etiket URL'de kullanılır. Url şöyle görünür: '/{{slug}}'.", + "BlogSlugInformation": "Etiket URL'de kullanılır. Url şöyle görünür: '/{0}/{{slug}}'.", "Permission:BlogManagement": "Blog Yönetimi", "Permission:BlogManagement.Create": "Oluşturma", "Permission:BlogManagement.Delete": "Silme", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/vi.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/vi.json index 3e0f36578d..09ae8f3a9c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/vi.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/vi.json @@ -77,6 +77,7 @@ "PageId": "Trang", "Pages": "Các trang", "PageSlugInformation": "Slug được sử dụng trên url. Url của bạn sẽ là '/{{slug}}'.", + "BlogSlugInformation": "Slug được sử dụng trên url. Url của bạn sẽ là '/{0}/{{slug}}'.", "Permission:BlogManagement": "Quản lý blog", "Permission:BlogManagement.Create": "Tạo ra", "Permission:BlogManagement.Delete": "Xóa bỏ", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hans.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hans.json index 7e9089d426..516c57eefd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hans.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hans.json @@ -76,6 +76,7 @@ "PageId": "页", "Pages": "页面", "PageSlugInformation": "Slug用于url. 你的url将是 '/{{slug}}'.", + "BlogSlugInformation": "Slug用于url. 你的url将是 '/{0}/{{slug}}'.", "Permission:BlogManagement": "博客管理", "Permission:BlogManagement.Create": "创建", "Permission:BlogManagement.Delete": "删除", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hant.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hant.json index e6dd053052..5d3d2621fb 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hant.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hant.json @@ -77,6 +77,7 @@ "PageId": "頁", "Pages": "頁面", "PageSlugInformation": "Slug用於網址. 你的網址將是 '/{{slug}}'.", + "BlogSlugInformation": "Slug用於網址. 你的網址將是 '/{0}/{{slug}}'.", "Permission:BlogManagement": "部落格管理", "Permission:BlogManagement.Create": "創建", "Permission:BlogManagement.Delete": "刪除", diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs index dd21e2c903..c679420902 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs @@ -17,5 +17,8 @@ public interface IBlogPostPublicAppService : IApplicationService Task> GetAuthorsHasBlogPostsAsync(BlogPostFilteredPagedAndSortedResultRequestDto input); Task GetAuthorHasBlogPostAsync(Guid id); + Task DeleteAsync(Guid id); + + Task GetTagNameAsync([NotNull] Guid tagId); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs index cd346f9a21..4a9875990d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs @@ -12,6 +12,7 @@ using Volo.CmsKit.Blogs; using Volo.CmsKit.Contents; using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; +using Volo.CmsKit.Tags; using Volo.CmsKit.Users; namespace Volo.CmsKit.Public.Blogs; @@ -24,12 +25,16 @@ public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPub protected IBlogPostRepository BlogPostRepository { get; } + protected ITagRepository TagRepository { get; } + public BlogPostPublicAppService( IBlogRepository blogRepository, - IBlogPostRepository blogPostRepository) + IBlogPostRepository blogPostRepository, + ITagRepository tagRepository) { BlogRepository = blogRepository; BlogPostRepository = blogPostRepository; + TagRepository = tagRepository; } public virtual async Task GetAsync( @@ -85,4 +90,11 @@ public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPub await BlogPostRepository.DeleteAsync(id); } + + public async Task GetTagNameAsync([NotNull] Guid tagId) + { + var tag = await TagRepository.GetAsync(tagId); + + return tag.Name; + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Blogs/BlogPostPublicClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Blogs/BlogPostPublicClientProxy.Generated.cs index f269125676..d185f22a27 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Blogs/BlogPostPublicClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Blogs/BlogPostPublicClientProxy.Generated.cs @@ -60,4 +60,12 @@ public partial class BlogPostPublicClientProxy : ClientProxyBase GetTagNameAsync(Guid tagId) + { + return await RequestAsync(nameof(GetTagNameAsync), new ClientProxyRequestTypeValue + { + { typeof(Guid), tagId } + }); + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/cms-kit-generate-proxy.json b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/cms-kit-generate-proxy.json index 477938b6de..31e3fb52f8 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/cms-kit-generate-proxy.json +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/cms-kit-generate-proxy.json @@ -1512,6 +1512,23 @@ "type": "System.Void", "typeSimple": "System.Void" } + }, + { + "name": "GetTagNameAsync", + "parametersOnMethod": [ + { + "name": "tagId", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "System.String", + "typeSimple": "string" + } } ] } @@ -1825,6 +1842,55 @@ }, "allowAnonymous": null, "implementFrom": "Volo.CmsKit.Public.Blogs.IBlogPostPublicAppService" + }, + "GetTagNameAsyncByTagId": { + "uniqueName": "GetTagNameAsyncByTagId", + "name": "GetTagNameAsync", + "httpMethod": "GET", + "url": "api/cms-kit-public/blog-posts/tags/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "tagId", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "tagId", + "name": "tagId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": null, + "typeSimple": null, + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.String", + "typeSimple": "string" + }, + "allowAnonymous": null, + "implementFrom": "Volo.CmsKit.Public.Blogs.IBlogPostPublicAppService" } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs index 4d2a336fca..d5b5768d34 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs @@ -1,5 +1,6 @@ using System; using System.Threading.Tasks; +using JetBrains.Annotations; using Microsoft.AspNetCore.Mvc; using Volo.Abp; using Volo.Abp.Application.Dtos; @@ -60,4 +61,11 @@ public class BlogPostPublicController : CmsKitPublicControllerBase, IBlogPostPub { return BlogPostPublicAppService.DeleteAsync(id); } + + [HttpGet] + [Route("tags/{id}")] + public Task GetTagNameAsync([NotNull] Guid tagId) + { + return BlogPostPublicAppService.GetTagNameAsync(tagId); + } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs index 93a61efe2f..c7078acd98 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs @@ -1,4 +1,5 @@ -using Microsoft.AspNetCore.Mvc.RazorPages; +using System; +using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.AspNetCore.Routing; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AspNetCore.Mvc.Localization; @@ -91,8 +92,13 @@ public class CmsKitPublicWebModule : AbpModule { Configure(options => { - options.Conventions.AddPageRoute("/Public/CmsKit/Blogs/Index", @"/blogs/{blogSlug:minlength(1)}"); - options.Conventions.AddPageRoute("/Public/CmsKit/Blogs/BlogPost", @"/blogs/{blogSlug}/{blogPostSlug:minlength(1)}"); + options.Conventions.AddPageRoute( + "/Public/CmsKit/Blogs/Index", + CmsBlogsWebConsts.BlogsRoutePrefix.EnsureStartsWith('/') + @"/{blogSlug:minlength(1)}"); + + options.Conventions.AddPageRoute( + "/Public/CmsKit/Blogs/BlogPost", + CmsBlogsWebConsts.BlogsRoutePrefix.EnsureStartsWith('/') + @"/{blogSlug}/{blogPostSlug:minlength(1)}"); }); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/CommentingViewComponent.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/CommentingViewComponent.cs index 5810103ea9..32503ceab7 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/CommentingViewComponent.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/CommentingViewComponent.cs @@ -60,6 +60,7 @@ public class CommentingViewComponent : AbpViewComponent public virtual async Task InvokeAsync( string entityType, string entityId, + bool isReadOnly, IEnumerable referralLinks = null) { referralLinks ??= Enumerable.Empty(); @@ -74,7 +75,8 @@ public class CommentingViewComponent : AbpViewComponent EntityType = entityType, ReferralLinks = referralLinks, LoginUrl = loginUrl, - Comments = comments.OrderByDescending(i => i.CreationTime).ToList() + IsReadOnly = isReadOnly, + Comments = comments.OrderByDescending(i => i.CreationTime).ToList(), }; await ConvertMarkdownTextsToHtml(viewModel); @@ -144,6 +146,8 @@ public class CommentingViewComponent : AbpViewComponent public string Captcha { get; set; } public string CaptchaImageBase64 { get; set; } + + public bool IsReadOnly { get; set; } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/Default.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/Default.cshtml index c1171d8ba6..1b86ade0a8 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/Default.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/Default.cshtml @@ -20,16 +20,16 @@ @ @((string.IsNullOrWhiteSpace(author.Name) - ? author.UserName - : author.Name + " " + author.Surname).Trim()) + ? author.UserName + : author.Name + " " + author.Surname).Trim()) @creationTime.ToString() ; } @{ Func GetCommentArea(Guid? repliedCommentId, bool cancelButton = false) => @
+ data-reply-id="@(repliedCommentId?.ToString() ?? "")" + style="@(string.IsNullOrEmpty(repliedCommentId?.ToString() ?? "") ? "" : "display:none")"> @@ -44,31 +44,31 @@
@if (CmsKitCommentOptions.Value.IsRecaptchaEnabled) - { -
- -
-
- -
-
- -
- + { +
+ +
+
+ +
+
+
+
- } +
+ }
@L["Send"] @if (cancelButton) - { - - @L["Cancel"] - - } + { + + @L["Cancel"] + + }
@@ -87,32 +87,32 @@ Func GetCommentActionArea(Guid id, Guid authorId, bool isReply) => @
@if (!isReply) - { - @if (CurrentUser.IsAuthenticated) - { - - @L["Reply"] - + { + @if (CurrentUser.IsAuthenticated) + { + + @L["Reply"] + + + + @L["Delete"] + + } + else + { + + @L["LoginToReply"] + + } + } + - - @L["Delete"] - - } - else - { - - @L["LoginToReply"] - - } - } - - @if (authorId == CurrentUser.Id) - { - - @L["Edit"] - - } + { + + @L["Edit"] + + }
; } @{ @@ -129,26 +129,26 @@
- @L["MarkdownSupported"] + @L["MarkdownSupported"]
@if (CmsKitCommentOptions.Value.IsRecaptchaEnabled) - { - var output = await Model.GenerateCaptchaAsync(); + { + var output = await Model.GenerateCaptchaAsync(); -
- -
-
- -
-
- -
- +
+ +
+
+ +
+
+
+
- } +
+ }
@L["Update"] @@ -184,22 +184,25 @@ @GetCommentContentArea(comment.Id, comment.Text).Invoke(null) -
-
-
- @GetCommentActionArea(comment.Id, comment.Author.Id, false).Invoke(null) + @if (!Model.Input.IsReadOnly) + { +
+
+
+ @GetCommentActionArea(comment.Id, comment.Author.Id, false).Invoke(null) +
-
-
-
- @if (cmsKitUiOptions.Value.CommentsOptions.IsReactionsEnabled && GlobalFeatureManager.Instance.IsEnabled()) - { - @await Component.InvokeAsync(typeof(ReactionSelectionViewComponent), new { entityType = "comment", entityId = comment.Id.ToString() }) - } +
+
+ @if (cmsKitUiOptions.Value.CommentsOptions.IsReactionsEnabled && GlobalFeatureManager.Instance.IsEnabled()) + { + @await Component.InvokeAsync(typeof(ReactionSelectionViewComponent), new { entityType = "comment", entityId = comment.Id.ToString() }) + } +
-
- @GetEditArea(comment.Id, Model.Input.RawCommentTexts[comment.Id], comment.ConcurrencyStamp).Invoke(null) + @GetEditArea(comment.Id, Model.Input.RawCommentTexts[comment.Id], comment.ConcurrencyStamp).Invoke(null) + } @if (comment.Replies.Any()) { @@ -213,23 +216,26 @@ @GetCommentContentArea(reply.Id, reply.Text).Invoke(null) -
-
-
- @GetCommentActionArea(reply.Id, reply.Author.Id, true).Invoke(null) + @if (!Model.Input.IsReadOnly) + { +
+
+
+ @GetCommentActionArea(reply.Id, reply.Author.Id, true).Invoke(null) +
-
-
-
- @if (cmsKitUiOptions.Value.CommentsOptions.IsReactionsEnabled && GlobalFeatureManager.Instance.IsEnabled()) - { - @await Component.InvokeAsync(typeof(ReactionSelectionViewComponent), new { entityType = "comment", entityId = reply.Id.ToString() }) - } +
+
+ @if (cmsKitUiOptions.Value.CommentsOptions.IsReactionsEnabled && GlobalFeatureManager.Instance.IsEnabled()) + { + @await Component.InvokeAsync(typeof(ReactionSelectionViewComponent), new { entityType = "comment", entityId = reply.Id.ToString() }) + } +
-
- @GetEditArea(reply.Id, Model.Input.RawCommentTexts[reply.Id], reply.ConcurrencyStamp).Invoke(null) + @GetEditArea(reply.Id, Model.Input.RawCommentTexts[reply.Id], reply.ConcurrencyStamp).Invoke(null) + }
} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Rating/Default.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Rating/Default.cshtml index 9b7f6e24f7..95879128a7 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Rating/Default.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Rating/Default.cshtml @@ -6,58 +6,59 @@ @inject IHtmlLocalizer L
-
-
- @if (CurrentUser.IsAuthenticated) +
+
+ + @if (CurrentUser.IsAuthenticated) + { + @if (!Model.IsReadOnly && Model.CurrentRating != null) { - @if (Model.CurrentRating != null) - { - - @L["Undo"] - - } - if (Model.Ratings != null) - { - - - + + @L["Undo"] + + } + if (Model.Ratings != null) + { + + + - "> + + }
-
\ No newline at end of file +
+
\ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Rating/RatingViewComponent.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Rating/RatingViewComponent.cs index b928f7e2af..7ab1df47b8 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Rating/RatingViewComponent.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Rating/RatingViewComponent.cs @@ -31,7 +31,7 @@ public class RatingViewComponent : AbpViewComponent CurrentUser = currentUser; } - public virtual async Task InvokeAsync(string entityType, string entityId) + public virtual async Task InvokeAsync(string entityType, string entityId, bool isReadOnly = false) { var ratings = await RatingPublicAppService.GetGroupedStarCountsAsync(entityType, entityId); var totalRating = ratings.Sum(x => x.Count); @@ -52,7 +52,8 @@ public class RatingViewComponent : AbpViewComponent LoginUrl = loginUrl, Ratings = ratings, CurrentRating = currentUserRating, - TotalRating = totalRating + TotalRating = totalRating, + IsReadOnly = isReadOnly }; return View("~/Pages/CmsKit/Shared/Components/Rating/Default.cshtml", viewModel); @@ -72,4 +73,6 @@ public class RatingViewModel public short? CurrentRating { get; set; } public int TotalRating { get; set; } + + public bool IsReadOnly { get; set; } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Rating/default.js b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Rating/default.js index 22531b47f3..69bb1bac4f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Rating/default.js +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Rating/default.js @@ -15,6 +15,7 @@ function registerCreateOfNewRating() { $widget.find(".my-rating").each(function () { var authenticated = $(this).attr("data-authenticated"); + var readonly = $(this).attr("data-readonly"); $(this).starRating({ initialRating: 0, @@ -26,7 +27,7 @@ strokeWidth: 0, disableAfterRate: true, useFullStars: true, - readOnly: authenticated === "True", + readOnly: authenticated === "True" || readonly === "True", onHover: function (currentIndex, currentRating, $el) { $widget.find(".live-rating").text(currentIndex); }, diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Tags/Default.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Tags/Default.cshtml index e9567b8b3e..baa68ff0f4 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Tags/Default.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Tags/Default.cshtml @@ -10,14 +10,14 @@ { if (Model.UrlFormat.IsNullOrWhiteSpace()) { - + @tag.Name } else { var formattedUrl = Model.UrlFormat.Replace("{TagId}", tag.Id.ToString()).Replace("{TagName}", tag.Name); - @tag.Name + @tag.Name } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml index 319d6ad2f2..da11b0e9a7 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml @@ -10,6 +10,7 @@ @using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Tags @using Volo.Abp.AspNetCore.Mvc.UI.Packages.HighlightJs @using Volo.CmsKit.Contents +@using Volo.CmsKit.Web @using Volo.CmsKit.Web.Pages.CmsKit.Components.Contents @inherits CmsKitPublicPageBase @@ -62,7 +63,7 @@

@Model.ViewModel.Title

- + @@@Model.ViewModel.Author?.UserName @Model.ViewModel.CreationTime @@ -89,7 +90,7 @@ { entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, entityId = Model.ViewModel.Id.ToString(), - urlFormat = $"/blogs/{Model.BlogSlug}?tagId={{TagId}}" + urlFormat = $"/{CmsBlogsWebConsts.BlogsRoutePrefix}/{Model.BlogSlug}?tagId={{TagId}}" }) } } @@ -133,9 +134,11 @@ { + +


} @if (isScrollIndexEnabled) { diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml index 060f0c5c95..6f2a82e220 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml @@ -2,18 +2,19 @@ @using Volo.CmsKit.Public.Web.Pages @using Volo.CmsKit.Public.Web.Pages.Public.CmsKit.Blogs +@using Volo.CmsKit.Web @inherits CmsKitPublicPageBase @model IndexModel -@section styles{ - +@section styles { + } @section scripts { - + } @@ -21,29 +22,43 @@ const string dummyImageSource = "https://dummyimage.com/320x180/a3a3a3/fff.png"; } - - -
- +@if (Model.AuthorId.HasValue) +{ + + +
+ - + + @if (Model.SelectedAuthor != null) + { + + } + +
+
+
+
+} + +@if (Model.TagId.HasValue) +{ +

@L["Tags"]

+ @Model.FilteredTagName + + +
+} - @if(Model.SelectedAuthor != null) - { - - } - -
-
-
@foreach (var blog in Model.Blogs.Items) { @@ -51,11 +66,11 @@ @if (blog.CoverImageMediaId != null) { - + } else { - + }
@blog.Title
@@ -65,7 +80,7 @@

@blog.ShortDescription

@@ -76,6 +91,6 @@
- + diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs index 7feab76946..e47dd40816 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs @@ -31,6 +31,8 @@ public class IndexModel : CmsKitPublicPageModelBase public CmsUserDto SelectedAuthor { get; protected set; } + public string FilteredTagName { get; protected set; } + protected IBlogPostPublicAppService BlogPostPublicAppService { get; } public IndexModel(IBlogPostPublicAppService blogPostPublicAppService) @@ -54,7 +56,12 @@ public class IndexModel : CmsKitPublicPageModelBase { SelectedAuthor = await BlogPostPublicAppService.GetAuthorHasBlogPostAsync(AuthorId.Value); } - + + if (TagId is not null) + { + FilteredTagName = await BlogPostPublicAppService.GetTagNameAsync(TagId.Value); + } + return Page(); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/bootstrap-toc.css b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/bootstrap-toc.css index b15e18ee85..8599b9146d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/bootstrap-toc.css +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/bootstrap-toc.css @@ -20,15 +20,17 @@ nav[data-toggle='toc'] .nav > li > a:focus { text-decoration: none; background-color: transparent; border-left: 1px solid #563d7c; + border-radius: 0; } nav[data-toggle='toc'] .nav-link.active, nav[data-toggle='toc'] .nav-link.active:hover, nav[data-toggle='toc'] .nav-link.active:focus { - padding-left: 18px; + padding-left: 8px; font-weight: bold; color: #563d7c; background-color: transparent; border-left: 2px solid #563d7c; + border-radius: 0; } /* Nav: second level (shown on .active) */ @@ -40,18 +42,16 @@ nav[data-toggle='toc'] .nav-link + ul { nav[data-toggle='toc'] .nav .nav > li > a { padding-top: 1px; padding-bottom: 1px; - padding-left: 30px; + padding-left: 8px; + margin-left: 8px; font-size: 12px; font-weight: normal; } -nav[data-toggle='toc'] .nav .nav > li > a:hover, -nav[data-toggle='toc'] .nav .nav > li > a:focus { - padding-left: 29px; -} + nav[data-toggle='toc'] .nav .nav > li > .active, nav[data-toggle='toc'] .nav .nav > li > .active:hover, nav[data-toggle='toc'] .nav .nav > li > .active:focus { - padding-left: 28px; + padding-left: 8px; font-weight: 500; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Security/Captcha/SimpleMathsCaptchaGenerator.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Security/Captcha/SimpleMathsCaptchaGenerator.cs index f3e1a46403..f8f1c3d071 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Security/Captcha/SimpleMathsCaptchaGenerator.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Security/Captcha/SimpleMathsCaptchaGenerator.cs @@ -116,9 +116,11 @@ public class SimpleMathsCaptchaGenerator : ITransientDependency var random = new Random(); var startWith = (byte)random.Next(5, 10); image.Mutate(ctx => ctx.BackgroundColor(Color.Transparent)); + var fontFamily = SystemFonts.Families .FirstOrDefault(x => x.GetAvailableStyles().Contains(options.FontStyle), SystemFonts.Families.First()) .Name; + var font = SystemFonts.CreateFont(fontFamily, options.FontSize, options.FontStyle); foreach (var character in stringText) @@ -127,7 +129,10 @@ public class SimpleMathsCaptchaGenerator : ITransientDependency var color = options.TextColor[random.Next(0, options.TextColor.Length)]; var location = new PointF(startWith + position, random.Next(6, 13)); image.Mutate(ctx => ctx.DrawText(text, font, color, location)); - position += TextMeasurer.MeasureSize(character.ToString(), new TextOptions(font)).Width; + position += TextMeasurer.MeasureSize(character.ToString(), new TextOptions (font) + { + Origin = location + }).Width; } //add rotation @@ -161,10 +166,11 @@ public class SimpleMathsCaptchaGenerator : ITransientDependency var x0 = random.Next(0, img.Width - 1); var y0 = random.Next(0, img.Height - 1); img.Mutate( - ctx => ctx - .DrawLine(options.NoiseRateColor[random.Next(0, options.NoiseRateColor.Length)], - RandomTextGenerator.GenerateNextFloat(0.5, 1.5), new (x0, y0), new (x0 + 0.01f, y0 + 0.01f)) - ); + ctx => ctx + .DrawLine(options.NoiseRateColor[random.Next(0, options.NoiseRateColor.Length)], + RandomTextGenerator.GenerateNextFloat(0.5, 1.5), + new PointF[] { new Vector2(x0, y0), new Vector2(x0 + 0.005f, y0 + 0.005f) }) + ); }); img.Mutate(x => diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Volo.CmsKit.Public.Web.csproj b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Volo.CmsKit.Public.Web.csproj index 81d3a66bea..81177e2462 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Volo.CmsKit.Public.Web.csproj +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Volo.CmsKit.Public.Web.csproj @@ -14,7 +14,7 @@ - + diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostPublicAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostPublicAppService_Tests.cs index 677e1ac086..edbbe3e8de 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostPublicAppService_Tests.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostPublicAppService_Tests.cs @@ -179,4 +179,19 @@ public class BlogPostPublicAppService_Tests : CmsKitApplicationTestBase allItemsFromRepository.Any(x => x.Id == draftBlogPost2.Id).ShouldBeTrue(); allItemsFromRepository.Any(x => x.Id == publishedBlogPost1.Id).ShouldBeTrue(); } + + [Fact] + public async Task GetTagNameAsync_ShouldReturnCorrectName() + { + var tagName = await blogPostAppService.GetTagNameAsync(cmsKitTestData.TagId_1); + + tagName.ShouldBe(cmsKitTestData.TagName_1); + } + + [Fact] + public async Task GetTagNameAsync_WithNonExistingIdShouldReturnCorrectName() + { + await Should.ThrowAsync( + blogPostAppService.GetTagNameAsync(Guid.NewGuid())); + } } diff --git a/modules/docs/app/VoloDocs.Web/package.json b/modules/docs/app/VoloDocs.Web/package.json index c4e7f90755..9e3818c9b6 100644 --- a/modules/docs/app/VoloDocs.Web/package.json +++ b/modules/docs/app/VoloDocs.Web/package.json @@ -3,7 +3,7 @@ "name": "volo.docstestapp", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~7.4.0", - "@abp/docs": "~7.4.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "~7.4.1", + "@abp/docs": "~7.4.1" } } diff --git a/modules/docs/app/VoloDocs.Web/yarn.lock b/modules/docs/app/VoloDocs.Web/yarn.lock index dbd2162f5c..7c29d5a62d 100644 --- a/modules/docs/app/VoloDocs.Web/yarn.lock +++ b/modules/docs/app/VoloDocs.Web/yarn.lock @@ -2,47 +2,47 @@ # yarn lockfile v1 -"@abp/anchor-js@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/anchor-js/-/anchor-js-7.4.0.tgz#062faa10d670b70d16c8f6d208a24c63b4185489" - integrity sha512-Fmt97KeuzM8/QPaTdVGcgyBtNQc2oJT8ZoGbrZ9E0uTUUnzBSiIqEH2u2Voz5WaqfOrlAzpILHRjnVfwCMlErQ== +"@abp/anchor-js@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/anchor-js/-/anchor-js-7.4.1.tgz#d9323f8c943e6f02268b55daa0072294ef54b96d" + integrity sha512-72tE6OmE8aUeERGtgktF9bdZ6CFMc33obX8KMU5WL8FynzsJYCbLsggTUc8WCfi/AxuFAtqqxKU1TTjypWs2SQ== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" anchor-js "^4.3.1" -"@abp/aspnetcore.mvc.ui.theme.basic@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-7.4.0.tgz#5088dd82ce343e1123e025848f09b51df988b225" - integrity sha512-teT7I0kgjek/lHzpTg5VOVCQ3IL26nFB43Aa/45fuaSwh9FJd3IJNXGL6xwp85oKaptDYSBXIF4GbrUfp2Ugqg== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~7.4.0" - -"@abp/aspnetcore.mvc.ui.theme.shared@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-7.4.0.tgz#e676444a46214e850b0d916daeeb912774ac381d" - integrity sha512-X+dgdgHGUTyf0zaSPsqQp2ZZWu2+9gIRT4r4/LDgxchHgfNvcKRF8jH/JICcVgGD1adJvZzzDpTefL8CuAIRJA== - dependencies: - "@abp/aspnetcore.mvc.ui" "~7.4.0" - "@abp/bootstrap" "~7.4.0" - "@abp/bootstrap-datepicker" "~7.4.0" - "@abp/bootstrap-daterangepicker" "~7.4.0" - "@abp/datatables.net-bs5" "~7.4.0" - "@abp/font-awesome" "~7.4.0" - "@abp/jquery-form" "~7.4.0" - "@abp/jquery-validation-unobtrusive" "~7.4.0" - "@abp/lodash" "~7.4.0" - "@abp/luxon" "~7.4.0" - "@abp/malihu-custom-scrollbar-plugin" "~7.4.0" - "@abp/moment" "~7.4.0" - "@abp/select2" "~7.4.0" - "@abp/sweetalert2" "~7.4.0" - "@abp/timeago" "~7.4.0" - "@abp/toastr" "~7.4.0" - -"@abp/aspnetcore.mvc.ui@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-7.4.0.tgz#61e1b52d2a940e02242f57007bd3f0fcb583c09a" - integrity sha512-gdoxOBo10DWDYhUq1GVfguC0Ot8PYhoA3VLf88/RatL88BNUUlt0e71uMFcx/gk72fuAE+o9zXn/6nq1wtpSwQ== +"@abp/aspnetcore.mvc.ui.theme.basic@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-7.4.1.tgz#62df78aab8a0b374817fdbab6c6363529b43f925" + integrity sha512-KaPmBlwNjOl1+vwLj5O8J11YHBSRg4y0IIxtgZiculXQNFPHbYAXm8sfTw6Wcsx00STrhvUVJQxYMePNnOTCTg== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~7.4.1" + +"@abp/aspnetcore.mvc.ui.theme.shared@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-7.4.1.tgz#8f8679f5cf80137324ddbec9fcaa67332783e708" + integrity sha512-0uUKuTsi/ikLFUUNEqvrn7KimgsvuK+7m1yZD4o47FQlgGxTyt1zQY9w3K6YyhyC3lsT6qCwiAPIoFOzPkIg/Q== + dependencies: + "@abp/aspnetcore.mvc.ui" "~7.4.1" + "@abp/bootstrap" "~7.4.1" + "@abp/bootstrap-datepicker" "~7.4.1" + "@abp/bootstrap-daterangepicker" "~7.4.1" + "@abp/datatables.net-bs5" "~7.4.1" + "@abp/font-awesome" "~7.4.1" + "@abp/jquery-form" "~7.4.1" + "@abp/jquery-validation-unobtrusive" "~7.4.1" + "@abp/lodash" "~7.4.1" + "@abp/luxon" "~7.4.1" + "@abp/malihu-custom-scrollbar-plugin" "~7.4.1" + "@abp/moment" "~7.4.1" + "@abp/select2" "~7.4.1" + "@abp/sweetalert2" "~7.4.1" + "@abp/timeago" "~7.4.1" + "@abp/toastr" "~7.4.1" + +"@abp/aspnetcore.mvc.ui@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-7.4.1.tgz#49c13718a17569f97b71f978b50f367dff67b8f7" + integrity sha512-EvYrfk0mpSt1jAMZmfFcHoNWEJskzResKp0bflOYsYPsZPuJ5WraKsk4IEEpesYHCyHW5AAb5HBJHeoSbVLh4Q== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -51,194 +51,194 @@ merge-stream "^2.0.0" micromatch "^4.0.2" -"@abp/bootstrap-datepicker@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-7.4.0.tgz#75edc2127ca26d86bfefaa6e37579b06e32de5de" - integrity sha512-HXUa+kLjKu8sKr+kCZeNye9Pv/swRfKGAt/uJ2WUEvCJ4IVIMM1p6iMnOEEk/+3OGE64/PWu3cdE9dLP6izOaA== +"@abp/bootstrap-datepicker@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-7.4.1.tgz#f8f35d0edf71368faaae4e40a72fa846b0084f9b" + integrity sha512-hsu8ty6c2oOevsNoyFTQ4yJAu27qnz82MgRNVS8MRfdzo05/LhBhy/tKFm+PFYJqZULYlpQ1GXUF2+uGyazIeg== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap-daterangepicker@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-7.4.0.tgz#5058fc2a9354f0a71ac5393658e362779a3bdc46" - integrity sha512-EK0wzZUY9H3XPb9U3DvYVqh48fU+6IneNGYOk7dcda8CUYObd4Dl1nXligStCqgn2uePtwxDHRx40eV0GXmU/Q== +"@abp/bootstrap-daterangepicker@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-7.4.1.tgz#b133cefdbed0fa1b8f1bda916a9d46952237238a" + integrity sha512-NpmbsO4Xg48Zmr8OOlf1fxuNMnFIqmRrkHiKp9lP5c8am64+7rRzCwATw2UY0Ud+4n8/ws+Iki1dwPQF6db1zw== dependencies: bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-7.4.0.tgz#71be70660643d8f60d13d355b8c80b16e4854870" - integrity sha512-3Fa+fL5NH+0H2KK4MAaqNsiz0PYwK0+Oxjmd0NgKwcqV2vJzRrzS3WG5kITYjNz9QGdBV+FrhNX/NSRU8LDx3Q== +"@abp/bootstrap@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-7.4.1.tgz#b34a2fcc80e04212865652ee7f4f5498a6a61f6d" + integrity sha512-/qCgfrtNWZ2jui2iL6wd6MLrcxALSEFVBypaz1JK3WjEe7DvFAYvKLl7DugIv039/Sx3mbx/PJiQhx8CVZMsEA== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" bootstrap "^5.1.3" -"@abp/clipboard@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-7.4.0.tgz#f1d147df94ddf3ab53eeeb05aec3d5556064c5d6" - integrity sha512-z/nB1RQN/tmShSRwc9Fv1DsJSNM7+Zg4GnAtvZNpOHJp8LTVmsJWxLoUM7hF896W9E0JKr8tRuCVqulyh3IqKg== +"@abp/clipboard@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-7.4.1.tgz#31329ad4565b5075b486e9ca63fb0ff8a070ff9e" + integrity sha512-/+ylBPs/TEZdwywSSTnj96WoRJPwQnR6vlI+sX7h9wDfSDbMwuSSdETSnDVT21lkl8gonPONFZTL8D1u/KKAhg== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" clipboard "^2.0.8" -"@abp/core@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-7.4.0.tgz#8505d446a3b4d80ce476bd3352c1639c7dc486ec" - integrity sha512-yxrnw6eAEIj/CcX5jAwb4xmCsdqWaG+KRcBA8GFvqXbsK94IjqLDiJ3flo+QhGn2DXo40ISxofZop0CgSbP7Ew== +"@abp/core@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-7.4.1.tgz#1d14899ad16aac038806504eb0a5be9318cdcc0c" + integrity sha512-p0BAe2kCtgZmq8pilahmuxmye8DeRXt2KmnFRbmYE3j4d0uComFZpC72QOD1iro8bkmbsHfsHJpiVg4Sp4licw== dependencies: - "@abp/utils" "~7.4.0" + "@abp/utils" "~7.4.1" -"@abp/datatables.net-bs5@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-7.4.0.tgz#52d22e12a2420b402e03148793707d063db0088d" - integrity sha512-VvQv5w0cUpdDD9jX8aUEaLxFrc4A95JlmFnhCYIV1etL8HNOdZvmOThxorsImk31JfpyVYrY/Ze/rnWi2uhVvQ== +"@abp/datatables.net-bs5@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-7.4.1.tgz#821ee4c5db116f9810d65184855cea1fa7d47360" + integrity sha512-jpUzb65lCGYAxs/1qV3pRP8agHwIgZA9gDrudvR8S/3X3kNQWtmeKoFDZ93mhnl3aWPjWFKVrT2LeQeJw5XO5A== dependencies: - "@abp/datatables.net" "~7.4.0" + "@abp/datatables.net" "~7.4.1" datatables.net-bs5 "^1.11.4" -"@abp/datatables.net@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-7.4.0.tgz#9f12a1bb2abd05cd753b5d937d8a0350b2ff74ae" - integrity sha512-StOkMmIkcBUWzD9ToZ5J/hISRWdxbAWjwn7RuFXsoHXcY03mmD86g2oztjrWC5UFnRdpFnsfspTpbNqXFB9Vag== +"@abp/datatables.net@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-7.4.1.tgz#a4501e92e9995da0759b9ce55756fe92c4e8db59" + integrity sha512-BZOOZLH7XrGlX3aFK97cwV9+npsTzALSBo87OgwO2U6UpeFq7yAOvmC0+L9dmIUDISeORn5IFc/zTsSSIQnpHQ== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" datatables.net "^1.11.4" -"@abp/docs@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/docs/-/docs-7.4.0.tgz#62a9c23a0d961838515cd30bcee22f16fd40e0a2" - integrity sha512-BfgB51s8qZuzeXydI+CJxC8ogTAmfI3OADN89LWUL5OPCyZa9YAtgaFOEKhYRZ+unY3Rn6wV+v67bMeMhFb5mw== +"@abp/docs@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/docs/-/docs-7.4.1.tgz#3dc2d04612baa7b414e9927853b8c50b5757553f" + integrity sha512-qaGvzmxiS0d1S9OOsCTK6qHeC+umKgCWS58F877eUHGOZWnnE7+ifChB27W1Y79Y87sQkqBYTOFIkq8iAXxwXg== dependencies: - "@abp/anchor-js" "~7.4.0" - "@abp/clipboard" "~7.4.0" - "@abp/malihu-custom-scrollbar-plugin" "~7.4.0" - "@abp/popper.js" "~7.4.0" - "@abp/prismjs" "~7.4.0" + "@abp/anchor-js" "~7.4.1" + "@abp/clipboard" "~7.4.1" + "@abp/malihu-custom-scrollbar-plugin" "~7.4.1" + "@abp/popper.js" "~7.4.1" + "@abp/prismjs" "~7.4.1" -"@abp/font-awesome@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-7.4.0.tgz#50059083b88706a0f71f55118472b378e4c66163" - integrity sha512-hKoPyM41HHCK6dg+8pQvjYJWzKABBCXrYQAIneMPQZUZqa4JLObKCva9TR7pu6pUp+9OVzg4fQOBM+nwpHtw4g== +"@abp/font-awesome@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-7.4.1.tgz#f6175a989aa64367830723f1dd9c607906716296" + integrity sha512-/ybaz4KROwFdG4Xv0yMTUMXOreDmKy1lKQuntqHEUnIorhXmkgcd5AQQ5AolJ4NmNdPNt1VYrRcTEmdz3nw+FA== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" "@fortawesome/fontawesome-free" "^5.15.4" -"@abp/jquery-form@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-7.4.0.tgz#7ab3be241ee09f1e2843bd1b4d0b0b86d4446e30" - integrity sha512-OmTRuZ7QK1oe2ayNLqEpRJk4Ogk0wt/hIFtJHwQkCtDuCggoR5sQz4vn1vgrD19MxGq07dow5IgjbbhHv1vtEg== +"@abp/jquery-form@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-7.4.1.tgz#67978c41cda204b4c2027d81fc66844379313fa6" + integrity sha512-JZ1D47s/kpTlfMcpD4Jrlh98bhEDsIlWJauvAYaS0EBPIU9V2zHGQ+h9GPFbSPrXe4sYxPSREcsc8KUVMhT5MQ== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-7.4.0.tgz#0c564e39c4997dd9b8af7d2023615a06d6fd9834" - integrity sha512-vFB3RKkDlDXbHlDJ64uo3jWW1IRXwiCaPf+mcB77Wpt5+0Dn7eWqjBT7KyHBrsV08ghIqY/Q4nXntFJrmLcuEA== +"@abp/jquery-validation-unobtrusive@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-7.4.1.tgz#fe5c90ade419e83505884dd50dd5988d766f177b" + integrity sha512-oHHV/ukap+vDvQ8CnEWnOrrsLkHXIcMk+SjNKe/dyK5VzOVLDpMatRFmloLs2igYVXTqDGjmDlTswTFdJUarcQ== dependencies: - "@abp/jquery-validation" "~7.4.0" + "@abp/jquery-validation" "~7.4.1" jquery-validation-unobtrusive "^3.2.12" -"@abp/jquery-validation@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-7.4.0.tgz#f2aaba8f4c023e93f0051cc9a05c6d82fa5c7254" - integrity sha512-vN4srLT5UXAKXpKHbZgySWT+N2DjRYivgtifpZHMTGFLMW14W+tfi5zhR4H4JvqJpuO6ZKNiz15zA1zwEBK0Tw== +"@abp/jquery-validation@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-7.4.1.tgz#c2c06bc28770832a9ad73eac000586faed3bdbe3" + integrity sha512-A5iFT2EWfGHXrBb/ov5f0grZ2o2xkDaYtps/FnDUwBYdIdD8E7bbJsWp6ytvZDciO0XmEqAoVOxmiij7ue/SOg== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" jquery-validation "^1.19.3" -"@abp/jquery@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-7.4.0.tgz#206891b20f250537d05d907d2b6cd682fec76496" - integrity sha512-DeYo02T6WVhdpLloSPb6ooqtpksu1HtcbbQhIP9E1P7jHSzZoNiJvoKXHiFUcj5PYiGKl9d/o89hM/apWzyreQ== +"@abp/jquery@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-7.4.1.tgz#b5e16834e6c7871ad6392612ac8e2de8617eb353" + integrity sha512-X3RcovvRYISHcsb6W3U3iVsofw6yomoiouoB1tSIy2/tvUbu9n7N/3MM0CUujFm/xib7s3z1tVxFssS9smT7sw== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" jquery "~3.6.0" -"@abp/lodash@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-7.4.0.tgz#93f20abee776dbfa7aa45e2e710f2768f262fda5" - integrity sha512-h4Fnjm+VLwp1F3r57B9MrHhwyOYMo5oP285a85zzAYLkhwcDy7f1nbHKHMQ3ZTaeJVmiRnVaH+3sdUdslCRt5g== +"@abp/lodash@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-7.4.1.tgz#d0f84b7b9cbd989d59ebde594ed7acb8bc720b61" + integrity sha512-RFjZCyAPZnpvT0SJbxXzzmMYbuocSWBlezvjAVA8MiTrOXdZO4VyaTFjIuQcAdSrZhtpFGeYWxAjHshVplxMbw== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" lodash "^4.17.21" -"@abp/luxon@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-7.4.0.tgz#2ba7ff307c8f7c24d818a9c33635b86fd6810db9" - integrity sha512-ROCx7aihM+agdYy7Tkz+GiScx68KY5qwGTnj8P7QabGFChzVUic6RuBG+2Obmfonc6uT7Rq0c8JDGrsGNe/w8A== +"@abp/luxon@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-7.4.1.tgz#e0c0947d2b77f98b9cdaf7d1143025879361c3c9" + integrity sha512-k1wh8tT1529MtNC2gSXEIKdimBXBwubXeLisgpIPx6lkJo1Op6pAz2ERwFXeyktqGdYyuFcnewJIxmS7EPtWhg== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" luxon "^2.3.0" -"@abp/malihu-custom-scrollbar-plugin@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-7.4.0.tgz#aba68877481f4339e048f2ae3cfbe93197145a0a" - integrity sha512-Ntodhi4k0HFQmImYTP5SYf/WDm7aUGJLaGsfePm77HJ6DhGgalIGqtM8NiFXzo/3GmMY0XSo8Wxrs1mSCdtsOA== +"@abp/malihu-custom-scrollbar-plugin@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-7.4.1.tgz#aa7ec247197a258277549052780b38fd9e748c6c" + integrity sha512-pm/wIaiRSgGxelOf8AiL4JKFNZOQ6s2WbR6pULiP2HSNCgCpWYJ2s8fvj7VP3lAHIa98v3m8PSMSUhqaANxZ/Q== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-7.4.0.tgz#2490d9c7cdcaeca8d0ba9ebef5e7298caf0c9e09" - integrity sha512-ftsUEgO17GbVawA1GplGFzEeIM4NX004AmS6/fPI3o5isX7o1buF9q9TXdnwUuFEJKZxS4KpveRqzTL5t9k0BQ== +"@abp/moment@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-7.4.1.tgz#1c28ccb13eecdd13695edf8641ca9867b318e37d" + integrity sha512-7vRJyAK5ER9z+LV1xUSAAtWlPlhv8yhM/nHjhC+IQSP/+V1D7VLA6EKxAEexGw7wX6HY8oMOWP9HxDHMb5hKQA== dependencies: moment "^2.9.0" -"@abp/popper.js@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-7.4.0.tgz#523ec0341544947b8914bab1c9fdfbca1709cc16" - integrity sha512-A/d5SEbspqd5ixJe2dZELqSqMS/5K/WQ9orY5//mz3L0WS9YDqiRjJdyep9pR8jskD9q6Wg+q/rrdipG+LEgMQ== +"@abp/popper.js@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-7.4.1.tgz#db9ae010e87b0f2eb39cd277487100ffd4d08fd1" + integrity sha512-/tcVasfC5Tr0o2yBge7jxP2hfVcVYZoHjNnGAuIsFCvP4zpq65HkVam181QOoJXWMS6ibHJO6tRbYtIZ4ye4lQ== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" "@popperjs/core" "^2.11.2" -"@abp/prismjs@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-7.4.0.tgz#8572f36f853c7054d77d02f3098cd844ee321ed7" - integrity sha512-y/Iy6pddQeVazEITktPot8JOPdAEOVAfmYkTBP3DIIPvoYr3kf6rwfzBUalMw5CEjWZ9BaIszDgFCk5ucNHHwQ== +"@abp/prismjs@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-7.4.1.tgz#df4387dbc2f0c77ddb9b6bd0ade9a5db29b9cee2" + integrity sha512-bI7pEKWy32aRYSb2ZziiH6Teebyd8km+1TXADy1yks9i9G5eLWe4/CSdwWpI4M+8ggM8CsdhrZ6/U+55BpXPQA== dependencies: - "@abp/clipboard" "~7.4.0" - "@abp/core" "~7.4.0" + "@abp/clipboard" "~7.4.1" + "@abp/core" "~7.4.1" prismjs "^1.26.0" -"@abp/select2@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-7.4.0.tgz#2f455cc991b7bb4df9ed426097bc2996cac12697" - integrity sha512-DwprX4MIoqMzSdh7eFg7EjGIz4ftYZub6jG9Sk3r+sxabbhpbFTxKOpXnhBWYi7L7uTQ8YDFk/5NeXO+Rm50Ww== +"@abp/select2@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-7.4.1.tgz#d7ea53cfec285a06278db362131b7510d5b73900" + integrity sha512-0S66iy7HuB74qqOSDraoF7UvXqz2PrnOKy+3EYMTMskOn4pWaq03JMR8xxEgZ8CtmsrqlE1a4wt1Yt9b3FIc0w== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" select2 "^4.0.13" -"@abp/sweetalert2@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-7.4.0.tgz#db1b4bd45cbabd61172591abc8ce223b5f607c4e" - integrity sha512-XqHPRnTASaRtbJIZYKW1KSKIJ8tynL8DuPCSMjcp4iyUlk+gnzxvbqXeNVjc2ojxj78T/42M/vITNoiiTYuKUw== +"@abp/sweetalert2@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-7.4.1.tgz#6722a40e5115cc341b7543aa0fa3b5a7ae9515b2" + integrity sha512-9jAHrYqCp5qykYfNNbqgESL6egixofVwonjZlb+lLWHAkIX+gQ2ApUNDFSXPtKUh2n9sXhSfF8SSg+BHP/bkCA== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" sweetalert2 "^11.3.6" -"@abp/timeago@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-7.4.0.tgz#245fe09370f38311a67a594c8a3c884aea59cc90" - integrity sha512-khxK6EICUaGCUM1HkACw/8rlPQNssoQvCK64bNqEHBCXgPUmTcqSj5MEGiNOYbgGyWeH2IAMtJEYPqX1g1wqSA== +"@abp/timeago@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-7.4.1.tgz#243d342ba131878ae7f892909c9cae07cf54902b" + integrity sha512-a0Vl2NFwTxzRmH5akWo8BRUxa6sK72z8OoXwUFkZOUqMWBCHK7ffNiN1/fbSgA+7HpSZdDvIthjYwBt57DxLdQ== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" timeago "^1.6.7" -"@abp/toastr@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-7.4.0.tgz#16ba0414a27c9a21bc7556a078b175445edcf608" - integrity sha512-oM4HT2m95cK/9sB4AEQAKUMSGBep6wZTgM/46+o2IvvMdMPrGR2mPu9V9wi3y817FRgY+/qQTfy5TZWyTuIpVQ== +"@abp/toastr@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-7.4.1.tgz#345545a41b6145e54477c6c376193a6dbd62bdda" + integrity sha512-OLCvPJYSrcT2spcq9nO838Q22VhJ63Kdzasz1HugdVNqgcFCCSsqaoXrJGUcf5GrZx7PNloz7uf1I3txYMeZtA== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" toastr "^2.1.4" -"@abp/utils@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-7.4.0.tgz#b31fb6e5dff07463535479a6bb62dc733d7119c8" - integrity sha512-CcR3tfuEsVM60DYL1A0cH6BkUTsasOoBDv/b63uLCoEOq/g8ntelD/SpRSgfDXK74P9M8OE5ZFxlXWDiYuzAFg== +"@abp/utils@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-7.4.1.tgz#2ce4c4d659c2ae9bc23b71b79fa3c6e120eaecaf" + integrity sha512-eFeoOXcz9cVkDKpOfd2VWmpAojASfsqfvACZqi1UmF16OcjsFIkxmIvhh1fpbT4A+eQLbaFFLIsf6gYb//tXhg== dependencies: just-compare "^2.3.0" diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityLinkUserInfo.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityLinkUserInfo.cs index 250f6f88d6..d2f5bdbff3 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityLinkUserInfo.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityLinkUserInfo.cs @@ -8,7 +8,7 @@ public class IdentityLinkUserInfo public virtual Guid? TenantId { get; set; } - public IdentityLinkUserInfo(Guid userId, Guid? tenantId) + public IdentityLinkUserInfo(Guid userId, Guid? tenantId = null) { UserId = userId; TenantId = tenantId; diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserManager.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserManager.cs index 5ce3663e14..57b97bfcd7 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserManager.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserManager.cs @@ -11,10 +11,10 @@ using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Repositories; using Volo.Abp.Domain.Services; using Volo.Abp.EventBus.Distributed; +using Volo.Abp.EventBus.Local; using Volo.Abp.Identity.Settings; using Volo.Abp.Settings; using Volo.Abp.Threading; -using Volo.Abp.Timing; using Volo.Abp.Uow; namespace Volo.Abp.Identity; @@ -27,7 +27,7 @@ public class IdentityUserManager : UserManager, IDomainService protected ISettingProvider SettingProvider { get; } protected ICancellationTokenProvider CancellationTokenProvider { get; } protected IDistributedEventBus DistributedEventBus { get; } - + protected IIdentityLinkUserRepository IdentityLinkUserRepository { get; } protected override CancellationToken CancellationToken => CancellationTokenProvider.Token; public IdentityUserManager( @@ -45,7 +45,8 @@ public class IdentityUserManager : UserManager, IDomainService ICancellationTokenProvider cancellationTokenProvider, IOrganizationUnitRepository organizationUnitRepository, ISettingProvider settingProvider, - IDistributedEventBus distributedEventBus) + IDistributedEventBus distributedEventBus, + IIdentityLinkUserRepository identityLinkUserRepository) : base( store, optionsAccessor, @@ -62,6 +63,7 @@ public class IdentityUserManager : UserManager, IDomainService DistributedEventBus = distributedEventBus; RoleRepository = roleRepository; UserRepository = userRepository; + IdentityLinkUserRepository = identityLinkUserRepository; CancellationTokenProvider = cancellationTokenProvider; } @@ -76,6 +78,19 @@ public class IdentityUserManager : UserManager, IDomainService return await CreateAsync(user); } + public async override Task DeleteAsync(IdentityUser user) + { + user.Claims.Clear(); + user.Roles.Clear(); + user.Tokens.Clear(); + user.Logins.Clear(); + user.OrganizationUnits.Clear(); + await IdentityLinkUserRepository.DeleteAsync(new IdentityLinkUserInfo(user.Id, user.TenantId), CancellationToken); + await UpdateAsync(user); + + return await base.DeleteAsync(user); + } + public virtual async Task GetByIdAsync(Guid id) { var user = await Store.FindByIdAsync(id.ToString(), CancellationToken); diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo.Abp.PermissionManagement.Domain.Identity.csproj b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo.Abp.PermissionManagement.Domain.Identity.csproj index 30018df86e..35ce121c09 100644 --- a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo.Abp.PermissionManagement.Domain.Identity.csproj +++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo.Abp.PermissionManagement.Domain.Identity.csproj @@ -16,6 +16,7 @@ + diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/AbpPermissionManagementDomainIdentityModule.cs b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/AbpPermissionManagementDomainIdentityModule.cs index e710d5b165..973577ccff 100644 --- a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/AbpPermissionManagementDomainIdentityModule.cs +++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/AbpPermissionManagementDomainIdentityModule.cs @@ -1,13 +1,15 @@ using Volo.Abp.Authorization.Permissions; using Volo.Abp.Identity; using Volo.Abp.Modularity; +using Volo.Abp.Users; namespace Volo.Abp.PermissionManagement.Identity; [DependsOn( typeof(AbpIdentityDomainSharedModule), - typeof(AbpPermissionManagementDomainModule) - )] + typeof(AbpPermissionManagementDomainModule), + typeof(AbpUsersAbstractionModule) +)] public class AbpPermissionManagementDomainIdentityModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleDeletedEventHandler.cs b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleDeletedEventHandler.cs index 38a9578c9d..cb63b2681a 100644 --- a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleDeletedEventHandler.cs +++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleDeletedEventHandler.cs @@ -5,6 +5,7 @@ using Volo.Abp.Domain.Entities.Events.Distributed; using Volo.Abp.EventBus; using Volo.Abp.EventBus.Distributed; using Volo.Abp.Identity; +using Volo.Abp.Uow; namespace Volo.Abp.PermissionManagement.Identity; @@ -19,7 +20,8 @@ public class RoleDeletedEventHandler : PermissionManager = permissionManager; } - public async Task HandleEventAsync(EntityDeletedEto eventData) + [UnitOfWork] + public virtual async Task HandleEventAsync(EntityDeletedEto eventData) { await PermissionManager.DeleteAsync(RolePermissionValueProvider.ProviderName, eventData.Entity.Name); } diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/UserDeletedEventHandler.cs b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/UserDeletedEventHandler.cs new file mode 100644 index 0000000000..35aaba29ae --- /dev/null +++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/UserDeletedEventHandler.cs @@ -0,0 +1,27 @@ +using System.Threading.Tasks; +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Domain.Entities.Events.Distributed; +using Volo.Abp.EventBus.Distributed; +using Volo.Abp.Uow; +using Volo.Abp.Users; + +namespace Volo.Abp.PermissionManagement.Identity; + +public class UserDeletedEventHandler : + IDistributedEventHandler>, + ITransientDependency +{ + protected IPermissionManager PermissionManager { get; } + + public UserDeletedEventHandler(IPermissionManager permissionManager) + { + PermissionManager = permissionManager; + } + + [UnitOfWork] + public virtual async Task HandleEventAsync(EntityDeletedEto eventData) + { + await PermissionManager.DeleteAsync(UserPermissionValueProvider.ProviderName, eventData.Entity.Id.ToString()); + } +} diff --git a/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityRoleAppService_Tests.cs b/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityRoleAppService_Tests.cs index d9f6d17523..e413add30c 100644 --- a/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityRoleAppService_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityRoleAppService_Tests.cs @@ -4,6 +4,9 @@ using System.Threading.Tasks; using Xunit; using Shouldly; using Volo.Abp.Application.Dtos; +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.PermissionManagement; +using Volo.Abp.PermissionManagement.Identity; namespace Volo.Abp.Identity; @@ -11,11 +14,14 @@ public class IdentityRoleAppService_Tests : AbpIdentityApplicationTestBase { private readonly IIdentityRoleAppService _roleAppService; private readonly IIdentityRoleRepository _roleRepository; - + private readonly IPermissionManager _permissionManager; + private readonly RolePermissionManagementProvider _rolePermissionManagementProvider; public IdentityRoleAppService_Tests() { _roleAppService = GetRequiredService(); _roleRepository = GetRequiredService(); + _permissionManager = GetRequiredService(); + _rolePermissionManagementProvider = GetRequiredService(); } [Fact] @@ -125,6 +131,20 @@ public class IdentityRoleAppService_Tests : AbpIdentityApplicationTestBase (await FindRoleAsync("moderator")).ShouldBeNull(); } + + [Fact] + public async Task Role_Permissions_Should_Deleted_If_Role_Deleted() + { + var moderator = await GetRoleAsync("moderator"); + + (await _rolePermissionManagementProvider.CheckAsync(IdentityPermissions.Users.Create, RolePermissionValueProvider.ProviderName, moderator.Name)).IsGranted.ShouldBeFalse(); + await _permissionManager.SetForRoleAsync(moderator.Name, IdentityPermissions.Users.Create, true); + (await _rolePermissionManagementProvider.CheckAsync(IdentityPermissions.Users.Create, RolePermissionValueProvider.ProviderName, moderator.Name)).IsGranted.ShouldBeTrue(); + + await _roleAppService.DeleteAsync(moderator.Id); + (await _rolePermissionManagementProvider.CheckAsync(IdentityPermissions.Users.Create, RolePermissionValueProvider.ProviderName, moderator.Name)).IsGranted.ShouldBeFalse(); + } + private async Task GetRoleAsync(string roleName) { return (await _roleRepository.GetListAsync()).First(u => u.Name == roleName); diff --git a/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityUserAppService_Tests.cs b/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityUserAppService_Tests.cs index 591cefba3c..3272929c3e 100644 --- a/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityUserAppService_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityUserAppService_Tests.cs @@ -1,7 +1,10 @@ using System; using System.Threading.Tasks; using Shouldly; +using Volo.Abp.Authorization.Permissions; using Volo.Abp.Data; +using Volo.Abp.PermissionManagement; +using Volo.Abp.PermissionManagement.Identity; using Xunit; namespace Volo.Abp.Identity; @@ -10,12 +13,16 @@ public class IdentityUserAppService_Tests : AbpIdentityApplicationTestBase { private readonly IIdentityUserAppService _userAppService; private readonly IIdentityUserRepository _userRepository; + private readonly IPermissionManager _permissionManager; + private readonly UserPermissionManagementProvider _userPermissionManagementProvider; private readonly IdentityTestData _testData; public IdentityUserAppService_Tests() { _userAppService = GetRequiredService(); _userRepository = GetRequiredService(); + _permissionManager = GetRequiredService(); + _userPermissionManagementProvider = GetRequiredService(); _testData = GetRequiredService(); } @@ -174,6 +181,19 @@ public class IdentityUserAppService_Tests : AbpIdentityApplicationTestBase FindUser("john.nash").ShouldBeNull(); } + [Fact] + public async Task User_Permissions_Should_Deleted_If_User_Deleted() + { + var johnNash = GetUser("john.nash"); + + (await _userPermissionManagementProvider.CheckAsync(IdentityPermissions.Users.Create, UserPermissionValueProvider.ProviderName, johnNash.Id.ToString())).IsGranted.ShouldBeFalse(); + await _permissionManager.SetForUserAsync(johnNash.Id, IdentityPermissions.Users.Create, true); + (await _userPermissionManagementProvider.CheckAsync(IdentityPermissions.Users.Create, UserPermissionValueProvider.ProviderName, johnNash.Id.ToString())).IsGranted.ShouldBeTrue(); + + await _userAppService.DeleteAsync(johnNash.Id); + (await _userPermissionManagementProvider.CheckAsync(IdentityPermissions.Users.Create, UserPermissionValueProvider.ProviderName, johnNash.Id.ToString())).IsGranted.ShouldBeFalse(); + } + [Fact] public async Task GetRolesAsync() { diff --git a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityUserManager_Tests.cs b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityUserManager_Tests.cs index 191972d13b..ec29d3d29a 100644 --- a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityUserManager_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/IdentityUserManager_Tests.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Security.Claims; using System.Threading.Tasks; using Microsoft.AspNetCore.Identity; using Microsoft.Extensions.DependencyInjection; @@ -26,8 +27,10 @@ public class IdentityUserManager_Tests : AbpIdentityDomainTestBase private readonly IUnitOfWorkManager _unitOfWorkManager; private readonly IdentityTestData _testData; private readonly ICurrentTenant _currentTenant; - protected IOptions _identityOptions { get; } - protected IDistributedEventBus DistributedEventBus { get; set; } + private readonly IOptions _identityOptions; + private readonly IdentityLinkUserManager _identityLinkUserManager; + + private IDistributedEventBus _distributedEventBus { get; set; } public IdentityUserManager_Tests() { @@ -40,12 +43,13 @@ public class IdentityUserManager_Tests : AbpIdentityDomainTestBase _unitOfWorkManager = GetRequiredService(); _currentTenant = GetRequiredService(); _identityOptions = GetRequiredService>(); + _identityLinkUserManager = GetRequiredService(); } protected override void AfterAddApplication(IServiceCollection services) { - DistributedEventBus = Substitute.For(); - services.Replace(ServiceDescriptor.Singleton(DistributedEventBus)); + _distributedEventBus = Substitute.For(); + services.Replace(ServiceDescriptor.Singleton(_distributedEventBus)); } [Fact] @@ -270,7 +274,7 @@ public class IdentityUserManager_Tests : AbpIdentityDomainTestBase (await _identityUserManager.CreateAsync(user)).CheckErrors(); - await DistributedEventBus.DidNotReceive() + await _distributedEventBus.DidNotReceive() .PublishAsync(Arg.Any(), Arg.Any(), Arg.Any()); var newUser = await _identityUserManager.FindByIdAsync(user.Id.ToString()); @@ -280,16 +284,16 @@ public class IdentityUserManager_Tests : AbpIdentityDomainTestBase { var oldUsername = newUser.UserName; await _identityUserManager.SetUserNameAsync(newUser, "newUserName"); - await DistributedEventBus.Received() + await _distributedEventBus.Received() .PublishAsync( Arg.Is(x => x.Id == newUser.Id && x.TenantId == newUser.TenantId && x.OldUserName == oldUsername && x.UserName == "newUserName"), Arg.Any(), Arg.Any()); } - DistributedEventBus.ClearReceivedCalls(); + _distributedEventBus.ClearReceivedCalls(); await _identityUserManager.SetUserNameAsync(newUser, newUser.UserName); - await DistributedEventBus.DidNotReceive() + await _distributedEventBus.DidNotReceive() .PublishAsync(Arg.Any(), Arg.Any(), Arg.Any()); } @@ -300,7 +304,7 @@ public class IdentityUserManager_Tests : AbpIdentityDomainTestBase (await _identityUserManager.CreateAsync(user)).CheckErrors(); - await DistributedEventBus.DidNotReceive() + await _distributedEventBus.DidNotReceive() .PublishAsync(Arg.Any(), Arg.Any(), Arg.Any()); var newUser = await _identityUserManager.FindByIdAsync(user.Id.ToString()); @@ -310,19 +314,70 @@ public class IdentityUserManager_Tests : AbpIdentityDomainTestBase { var oldEmail = newUser.Email; await _identityUserManager.SetEmailAsync(newUser, "newEmail@abp.io"); - await DistributedEventBus.Received() + await _distributedEventBus.Received() .PublishAsync( Arg.Is(x => x.Id == newUser.Id && x.TenantId == newUser.TenantId && x.OldEmail == oldEmail && x.Email == "newEmail@abp.io"), Arg.Any(), Arg.Any()); } - DistributedEventBus.ClearReceivedCalls(); + _distributedEventBus.ClearReceivedCalls(); await _identityUserManager.SetEmailAsync(newUser, newUser.Email); - await DistributedEventBus.DidNotReceive() + await _distributedEventBus.DidNotReceive() .PublishAsync(Arg.Any(), Arg.Any(), Arg.Any()); } + [Fact] + public async Task DeleteAsync() + { + await CreateRandomDefaultRoleAsync(); + var user = CreateRandomUser(); + (await _identityUserManager.CreateAsync(user)).CheckErrors(); + + var user2 = CreateRandomUser(); + (await _identityUserManager.CreateAsync(user2)).CheckErrors(); + + using (var uow = _unitOfWorkManager.Begin()) + { + user = await _identityUserManager.FindByIdAsync(user.Id.ToString()); + user.ShouldNotBeNull(); + + await _identityUserManager.AddClaimAsync(user, new Claim("test", "test")); + await _identityUserManager.AddLoginAsync(user, new UserLoginInfo("test", "test", "test")); + await _identityUserManager.AddDefaultRolesAsync(user); + user.SetToken("test", "test", "test"); + var ou = await _organizationUnitRepository.GetAsync(_lookupNormalizer.NormalizeName("OU11")); + await _identityUserManager.AddToOrganizationUnitAsync(user, ou); + await _identityLinkUserManager.LinkAsync(new IdentityLinkUserInfo(user.Id), new IdentityLinkUserInfo(user2.Id)); + + await uow.CompleteAsync(); + } + + using (var uow = _unitOfWorkManager.Begin()) + { + user = await _identityUserManager.FindByIdAsync(user.Id.ToString()); + user.ShouldNotBeNull(); + + user.Claims.Count.ShouldBeGreaterThan(0); + user.Logins.Count.ShouldBeGreaterThan(0); + user.Roles.Count.ShouldBeGreaterThan(0); + user.Tokens.Count.ShouldBeGreaterThan(0); + user.OrganizationUnits.Count.ShouldBeGreaterThan(0); + (await _identityLinkUserManager.IsLinkedAsync(new IdentityLinkUserInfo(user.Id), new IdentityLinkUserInfo(user2.Id))).ShouldBeTrue(); + + await _identityUserManager.DeleteAsync(user); + + user.Claims.Count.ShouldBe(0); + user.Logins.Count.ShouldBe(0); + user.Roles.Count.ShouldBe(0); + user.Tokens.Count.ShouldBe(0); + user.OrganizationUnits.Count.ShouldBe(0); + (await _identityLinkUserManager.IsLinkedAsync(new IdentityLinkUserInfo(user.Id), new IdentityLinkUserInfo(user2.Id))).ShouldBeFalse(); + + await uow.CompleteAsync(); + } + } + private async Task CreateRandomDefaultRoleAsync() { await _identityRoleRepository.InsertAsync( diff --git a/modules/openiddict/app/OpenIddict.Demo.Server/package.json b/modules/openiddict/app/OpenIddict.Demo.Server/package.json index 7fbc0569f6..212b67b1c1 100644 --- a/modules/openiddict/app/OpenIddict.Demo.Server/package.json +++ b/modules/openiddict/app/OpenIddict.Demo.Server/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~7.4.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "~7.4.1" } } diff --git a/modules/openiddict/app/angular/package.json b/modules/openiddict/app/angular/package.json index edbd2b95e3..67fe60fb32 100644 --- a/modules/openiddict/app/angular/package.json +++ b/modules/openiddict/app/angular/package.json @@ -12,15 +12,15 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~7.4.0", - "@abp/ng.components": "~7.4.0", - "@abp/ng.core": "~7.4.0", - "@abp/ng.oauth": "~7.4.0", - "@abp/ng.identity": "~7.4.0", - "@abp/ng.setting-management": "~7.4.0", - "@abp/ng.tenant-management": "~7.4.0", - "@abp/ng.theme.shared": "~7.4.0", - "@abp/ng.theme.lepton-x": "~2.4.0-rc.4", + "@abp/ng.account": "~7.4.1", + "@abp/ng.components": "~7.4.1", + "@abp/ng.core": "~7.4.1", + "@abp/ng.oauth": "~7.4.1", + "@abp/ng.identity": "~7.4.1", + "@abp/ng.setting-management": "~7.4.1", + "@abp/ng.tenant-management": "~7.4.1", + "@abp/ng.theme.shared": "~7.4.1", + "@abp/ng.theme.lepton-x": "~2.4.1", "@angular/animations": "^15.0.1", "@angular/common": "^15.0.1", "@angular/compiler": "^15.0.1", @@ -36,7 +36,7 @@ "zone.js": "~0.11.4" }, "devDependencies": { - "@abp/ng.schematics": "~7.4.0", + "@abp/ng.schematics": "~7.4.1", "@angular-devkit/build-angular": "^15.0.1", "@angular-eslint/builder": "~15.1.0", "@angular-eslint/eslint-plugin": "~15.1.0", diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/package.json b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/package.json index 90b3b47088..c8343aff2a 100644 --- a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/package.json +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/package.json @@ -3,6 +3,6 @@ "name": "demo-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~7.4.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "~7.4.1" } } diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/yarn.lock b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/yarn.lock index 9c4c145174..8c3619aab1 100644 --- a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/yarn.lock +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/yarn.lock @@ -2,39 +2,39 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-7.4.0.tgz#5088dd82ce343e1123e025848f09b51df988b225" - integrity sha512-teT7I0kgjek/lHzpTg5VOVCQ3IL26nFB43Aa/45fuaSwh9FJd3IJNXGL6xwp85oKaptDYSBXIF4GbrUfp2Ugqg== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~7.4.0" - -"@abp/aspnetcore.mvc.ui.theme.shared@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-7.4.0.tgz#e676444a46214e850b0d916daeeb912774ac381d" - integrity sha512-X+dgdgHGUTyf0zaSPsqQp2ZZWu2+9gIRT4r4/LDgxchHgfNvcKRF8jH/JICcVgGD1adJvZzzDpTefL8CuAIRJA== - dependencies: - "@abp/aspnetcore.mvc.ui" "~7.4.0" - "@abp/bootstrap" "~7.4.0" - "@abp/bootstrap-datepicker" "~7.4.0" - "@abp/bootstrap-daterangepicker" "~7.4.0" - "@abp/datatables.net-bs5" "~7.4.0" - "@abp/font-awesome" "~7.4.0" - "@abp/jquery-form" "~7.4.0" - "@abp/jquery-validation-unobtrusive" "~7.4.0" - "@abp/lodash" "~7.4.0" - "@abp/luxon" "~7.4.0" - "@abp/malihu-custom-scrollbar-plugin" "~7.4.0" - "@abp/moment" "~7.4.0" - "@abp/select2" "~7.4.0" - "@abp/sweetalert2" "~7.4.0" - "@abp/timeago" "~7.4.0" - "@abp/toastr" "~7.4.0" - -"@abp/aspnetcore.mvc.ui@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-7.4.0.tgz#61e1b52d2a940e02242f57007bd3f0fcb583c09a" - integrity sha512-gdoxOBo10DWDYhUq1GVfguC0Ot8PYhoA3VLf88/RatL88BNUUlt0e71uMFcx/gk72fuAE+o9zXn/6nq1wtpSwQ== +"@abp/aspnetcore.mvc.ui.theme.basic@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-7.4.1.tgz#62df78aab8a0b374817fdbab6c6363529b43f925" + integrity sha512-KaPmBlwNjOl1+vwLj5O8J11YHBSRg4y0IIxtgZiculXQNFPHbYAXm8sfTw6Wcsx00STrhvUVJQxYMePNnOTCTg== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~7.4.1" + +"@abp/aspnetcore.mvc.ui.theme.shared@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-7.4.1.tgz#8f8679f5cf80137324ddbec9fcaa67332783e708" + integrity sha512-0uUKuTsi/ikLFUUNEqvrn7KimgsvuK+7m1yZD4o47FQlgGxTyt1zQY9w3K6YyhyC3lsT6qCwiAPIoFOzPkIg/Q== + dependencies: + "@abp/aspnetcore.mvc.ui" "~7.4.1" + "@abp/bootstrap" "~7.4.1" + "@abp/bootstrap-datepicker" "~7.4.1" + "@abp/bootstrap-daterangepicker" "~7.4.1" + "@abp/datatables.net-bs5" "~7.4.1" + "@abp/font-awesome" "~7.4.1" + "@abp/jquery-form" "~7.4.1" + "@abp/jquery-validation-unobtrusive" "~7.4.1" + "@abp/lodash" "~7.4.1" + "@abp/luxon" "~7.4.1" + "@abp/malihu-custom-scrollbar-plugin" "~7.4.1" + "@abp/moment" "~7.4.1" + "@abp/select2" "~7.4.1" + "@abp/sweetalert2" "~7.4.1" + "@abp/timeago" "~7.4.1" + "@abp/toastr" "~7.4.1" + +"@abp/aspnetcore.mvc.ui@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-7.4.1.tgz#49c13718a17569f97b71f978b50f367dff67b8f7" + integrity sha512-EvYrfk0mpSt1jAMZmfFcHoNWEJskzResKp0bflOYsYPsZPuJ5WraKsk4IEEpesYHCyHW5AAb5HBJHeoSbVLh4Q== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -43,158 +43,158 @@ merge-stream "^2.0.0" micromatch "^4.0.2" -"@abp/bootstrap-datepicker@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-7.4.0.tgz#75edc2127ca26d86bfefaa6e37579b06e32de5de" - integrity sha512-HXUa+kLjKu8sKr+kCZeNye9Pv/swRfKGAt/uJ2WUEvCJ4IVIMM1p6iMnOEEk/+3OGE64/PWu3cdE9dLP6izOaA== +"@abp/bootstrap-datepicker@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-7.4.1.tgz#f8f35d0edf71368faaae4e40a72fa846b0084f9b" + integrity sha512-hsu8ty6c2oOevsNoyFTQ4yJAu27qnz82MgRNVS8MRfdzo05/LhBhy/tKFm+PFYJqZULYlpQ1GXUF2+uGyazIeg== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap-daterangepicker@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-7.4.0.tgz#5058fc2a9354f0a71ac5393658e362779a3bdc46" - integrity sha512-EK0wzZUY9H3XPb9U3DvYVqh48fU+6IneNGYOk7dcda8CUYObd4Dl1nXligStCqgn2uePtwxDHRx40eV0GXmU/Q== +"@abp/bootstrap-daterangepicker@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-7.4.1.tgz#b133cefdbed0fa1b8f1bda916a9d46952237238a" + integrity sha512-NpmbsO4Xg48Zmr8OOlf1fxuNMnFIqmRrkHiKp9lP5c8am64+7rRzCwATw2UY0Ud+4n8/ws+Iki1dwPQF6db1zw== dependencies: bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-7.4.0.tgz#71be70660643d8f60d13d355b8c80b16e4854870" - integrity sha512-3Fa+fL5NH+0H2KK4MAaqNsiz0PYwK0+Oxjmd0NgKwcqV2vJzRrzS3WG5kITYjNz9QGdBV+FrhNX/NSRU8LDx3Q== +"@abp/bootstrap@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-7.4.1.tgz#b34a2fcc80e04212865652ee7f4f5498a6a61f6d" + integrity sha512-/qCgfrtNWZ2jui2iL6wd6MLrcxALSEFVBypaz1JK3WjEe7DvFAYvKLl7DugIv039/Sx3mbx/PJiQhx8CVZMsEA== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" bootstrap "^5.1.3" -"@abp/core@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-7.4.0.tgz#8505d446a3b4d80ce476bd3352c1639c7dc486ec" - integrity sha512-yxrnw6eAEIj/CcX5jAwb4xmCsdqWaG+KRcBA8GFvqXbsK94IjqLDiJ3flo+QhGn2DXo40ISxofZop0CgSbP7Ew== +"@abp/core@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-7.4.1.tgz#1d14899ad16aac038806504eb0a5be9318cdcc0c" + integrity sha512-p0BAe2kCtgZmq8pilahmuxmye8DeRXt2KmnFRbmYE3j4d0uComFZpC72QOD1iro8bkmbsHfsHJpiVg4Sp4licw== dependencies: - "@abp/utils" "~7.4.0" + "@abp/utils" "~7.4.1" -"@abp/datatables.net-bs5@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-7.4.0.tgz#52d22e12a2420b402e03148793707d063db0088d" - integrity sha512-VvQv5w0cUpdDD9jX8aUEaLxFrc4A95JlmFnhCYIV1etL8HNOdZvmOThxorsImk31JfpyVYrY/Ze/rnWi2uhVvQ== +"@abp/datatables.net-bs5@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-7.4.1.tgz#821ee4c5db116f9810d65184855cea1fa7d47360" + integrity sha512-jpUzb65lCGYAxs/1qV3pRP8agHwIgZA9gDrudvR8S/3X3kNQWtmeKoFDZ93mhnl3aWPjWFKVrT2LeQeJw5XO5A== dependencies: - "@abp/datatables.net" "~7.4.0" + "@abp/datatables.net" "~7.4.1" datatables.net-bs5 "^1.11.4" -"@abp/datatables.net@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-7.4.0.tgz#9f12a1bb2abd05cd753b5d937d8a0350b2ff74ae" - integrity sha512-StOkMmIkcBUWzD9ToZ5J/hISRWdxbAWjwn7RuFXsoHXcY03mmD86g2oztjrWC5UFnRdpFnsfspTpbNqXFB9Vag== +"@abp/datatables.net@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-7.4.1.tgz#a4501e92e9995da0759b9ce55756fe92c4e8db59" + integrity sha512-BZOOZLH7XrGlX3aFK97cwV9+npsTzALSBo87OgwO2U6UpeFq7yAOvmC0+L9dmIUDISeORn5IFc/zTsSSIQnpHQ== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" datatables.net "^1.11.4" -"@abp/font-awesome@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-7.4.0.tgz#50059083b88706a0f71f55118472b378e4c66163" - integrity sha512-hKoPyM41HHCK6dg+8pQvjYJWzKABBCXrYQAIneMPQZUZqa4JLObKCva9TR7pu6pUp+9OVzg4fQOBM+nwpHtw4g== +"@abp/font-awesome@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-7.4.1.tgz#f6175a989aa64367830723f1dd9c607906716296" + integrity sha512-/ybaz4KROwFdG4Xv0yMTUMXOreDmKy1lKQuntqHEUnIorhXmkgcd5AQQ5AolJ4NmNdPNt1VYrRcTEmdz3nw+FA== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" "@fortawesome/fontawesome-free" "^5.15.4" -"@abp/jquery-form@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-7.4.0.tgz#7ab3be241ee09f1e2843bd1b4d0b0b86d4446e30" - integrity sha512-OmTRuZ7QK1oe2ayNLqEpRJk4Ogk0wt/hIFtJHwQkCtDuCggoR5sQz4vn1vgrD19MxGq07dow5IgjbbhHv1vtEg== +"@abp/jquery-form@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-7.4.1.tgz#67978c41cda204b4c2027d81fc66844379313fa6" + integrity sha512-JZ1D47s/kpTlfMcpD4Jrlh98bhEDsIlWJauvAYaS0EBPIU9V2zHGQ+h9GPFbSPrXe4sYxPSREcsc8KUVMhT5MQ== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-7.4.0.tgz#0c564e39c4997dd9b8af7d2023615a06d6fd9834" - integrity sha512-vFB3RKkDlDXbHlDJ64uo3jWW1IRXwiCaPf+mcB77Wpt5+0Dn7eWqjBT7KyHBrsV08ghIqY/Q4nXntFJrmLcuEA== +"@abp/jquery-validation-unobtrusive@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-7.4.1.tgz#fe5c90ade419e83505884dd50dd5988d766f177b" + integrity sha512-oHHV/ukap+vDvQ8CnEWnOrrsLkHXIcMk+SjNKe/dyK5VzOVLDpMatRFmloLs2igYVXTqDGjmDlTswTFdJUarcQ== dependencies: - "@abp/jquery-validation" "~7.4.0" + "@abp/jquery-validation" "~7.4.1" jquery-validation-unobtrusive "^3.2.12" -"@abp/jquery-validation@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-7.4.0.tgz#f2aaba8f4c023e93f0051cc9a05c6d82fa5c7254" - integrity sha512-vN4srLT5UXAKXpKHbZgySWT+N2DjRYivgtifpZHMTGFLMW14W+tfi5zhR4H4JvqJpuO6ZKNiz15zA1zwEBK0Tw== +"@abp/jquery-validation@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-7.4.1.tgz#c2c06bc28770832a9ad73eac000586faed3bdbe3" + integrity sha512-A5iFT2EWfGHXrBb/ov5f0grZ2o2xkDaYtps/FnDUwBYdIdD8E7bbJsWp6ytvZDciO0XmEqAoVOxmiij7ue/SOg== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" jquery-validation "^1.19.3" -"@abp/jquery@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-7.4.0.tgz#206891b20f250537d05d907d2b6cd682fec76496" - integrity sha512-DeYo02T6WVhdpLloSPb6ooqtpksu1HtcbbQhIP9E1P7jHSzZoNiJvoKXHiFUcj5PYiGKl9d/o89hM/apWzyreQ== +"@abp/jquery@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-7.4.1.tgz#b5e16834e6c7871ad6392612ac8e2de8617eb353" + integrity sha512-X3RcovvRYISHcsb6W3U3iVsofw6yomoiouoB1tSIy2/tvUbu9n7N/3MM0CUujFm/xib7s3z1tVxFssS9smT7sw== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" jquery "~3.6.0" -"@abp/lodash@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-7.4.0.tgz#93f20abee776dbfa7aa45e2e710f2768f262fda5" - integrity sha512-h4Fnjm+VLwp1F3r57B9MrHhwyOYMo5oP285a85zzAYLkhwcDy7f1nbHKHMQ3ZTaeJVmiRnVaH+3sdUdslCRt5g== +"@abp/lodash@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-7.4.1.tgz#d0f84b7b9cbd989d59ebde594ed7acb8bc720b61" + integrity sha512-RFjZCyAPZnpvT0SJbxXzzmMYbuocSWBlezvjAVA8MiTrOXdZO4VyaTFjIuQcAdSrZhtpFGeYWxAjHshVplxMbw== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" lodash "^4.17.21" -"@abp/luxon@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-7.4.0.tgz#2ba7ff307c8f7c24d818a9c33635b86fd6810db9" - integrity sha512-ROCx7aihM+agdYy7Tkz+GiScx68KY5qwGTnj8P7QabGFChzVUic6RuBG+2Obmfonc6uT7Rq0c8JDGrsGNe/w8A== +"@abp/luxon@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-7.4.1.tgz#e0c0947d2b77f98b9cdaf7d1143025879361c3c9" + integrity sha512-k1wh8tT1529MtNC2gSXEIKdimBXBwubXeLisgpIPx6lkJo1Op6pAz2ERwFXeyktqGdYyuFcnewJIxmS7EPtWhg== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" luxon "^2.3.0" -"@abp/malihu-custom-scrollbar-plugin@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-7.4.0.tgz#aba68877481f4339e048f2ae3cfbe93197145a0a" - integrity sha512-Ntodhi4k0HFQmImYTP5SYf/WDm7aUGJLaGsfePm77HJ6DhGgalIGqtM8NiFXzo/3GmMY0XSo8Wxrs1mSCdtsOA== +"@abp/malihu-custom-scrollbar-plugin@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-7.4.1.tgz#aa7ec247197a258277549052780b38fd9e748c6c" + integrity sha512-pm/wIaiRSgGxelOf8AiL4JKFNZOQ6s2WbR6pULiP2HSNCgCpWYJ2s8fvj7VP3lAHIa98v3m8PSMSUhqaANxZ/Q== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-7.4.0.tgz#2490d9c7cdcaeca8d0ba9ebef5e7298caf0c9e09" - integrity sha512-ftsUEgO17GbVawA1GplGFzEeIM4NX004AmS6/fPI3o5isX7o1buF9q9TXdnwUuFEJKZxS4KpveRqzTL5t9k0BQ== +"@abp/moment@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-7.4.1.tgz#1c28ccb13eecdd13695edf8641ca9867b318e37d" + integrity sha512-7vRJyAK5ER9z+LV1xUSAAtWlPlhv8yhM/nHjhC+IQSP/+V1D7VLA6EKxAEexGw7wX6HY8oMOWP9HxDHMb5hKQA== dependencies: moment "^2.9.0" -"@abp/select2@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-7.4.0.tgz#2f455cc991b7bb4df9ed426097bc2996cac12697" - integrity sha512-DwprX4MIoqMzSdh7eFg7EjGIz4ftYZub6jG9Sk3r+sxabbhpbFTxKOpXnhBWYi7L7uTQ8YDFk/5NeXO+Rm50Ww== +"@abp/select2@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-7.4.1.tgz#d7ea53cfec285a06278db362131b7510d5b73900" + integrity sha512-0S66iy7HuB74qqOSDraoF7UvXqz2PrnOKy+3EYMTMskOn4pWaq03JMR8xxEgZ8CtmsrqlE1a4wt1Yt9b3FIc0w== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" select2 "^4.0.13" -"@abp/sweetalert2@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-7.4.0.tgz#db1b4bd45cbabd61172591abc8ce223b5f607c4e" - integrity sha512-XqHPRnTASaRtbJIZYKW1KSKIJ8tynL8DuPCSMjcp4iyUlk+gnzxvbqXeNVjc2ojxj78T/42M/vITNoiiTYuKUw== +"@abp/sweetalert2@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-7.4.1.tgz#6722a40e5115cc341b7543aa0fa3b5a7ae9515b2" + integrity sha512-9jAHrYqCp5qykYfNNbqgESL6egixofVwonjZlb+lLWHAkIX+gQ2ApUNDFSXPtKUh2n9sXhSfF8SSg+BHP/bkCA== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" sweetalert2 "^11.3.6" -"@abp/timeago@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-7.4.0.tgz#245fe09370f38311a67a594c8a3c884aea59cc90" - integrity sha512-khxK6EICUaGCUM1HkACw/8rlPQNssoQvCK64bNqEHBCXgPUmTcqSj5MEGiNOYbgGyWeH2IAMtJEYPqX1g1wqSA== +"@abp/timeago@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-7.4.1.tgz#243d342ba131878ae7f892909c9cae07cf54902b" + integrity sha512-a0Vl2NFwTxzRmH5akWo8BRUxa6sK72z8OoXwUFkZOUqMWBCHK7ffNiN1/fbSgA+7HpSZdDvIthjYwBt57DxLdQ== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" timeago "^1.6.7" -"@abp/toastr@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-7.4.0.tgz#16ba0414a27c9a21bc7556a078b175445edcf608" - integrity sha512-oM4HT2m95cK/9sB4AEQAKUMSGBep6wZTgM/46+o2IvvMdMPrGR2mPu9V9wi3y817FRgY+/qQTfy5TZWyTuIpVQ== +"@abp/toastr@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-7.4.1.tgz#345545a41b6145e54477c6c376193a6dbd62bdda" + integrity sha512-OLCvPJYSrcT2spcq9nO838Q22VhJ63Kdzasz1HugdVNqgcFCCSsqaoXrJGUcf5GrZx7PNloz7uf1I3txYMeZtA== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" toastr "^2.1.4" -"@abp/utils@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-7.4.0.tgz#b31fb6e5dff07463535479a6bb62dc733d7119c8" - integrity sha512-CcR3tfuEsVM60DYL1A0cH6BkUTsasOoBDv/b63uLCoEOq/g8ntelD/SpRSgfDXK74P9M8OE5ZFxlXWDiYuzAFg== +"@abp/utils@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-7.4.1.tgz#2ce4c4d659c2ae9bc23b71b79fa3c6e120eaecaf" + integrity sha512-eFeoOXcz9cVkDKpOfd2VWmpAojASfsqfvACZqi1UmF16OcjsFIkxmIvhh1fpbT4A+eQLbaFFLIsf6gYb//tXhg== dependencies: just-compare "^2.3.0" diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo.Abp.SettingManagement.Application.csproj b/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo.Abp.SettingManagement.Application.csproj index 2f911062df..cf94e76ffd 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo.Abp.SettingManagement.Application.csproj +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo.Abp.SettingManagement.Application.csproj @@ -13,6 +13,7 @@ + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/AbpSettingManagementApplicationModule.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/AbpSettingManagementApplicationModule.cs index 6e9c5704de..47a13dfd23 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/AbpSettingManagementApplicationModule.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/AbpSettingManagementApplicationModule.cs @@ -2,6 +2,7 @@ using Volo.Abp.Emailing; using Volo.Abp.Modularity; using Volo.Abp.Timing; +using Volo.Abp.Users; namespace Volo.Abp.SettingManagement; @@ -10,7 +11,8 @@ namespace Volo.Abp.SettingManagement; typeof(AbpSettingManagementDomainModule), typeof(AbpSettingManagementApplicationContractsModule), typeof(AbpEmailingModule), - typeof(AbpTimingModule) + typeof(AbpTimingModule), + typeof(AbpUsersAbstractionModule) )] public class AbpSettingManagementApplicationModule : AbpModule { diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/UserDeletedEventHandler.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/UserDeletedEventHandler.cs new file mode 100644 index 0000000000..d54b94d8da --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/UserDeletedEventHandler.cs @@ -0,0 +1,27 @@ +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Domain.Entities.Events.Distributed; +using Volo.Abp.EventBus.Distributed; +using Volo.Abp.Settings; +using Volo.Abp.Uow; +using Volo.Abp.Users; + +namespace Volo.Abp.SettingManagement; + +public class UserDeletedEventHandler : + IDistributedEventHandler>, + ITransientDependency +{ + protected ISettingManager SettingManager { get; } + + public UserDeletedEventHandler(ISettingManager settingManager) + { + SettingManager = settingManager; + } + + [UnitOfWork] + public virtual async Task HandleEventAsync(EntityDeletedEto eventData) + { + await SettingManager.DeleteAsync(UserSettingValueProvider.ProviderName, eventData.Entity.Id.ToString()); + } +} diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ISettingManager.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ISettingManager.cs index a907ca2d66..9b718b01c1 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ISettingManager.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ISettingManager.cs @@ -12,4 +12,6 @@ public interface ISettingManager Task> GetAllAsync([NotNull] string providerName, [CanBeNull] string providerKey, bool fallback = true); Task SetAsync([NotNull] string name, [CanBeNull] string value, [NotNull] string providerName, [CanBeNull] string providerKey, bool forceToSet = false); + + Task DeleteAsync(string providerName, string providerKey); } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManager.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManager.cs index 800f2140f5..5439c1213a 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManager.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManager.cs @@ -13,6 +13,7 @@ public class SettingManager : ISettingManager, ISingletonDependency { protected ISettingDefinitionManager SettingDefinitionManager { get; } protected ISettingEncryptionService SettingEncryptionService { get; } + protected ISettingManagementStore SettingManagementStore { get; } protected List Providers => _lazyProviders.Value; protected SettingManagementOptions Options { get; } private readonly Lazy> _lazyProviders; @@ -21,10 +22,12 @@ public class SettingManager : ISettingManager, ISingletonDependency IOptions options, IServiceProvider serviceProvider, ISettingDefinitionManager settingDefinitionManager, - ISettingEncryptionService settingEncryptionService) + ISettingEncryptionService settingEncryptionService, + ISettingManagementStore settingManagementStore) { SettingDefinitionManager = settingDefinitionManager; SettingEncryptionService = settingEncryptionService; + SettingManagementStore = settingManagementStore; Options = options.Value; //TODO: Instead, use IServiceScopeFactory and create a scope..? @@ -160,6 +163,15 @@ public class SettingManager : ISettingManager, ISingletonDependency } } + public virtual async Task DeleteAsync(string providerName, string providerKey) + { + var settings = await SettingManagementStore.GetListAsync(providerName, providerKey); + foreach (var setting in settings) + { + await SettingManagementStore.DeleteAsync(setting.Name, providerName, providerKey); + } + } + protected virtual async Task GetOrNullInternalAsync(string name, string providerName, string providerKey, bool fallback = true) { var setting = await SettingDefinitionManager.GetAsync(name); diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_User_Tests.cs b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_User_Tests.cs index c99ff97ac1..b3f97688b1 100644 --- a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_User_Tests.cs +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_User_Tests.cs @@ -186,4 +186,16 @@ public class SettingManager_User_Tests : SettingsTestBase (await _settingManager.GetOrNullForUserAsync("MySettingWithoutInherit", _testData.User2Id)).ShouldBeNull(); //Does not inherit! (await _settingManager.GetOrNullGlobalAsync("MySettingWithoutInherit")).ShouldBe("default-store-value"); } + + [Fact] + public async Task DeleteAsync() + { + (await _settingManager.GetOrNullForUserAsync("MySetting2", _testData.User1Id)).ShouldBe("user1-store-value"); + (await _settingManager.GetOrNullForUserAsync("MySettingWithoutInherit", _testData.User1Id)).ShouldBe("user1-store-value"); + + await _settingManager.DeleteAsync(UserSettingValueProvider.ProviderName, _testData.User1Id.ToString()); + + (await _settingManager.GetOrNullForUserAsync("MySetting2", _testData.User1Id)).ShouldNotBe("user1-store-value"); + (await _settingManager.GetOrNullForUserAsync("MySettingWithoutInherit", _testData.User1Id)).ShouldNotBe("user1-store-value"); + } } diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/package.json b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/package.json index 27a4565870..f051a7f998 100644 --- a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/package.json +++ b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/package.json @@ -3,7 +3,7 @@ "version": "1.0.0", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~7.4.0", - "@abp/virtual-file-explorer": "~7.4.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "~7.4.1", + "@abp/virtual-file-explorer": "~7.4.1" } } diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/yarn.lock b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/yarn.lock index 7f768e6d3a..bb5e53de55 100644 --- a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/yarn.lock +++ b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/yarn.lock @@ -2,39 +2,39 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-7.4.0.tgz#5088dd82ce343e1123e025848f09b51df988b225" - integrity sha512-teT7I0kgjek/lHzpTg5VOVCQ3IL26nFB43Aa/45fuaSwh9FJd3IJNXGL6xwp85oKaptDYSBXIF4GbrUfp2Ugqg== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~7.4.0" - -"@abp/aspnetcore.mvc.ui.theme.shared@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-7.4.0.tgz#e676444a46214e850b0d916daeeb912774ac381d" - integrity sha512-X+dgdgHGUTyf0zaSPsqQp2ZZWu2+9gIRT4r4/LDgxchHgfNvcKRF8jH/JICcVgGD1adJvZzzDpTefL8CuAIRJA== - dependencies: - "@abp/aspnetcore.mvc.ui" "~7.4.0" - "@abp/bootstrap" "~7.4.0" - "@abp/bootstrap-datepicker" "~7.4.0" - "@abp/bootstrap-daterangepicker" "~7.4.0" - "@abp/datatables.net-bs5" "~7.4.0" - "@abp/font-awesome" "~7.4.0" - "@abp/jquery-form" "~7.4.0" - "@abp/jquery-validation-unobtrusive" "~7.4.0" - "@abp/lodash" "~7.4.0" - "@abp/luxon" "~7.4.0" - "@abp/malihu-custom-scrollbar-plugin" "~7.4.0" - "@abp/moment" "~7.4.0" - "@abp/select2" "~7.4.0" - "@abp/sweetalert2" "~7.4.0" - "@abp/timeago" "~7.4.0" - "@abp/toastr" "~7.4.0" - -"@abp/aspnetcore.mvc.ui@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-7.4.0.tgz#61e1b52d2a940e02242f57007bd3f0fcb583c09a" - integrity sha512-gdoxOBo10DWDYhUq1GVfguC0Ot8PYhoA3VLf88/RatL88BNUUlt0e71uMFcx/gk72fuAE+o9zXn/6nq1wtpSwQ== +"@abp/aspnetcore.mvc.ui.theme.basic@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-7.4.1.tgz#62df78aab8a0b374817fdbab6c6363529b43f925" + integrity sha512-KaPmBlwNjOl1+vwLj5O8J11YHBSRg4y0IIxtgZiculXQNFPHbYAXm8sfTw6Wcsx00STrhvUVJQxYMePNnOTCTg== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~7.4.1" + +"@abp/aspnetcore.mvc.ui.theme.shared@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-7.4.1.tgz#8f8679f5cf80137324ddbec9fcaa67332783e708" + integrity sha512-0uUKuTsi/ikLFUUNEqvrn7KimgsvuK+7m1yZD4o47FQlgGxTyt1zQY9w3K6YyhyC3lsT6qCwiAPIoFOzPkIg/Q== + dependencies: + "@abp/aspnetcore.mvc.ui" "~7.4.1" + "@abp/bootstrap" "~7.4.1" + "@abp/bootstrap-datepicker" "~7.4.1" + "@abp/bootstrap-daterangepicker" "~7.4.1" + "@abp/datatables.net-bs5" "~7.4.1" + "@abp/font-awesome" "~7.4.1" + "@abp/jquery-form" "~7.4.1" + "@abp/jquery-validation-unobtrusive" "~7.4.1" + "@abp/lodash" "~7.4.1" + "@abp/luxon" "~7.4.1" + "@abp/malihu-custom-scrollbar-plugin" "~7.4.1" + "@abp/moment" "~7.4.1" + "@abp/select2" "~7.4.1" + "@abp/sweetalert2" "~7.4.1" + "@abp/timeago" "~7.4.1" + "@abp/toastr" "~7.4.1" + +"@abp/aspnetcore.mvc.ui@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-7.4.1.tgz#49c13718a17569f97b71f978b50f367dff67b8f7" + integrity sha512-EvYrfk0mpSt1jAMZmfFcHoNWEJskzResKp0bflOYsYPsZPuJ5WraKsk4IEEpesYHCyHW5AAb5HBJHeoSbVLh4Q== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -43,185 +43,185 @@ merge-stream "^2.0.0" micromatch "^4.0.2" -"@abp/bootstrap-datepicker@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-7.4.0.tgz#75edc2127ca26d86bfefaa6e37579b06e32de5de" - integrity sha512-HXUa+kLjKu8sKr+kCZeNye9Pv/swRfKGAt/uJ2WUEvCJ4IVIMM1p6iMnOEEk/+3OGE64/PWu3cdE9dLP6izOaA== +"@abp/bootstrap-datepicker@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-7.4.1.tgz#f8f35d0edf71368faaae4e40a72fa846b0084f9b" + integrity sha512-hsu8ty6c2oOevsNoyFTQ4yJAu27qnz82MgRNVS8MRfdzo05/LhBhy/tKFm+PFYJqZULYlpQ1GXUF2+uGyazIeg== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap-daterangepicker@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-7.4.0.tgz#5058fc2a9354f0a71ac5393658e362779a3bdc46" - integrity sha512-EK0wzZUY9H3XPb9U3DvYVqh48fU+6IneNGYOk7dcda8CUYObd4Dl1nXligStCqgn2uePtwxDHRx40eV0GXmU/Q== +"@abp/bootstrap-daterangepicker@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-7.4.1.tgz#b133cefdbed0fa1b8f1bda916a9d46952237238a" + integrity sha512-NpmbsO4Xg48Zmr8OOlf1fxuNMnFIqmRrkHiKp9lP5c8am64+7rRzCwATw2UY0Ud+4n8/ws+Iki1dwPQF6db1zw== dependencies: bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-7.4.0.tgz#71be70660643d8f60d13d355b8c80b16e4854870" - integrity sha512-3Fa+fL5NH+0H2KK4MAaqNsiz0PYwK0+Oxjmd0NgKwcqV2vJzRrzS3WG5kITYjNz9QGdBV+FrhNX/NSRU8LDx3Q== +"@abp/bootstrap@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-7.4.1.tgz#b34a2fcc80e04212865652ee7f4f5498a6a61f6d" + integrity sha512-/qCgfrtNWZ2jui2iL6wd6MLrcxALSEFVBypaz1JK3WjEe7DvFAYvKLl7DugIv039/Sx3mbx/PJiQhx8CVZMsEA== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" bootstrap "^5.1.3" -"@abp/clipboard@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-7.4.0.tgz#f1d147df94ddf3ab53eeeb05aec3d5556064c5d6" - integrity sha512-z/nB1RQN/tmShSRwc9Fv1DsJSNM7+Zg4GnAtvZNpOHJp8LTVmsJWxLoUM7hF896W9E0JKr8tRuCVqulyh3IqKg== +"@abp/clipboard@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-7.4.1.tgz#31329ad4565b5075b486e9ca63fb0ff8a070ff9e" + integrity sha512-/+ylBPs/TEZdwywSSTnj96WoRJPwQnR6vlI+sX7h9wDfSDbMwuSSdETSnDVT21lkl8gonPONFZTL8D1u/KKAhg== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" clipboard "^2.0.8" -"@abp/core@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-7.4.0.tgz#8505d446a3b4d80ce476bd3352c1639c7dc486ec" - integrity sha512-yxrnw6eAEIj/CcX5jAwb4xmCsdqWaG+KRcBA8GFvqXbsK94IjqLDiJ3flo+QhGn2DXo40ISxofZop0CgSbP7Ew== +"@abp/core@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-7.4.1.tgz#1d14899ad16aac038806504eb0a5be9318cdcc0c" + integrity sha512-p0BAe2kCtgZmq8pilahmuxmye8DeRXt2KmnFRbmYE3j4d0uComFZpC72QOD1iro8bkmbsHfsHJpiVg4Sp4licw== dependencies: - "@abp/utils" "~7.4.0" + "@abp/utils" "~7.4.1" -"@abp/datatables.net-bs5@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-7.4.0.tgz#52d22e12a2420b402e03148793707d063db0088d" - integrity sha512-VvQv5w0cUpdDD9jX8aUEaLxFrc4A95JlmFnhCYIV1etL8HNOdZvmOThxorsImk31JfpyVYrY/Ze/rnWi2uhVvQ== +"@abp/datatables.net-bs5@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-7.4.1.tgz#821ee4c5db116f9810d65184855cea1fa7d47360" + integrity sha512-jpUzb65lCGYAxs/1qV3pRP8agHwIgZA9gDrudvR8S/3X3kNQWtmeKoFDZ93mhnl3aWPjWFKVrT2LeQeJw5XO5A== dependencies: - "@abp/datatables.net" "~7.4.0" + "@abp/datatables.net" "~7.4.1" datatables.net-bs5 "^1.11.4" -"@abp/datatables.net@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-7.4.0.tgz#9f12a1bb2abd05cd753b5d937d8a0350b2ff74ae" - integrity sha512-StOkMmIkcBUWzD9ToZ5J/hISRWdxbAWjwn7RuFXsoHXcY03mmD86g2oztjrWC5UFnRdpFnsfspTpbNqXFB9Vag== +"@abp/datatables.net@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-7.4.1.tgz#a4501e92e9995da0759b9ce55756fe92c4e8db59" + integrity sha512-BZOOZLH7XrGlX3aFK97cwV9+npsTzALSBo87OgwO2U6UpeFq7yAOvmC0+L9dmIUDISeORn5IFc/zTsSSIQnpHQ== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" datatables.net "^1.11.4" -"@abp/font-awesome@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-7.4.0.tgz#50059083b88706a0f71f55118472b378e4c66163" - integrity sha512-hKoPyM41HHCK6dg+8pQvjYJWzKABBCXrYQAIneMPQZUZqa4JLObKCva9TR7pu6pUp+9OVzg4fQOBM+nwpHtw4g== +"@abp/font-awesome@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-7.4.1.tgz#f6175a989aa64367830723f1dd9c607906716296" + integrity sha512-/ybaz4KROwFdG4Xv0yMTUMXOreDmKy1lKQuntqHEUnIorhXmkgcd5AQQ5AolJ4NmNdPNt1VYrRcTEmdz3nw+FA== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" "@fortawesome/fontawesome-free" "^5.15.4" -"@abp/jquery-form@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-7.4.0.tgz#7ab3be241ee09f1e2843bd1b4d0b0b86d4446e30" - integrity sha512-OmTRuZ7QK1oe2ayNLqEpRJk4Ogk0wt/hIFtJHwQkCtDuCggoR5sQz4vn1vgrD19MxGq07dow5IgjbbhHv1vtEg== +"@abp/jquery-form@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-7.4.1.tgz#67978c41cda204b4c2027d81fc66844379313fa6" + integrity sha512-JZ1D47s/kpTlfMcpD4Jrlh98bhEDsIlWJauvAYaS0EBPIU9V2zHGQ+h9GPFbSPrXe4sYxPSREcsc8KUVMhT5MQ== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-7.4.0.tgz#0c564e39c4997dd9b8af7d2023615a06d6fd9834" - integrity sha512-vFB3RKkDlDXbHlDJ64uo3jWW1IRXwiCaPf+mcB77Wpt5+0Dn7eWqjBT7KyHBrsV08ghIqY/Q4nXntFJrmLcuEA== +"@abp/jquery-validation-unobtrusive@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-7.4.1.tgz#fe5c90ade419e83505884dd50dd5988d766f177b" + integrity sha512-oHHV/ukap+vDvQ8CnEWnOrrsLkHXIcMk+SjNKe/dyK5VzOVLDpMatRFmloLs2igYVXTqDGjmDlTswTFdJUarcQ== dependencies: - "@abp/jquery-validation" "~7.4.0" + "@abp/jquery-validation" "~7.4.1" jquery-validation-unobtrusive "^3.2.12" -"@abp/jquery-validation@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-7.4.0.tgz#f2aaba8f4c023e93f0051cc9a05c6d82fa5c7254" - integrity sha512-vN4srLT5UXAKXpKHbZgySWT+N2DjRYivgtifpZHMTGFLMW14W+tfi5zhR4H4JvqJpuO6ZKNiz15zA1zwEBK0Tw== +"@abp/jquery-validation@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-7.4.1.tgz#c2c06bc28770832a9ad73eac000586faed3bdbe3" + integrity sha512-A5iFT2EWfGHXrBb/ov5f0grZ2o2xkDaYtps/FnDUwBYdIdD8E7bbJsWp6ytvZDciO0XmEqAoVOxmiij7ue/SOg== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" jquery-validation "^1.19.3" -"@abp/jquery@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-7.4.0.tgz#206891b20f250537d05d907d2b6cd682fec76496" - integrity sha512-DeYo02T6WVhdpLloSPb6ooqtpksu1HtcbbQhIP9E1P7jHSzZoNiJvoKXHiFUcj5PYiGKl9d/o89hM/apWzyreQ== +"@abp/jquery@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-7.4.1.tgz#b5e16834e6c7871ad6392612ac8e2de8617eb353" + integrity sha512-X3RcovvRYISHcsb6W3U3iVsofw6yomoiouoB1tSIy2/tvUbu9n7N/3MM0CUujFm/xib7s3z1tVxFssS9smT7sw== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" jquery "~3.6.0" -"@abp/lodash@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-7.4.0.tgz#93f20abee776dbfa7aa45e2e710f2768f262fda5" - integrity sha512-h4Fnjm+VLwp1F3r57B9MrHhwyOYMo5oP285a85zzAYLkhwcDy7f1nbHKHMQ3ZTaeJVmiRnVaH+3sdUdslCRt5g== +"@abp/lodash@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-7.4.1.tgz#d0f84b7b9cbd989d59ebde594ed7acb8bc720b61" + integrity sha512-RFjZCyAPZnpvT0SJbxXzzmMYbuocSWBlezvjAVA8MiTrOXdZO4VyaTFjIuQcAdSrZhtpFGeYWxAjHshVplxMbw== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" lodash "^4.17.21" -"@abp/luxon@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-7.4.0.tgz#2ba7ff307c8f7c24d818a9c33635b86fd6810db9" - integrity sha512-ROCx7aihM+agdYy7Tkz+GiScx68KY5qwGTnj8P7QabGFChzVUic6RuBG+2Obmfonc6uT7Rq0c8JDGrsGNe/w8A== +"@abp/luxon@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-7.4.1.tgz#e0c0947d2b77f98b9cdaf7d1143025879361c3c9" + integrity sha512-k1wh8tT1529MtNC2gSXEIKdimBXBwubXeLisgpIPx6lkJo1Op6pAz2ERwFXeyktqGdYyuFcnewJIxmS7EPtWhg== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" luxon "^2.3.0" -"@abp/malihu-custom-scrollbar-plugin@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-7.4.0.tgz#aba68877481f4339e048f2ae3cfbe93197145a0a" - integrity sha512-Ntodhi4k0HFQmImYTP5SYf/WDm7aUGJLaGsfePm77HJ6DhGgalIGqtM8NiFXzo/3GmMY0XSo8Wxrs1mSCdtsOA== +"@abp/malihu-custom-scrollbar-plugin@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-7.4.1.tgz#aa7ec247197a258277549052780b38fd9e748c6c" + integrity sha512-pm/wIaiRSgGxelOf8AiL4JKFNZOQ6s2WbR6pULiP2HSNCgCpWYJ2s8fvj7VP3lAHIa98v3m8PSMSUhqaANxZ/Q== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-7.4.0.tgz#2490d9c7cdcaeca8d0ba9ebef5e7298caf0c9e09" - integrity sha512-ftsUEgO17GbVawA1GplGFzEeIM4NX004AmS6/fPI3o5isX7o1buF9q9TXdnwUuFEJKZxS4KpveRqzTL5t9k0BQ== +"@abp/moment@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-7.4.1.tgz#1c28ccb13eecdd13695edf8641ca9867b318e37d" + integrity sha512-7vRJyAK5ER9z+LV1xUSAAtWlPlhv8yhM/nHjhC+IQSP/+V1D7VLA6EKxAEexGw7wX6HY8oMOWP9HxDHMb5hKQA== dependencies: moment "^2.9.0" -"@abp/prismjs@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-7.4.0.tgz#8572f36f853c7054d77d02f3098cd844ee321ed7" - integrity sha512-y/Iy6pddQeVazEITktPot8JOPdAEOVAfmYkTBP3DIIPvoYr3kf6rwfzBUalMw5CEjWZ9BaIszDgFCk5ucNHHwQ== +"@abp/prismjs@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-7.4.1.tgz#df4387dbc2f0c77ddb9b6bd0ade9a5db29b9cee2" + integrity sha512-bI7pEKWy32aRYSb2ZziiH6Teebyd8km+1TXADy1yks9i9G5eLWe4/CSdwWpI4M+8ggM8CsdhrZ6/U+55BpXPQA== dependencies: - "@abp/clipboard" "~7.4.0" - "@abp/core" "~7.4.0" + "@abp/clipboard" "~7.4.1" + "@abp/core" "~7.4.1" prismjs "^1.26.0" -"@abp/select2@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-7.4.0.tgz#2f455cc991b7bb4df9ed426097bc2996cac12697" - integrity sha512-DwprX4MIoqMzSdh7eFg7EjGIz4ftYZub6jG9Sk3r+sxabbhpbFTxKOpXnhBWYi7L7uTQ8YDFk/5NeXO+Rm50Ww== +"@abp/select2@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-7.4.1.tgz#d7ea53cfec285a06278db362131b7510d5b73900" + integrity sha512-0S66iy7HuB74qqOSDraoF7UvXqz2PrnOKy+3EYMTMskOn4pWaq03JMR8xxEgZ8CtmsrqlE1a4wt1Yt9b3FIc0w== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" select2 "^4.0.13" -"@abp/sweetalert2@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-7.4.0.tgz#db1b4bd45cbabd61172591abc8ce223b5f607c4e" - integrity sha512-XqHPRnTASaRtbJIZYKW1KSKIJ8tynL8DuPCSMjcp4iyUlk+gnzxvbqXeNVjc2ojxj78T/42M/vITNoiiTYuKUw== +"@abp/sweetalert2@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-7.4.1.tgz#6722a40e5115cc341b7543aa0fa3b5a7ae9515b2" + integrity sha512-9jAHrYqCp5qykYfNNbqgESL6egixofVwonjZlb+lLWHAkIX+gQ2ApUNDFSXPtKUh2n9sXhSfF8SSg+BHP/bkCA== dependencies: - "@abp/core" "~7.4.0" + "@abp/core" "~7.4.1" sweetalert2 "^11.3.6" -"@abp/timeago@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-7.4.0.tgz#245fe09370f38311a67a594c8a3c884aea59cc90" - integrity sha512-khxK6EICUaGCUM1HkACw/8rlPQNssoQvCK64bNqEHBCXgPUmTcqSj5MEGiNOYbgGyWeH2IAMtJEYPqX1g1wqSA== +"@abp/timeago@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-7.4.1.tgz#243d342ba131878ae7f892909c9cae07cf54902b" + integrity sha512-a0Vl2NFwTxzRmH5akWo8BRUxa6sK72z8OoXwUFkZOUqMWBCHK7ffNiN1/fbSgA+7HpSZdDvIthjYwBt57DxLdQ== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" timeago "^1.6.7" -"@abp/toastr@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-7.4.0.tgz#16ba0414a27c9a21bc7556a078b175445edcf608" - integrity sha512-oM4HT2m95cK/9sB4AEQAKUMSGBep6wZTgM/46+o2IvvMdMPrGR2mPu9V9wi3y817FRgY+/qQTfy5TZWyTuIpVQ== +"@abp/toastr@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-7.4.1.tgz#345545a41b6145e54477c6c376193a6dbd62bdda" + integrity sha512-OLCvPJYSrcT2spcq9nO838Q22VhJ63Kdzasz1HugdVNqgcFCCSsqaoXrJGUcf5GrZx7PNloz7uf1I3txYMeZtA== dependencies: - "@abp/jquery" "~7.4.0" + "@abp/jquery" "~7.4.1" toastr "^2.1.4" -"@abp/utils@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-7.4.0.tgz#b31fb6e5dff07463535479a6bb62dc733d7119c8" - integrity sha512-CcR3tfuEsVM60DYL1A0cH6BkUTsasOoBDv/b63uLCoEOq/g8ntelD/SpRSgfDXK74P9M8OE5ZFxlXWDiYuzAFg== +"@abp/utils@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-7.4.1.tgz#2ce4c4d659c2ae9bc23b71b79fa3c6e120eaecaf" + integrity sha512-eFeoOXcz9cVkDKpOfd2VWmpAojASfsqfvACZqi1UmF16OcjsFIkxmIvhh1fpbT4A+eQLbaFFLIsf6gYb//tXhg== dependencies: just-compare "^2.3.0" -"@abp/virtual-file-explorer@~7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@abp/virtual-file-explorer/-/virtual-file-explorer-7.4.0.tgz#c118e86b4dd31c590d59f11239687d1108c555c3" - integrity sha512-DcNKiqfXR/VzUzfZSSZlUwxOOQyEIKJZNNCb9bUR021XxUK3tmPQTjFU+6ptq1ebRxByz8239zPcXYIjW4im+A== +"@abp/virtual-file-explorer@~7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@abp/virtual-file-explorer/-/virtual-file-explorer-7.4.1.tgz#f08e4d397749c44c0d7e2cbfd6e26641a9c77904" + integrity sha512-Rx10rm9cBtqP7VWWFhIeYO0/gZED6XphxUoN58OLZzKpTHrkNW4gf1P0emVVuxWD/j7M933rXjzSV8CT0Vtt+Q== dependencies: - "@abp/clipboard" "~7.4.0" - "@abp/prismjs" "~7.4.0" + "@abp/clipboard" "~7.4.1" + "@abp/prismjs" "~7.4.1" "@fortawesome/fontawesome-free@^5.15.4": version "5.15.4" diff --git a/npm/lerna.json b/npm/lerna.json index 9b754ccca7..b5395f7a89 100644 --- a/npm/lerna.json +++ b/npm/lerna.json @@ -1,5 +1,5 @@ { - "version": "7.4.0", + "version": "7.4.1", "packages": [ "packs/*" ], diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index a499a098ac..e9e2105e1b 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -44,8 +44,8 @@ }, "private": true, "devDependencies": { - "@abp/ng.theme.lepton-x": "~2.4.0", - "@abp/utils": "~7.4.0", + "@abp/ng.theme.lepton-x": "~2.4.1", + "@abp/utils": "~7.4.1", "@angular-devkit/build-angular": "~16.2.0", "@angular-devkit/core": "~16.2.0", "@angular-devkit/schematics": "~16.2.0", @@ -137,4 +137,3 @@ }, "dependencies": {} } - diff --git a/npm/ng-packs/packages/account-core/package.json b/npm/ng-packs/packages/account-core/package.json index 9f2cba366f..b4bf728796 100644 --- a/npm/ng-packs/packages/account-core/package.json +++ b/npm/ng-packs/packages/account-core/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.account.core", - "version": "7.4.0", + "version": "7.4.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "peerDependencies": { - "@abp/ng.core": "~7.4.0", - "@abp/ng.theme.shared": "~7.4.0", + "@abp/ng.core": "~7.4.1", + "@abp/ng.theme.shared": "~7.4.1", "@angular/common": ">=12.0.0", "@angular/core": ">=12.0.0" }, diff --git a/npm/ng-packs/packages/account/package.json b/npm/ng-packs/packages/account/package.json index 3f33e750fb..b3b2528d23 100644 --- a/npm/ng-packs/packages/account/package.json +++ b/npm/ng-packs/packages/account/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.account", - "version": "7.4.0", + "version": "7.4.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.account.core": "~7.4.0", - "@abp/ng.theme.shared": "~7.4.0", + "@abp/ng.account.core": "~7.4.1", + "@abp/ng.theme.shared": "~7.4.1", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/account/src/lib/account-routing.module.ts b/npm/ng-packs/packages/account/src/lib/account-routing.module.ts index 0b188f3751..a10bde7009 100644 --- a/npm/ng-packs/packages/account/src/lib/account-routing.module.ts +++ b/npm/ng-packs/packages/account/src/lib/account-routing.module.ts @@ -1,8 +1,8 @@ import { NgModule } from '@angular/core'; -import { RouterModule, Routes, mapToCanActivate } from '@angular/router'; +import { RouterModule, Routes } from '@angular/router'; import { - AuthGuard, + authGuard, ReplaceableComponents, ReplaceableRouteContainerComponent, RouterOutletComponent, @@ -14,9 +14,10 @@ import { ManageProfileComponent } from './components/manage-profile/manage-profi import { RegisterComponent } from './components/register/register.component'; import { ResetPasswordComponent } from './components/reset-password/reset-password.component'; import { eAccountComponents } from './enums/components'; -import { AccountExtensionsGuard, AuthenticationFlowGuard } from './guards'; +import { authenticationFlowGuard } from './guards'; +import { accountExtensionsResolver } from './resolvers'; -const canActivate = mapToCanActivate([AuthenticationFlowGuard]); +const canActivate = [authenticationFlowGuard]; const routes: Routes = [ { path: '', pathMatch: 'full', redirectTo: 'login' }, @@ -73,7 +74,8 @@ const routes: Routes = [ { path: 'manage', component: ReplaceableRouteContainerComponent, - canActivate: mapToCanActivate([AuthGuard, AccountExtensionsGuard]), + canActivate: [authGuard], + resolve: [accountExtensionsResolver], data: { replaceableComponent: { key: eAccountComponents.ManageProfile, diff --git a/npm/ng-packs/packages/account/src/lib/guards/authentication-flow.guard.ts b/npm/ng-packs/packages/account/src/lib/guards/authentication-flow.guard.ts index c00cee3156..23c6d8c7e3 100644 --- a/npm/ng-packs/packages/account/src/lib/guards/authentication-flow.guard.ts +++ b/npm/ng-packs/packages/account/src/lib/guards/authentication-flow.guard.ts @@ -1,6 +1,10 @@ import { AuthService, IAbpGuard } from '@abp/ng.core'; import { Injectable, inject } from '@angular/core'; +import { CanActivateFn } from '@angular/router'; +/** + * @deprecated Use `authenticationFlowGuard` *function* instead. + */ @Injectable() export class AuthenticationFlowGuard implements IAbpGuard { protected readonly authService = inject(AuthService); @@ -12,3 +16,12 @@ export class AuthenticationFlowGuard implements IAbpGuard { return false; } } + +export const authenticationFlowGuard: CanActivateFn = () => { + const authService = inject(AuthService); + + if (authService.isInternalAuth) return true; + + authService.navigateToLogin(); + return false; +}; diff --git a/npm/ng-packs/packages/account/src/lib/guards/extensions.guard.ts b/npm/ng-packs/packages/account/src/lib/guards/extensions.guard.ts index 8df8aede51..43345bffc3 100644 --- a/npm/ng-packs/packages/account/src/lib/guards/extensions.guard.ts +++ b/npm/ng-packs/packages/account/src/lib/guards/extensions.guard.ts @@ -17,6 +17,9 @@ import { } from '../tokens/extensions.token'; import { eAccountComponents } from '../enums/components'; +/** + * @deprecated Use `accountExtensionsResolver` *function* instead. + */ @Injectable() export class AccountExtensionsGuard implements IAbpGuard { protected readonly configState = inject(ConfigStateService); diff --git a/npm/ng-packs/packages/account/src/lib/resolvers/extensions.resolver.ts b/npm/ng-packs/packages/account/src/lib/resolvers/extensions.resolver.ts new file mode 100644 index 0000000000..19e29b1e54 --- /dev/null +++ b/npm/ng-packs/packages/account/src/lib/resolvers/extensions.resolver.ts @@ -0,0 +1,36 @@ +import { inject } from '@angular/core'; +import { ConfigStateService } from '@abp/ng.core'; +import { map, tap } from 'rxjs'; +import { + ExtensionsService, + getObjectExtensionEntitiesFromStore, + mapEntitiesToContributors, + mergeWithDefaultProps, +} from '@abp/ng.theme.shared/extensions'; +import { eAccountComponents } from '../enums'; +import { ACCOUNT_EDIT_FORM_PROP_CONTRIBUTORS, DEFAULT_ACCOUNT_FORM_PROPS } from '../tokens'; +import { ResolveFn } from '@angular/router'; + +export const accountExtensionsResolver: ResolveFn = () => { + const configState = inject(ConfigStateService); + const extensions = inject(ExtensionsService); + + const config = { optional: true }; + + const editFormContributors = inject(ACCOUNT_EDIT_FORM_PROP_CONTRIBUTORS, config) || {}; + + return getObjectExtensionEntitiesFromStore(configState, 'Identity').pipe( + map(entities => ({ + [eAccountComponents.PersonalSettings]: entities.User, + })), + mapEntitiesToContributors(configState, 'AbpIdentity'), + tap(objectExtensionContributors => { + mergeWithDefaultProps( + extensions.editFormProps, + DEFAULT_ACCOUNT_FORM_PROPS, + objectExtensionContributors.editForm, + editFormContributors, + ); + }), + ); +}; diff --git a/npm/ng-packs/packages/account/src/lib/resolvers/index.ts b/npm/ng-packs/packages/account/src/lib/resolvers/index.ts new file mode 100644 index 0000000000..754a8ccf12 --- /dev/null +++ b/npm/ng-packs/packages/account/src/lib/resolvers/index.ts @@ -0,0 +1 @@ +export * from './extensions.resolver' \ No newline at end of file diff --git a/npm/ng-packs/packages/account/src/public-api.ts b/npm/ng-packs/packages/account/src/public-api.ts index a383562c15..f9df16ebc7 100644 --- a/npm/ng-packs/packages/account/src/public-api.ts +++ b/npm/ng-packs/packages/account/src/public-api.ts @@ -6,3 +6,4 @@ export * from './lib/models'; export * from './lib/services'; export * from './lib/tokens'; export * from './lib/utils'; +export * from './lib/resolvers'; diff --git a/npm/ng-packs/packages/components/package.json b/npm/ng-packs/packages/components/package.json index 1dab4b4b6e..e9084eb9c0 100644 --- a/npm/ng-packs/packages/components/package.json +++ b/npm/ng-packs/packages/components/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.components", - "version": "7.4.0", + "version": "7.4.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "peerDependencies": { - "@abp/ng.core": ">=7.4.0", - "@abp/ng.theme.shared": ">=7.4.0" + "@abp/ng.core": ">=7.4.1", + "@abp/ng.theme.shared": ">=7.4.1" }, "dependencies": { "chart.js": "^3.5.1", diff --git a/npm/ng-packs/packages/core/package.json b/npm/ng-packs/packages/core/package.json index 1261fe6ee8..214e672d8f 100644 --- a/npm/ng-packs/packages/core/package.json +++ b/npm/ng-packs/packages/core/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.core", - "version": "7.4.0", + "version": "7.4.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/utils": "~7.4.0", + "@abp/utils": "~7.4.1", "angular-oauth2-oidc": "^15.0.1", "just-clone": "^6.1.1", "just-compare": "^2.3.0", diff --git a/npm/ng-packs/packages/core/src/lib/abstracts/auth.guard.ts b/npm/ng-packs/packages/core/src/lib/abstracts/auth.guard.ts index 8fb4f4dc25..50473e4df1 100644 --- a/npm/ng-packs/packages/core/src/lib/abstracts/auth.guard.ts +++ b/npm/ng-packs/packages/core/src/lib/abstracts/auth.guard.ts @@ -2,7 +2,11 @@ import { Injectable } from '@angular/core'; import { UrlTree } from '@angular/router'; import { Observable } from 'rxjs'; import { IAbpGuard } from './abstract-guard'; +import { CanActivateFn } from '@angular/router'; +/** + * @deprecated Use `authGuard` *function* instead. + */ @Injectable({ providedIn: 'root', }) @@ -12,3 +16,8 @@ export class AuthGuard implements IAbpGuard { return false; } } + +export const authGuard: CanActivateFn = () => { + console.error('You should add @abp/ng-oauth packages or create your own auth packages.'); + return false; +}; diff --git a/npm/ng-packs/packages/core/src/lib/guards/permission.guard.ts b/npm/ng-packs/packages/core/src/lib/guards/permission.guard.ts index ae3fdb6e37..342c73b572 100644 --- a/npm/ng-packs/packages/core/src/lib/guards/permission.guard.ts +++ b/npm/ng-packs/packages/core/src/lib/guards/permission.guard.ts @@ -1,23 +1,26 @@ import { Injectable, inject } from '@angular/core'; -import { ActivatedRouteSnapshot, Router, RouterStateSnapshot } from '@angular/router'; +import { + ActivatedRouteSnapshot, + CanActivateFn, + Router, + RouterStateSnapshot, +} from '@angular/router'; import { HttpErrorResponse } from '@angular/common/http'; - import { Observable, of } from 'rxjs'; import { tap } from 'rxjs/operators'; - -import { OAuthService } from 'angular-oauth2-oidc'; - -import { IAbpGuard } from '../abstracts'; +import { AuthService, IAbpGuard } from '../abstracts'; import { findRoute, getRoutePath } from '../utils/route-utils'; import { RoutesService, PermissionService, HttpErrorReporterService } from '../services'; - +/** + * @deprecated Use `permissionGuard` *function* instead. + */ @Injectable({ providedIn: 'root', }) export class PermissionGuard implements IAbpGuard { protected readonly router = inject(Router); protected readonly routesService = inject(RoutesService); - protected readonly oAuthService = inject(OAuthService); + protected readonly authService = inject(AuthService); protected readonly permissionService = inject(PermissionService); protected readonly httpErrorReporter = inject(HttpErrorReporterService); @@ -33,10 +36,38 @@ export class PermissionGuard implements IAbpGuard { return this.permissionService.getGrantedPolicy$(requiredPolicy).pipe( tap(access => { - if (!access && this.oAuthService.hasValidAccessToken()) { + if (!access && this.authService.isAuthenticated) { this.httpErrorReporter.reportError({ status: 403 } as HttpErrorResponse); } }), ); } } + +export const permissionGuard: CanActivateFn = ( + route: ActivatedRouteSnapshot, + state: RouterStateSnapshot, +) => { + const router = inject(Router); + const routesService = inject(RoutesService); + const authService = inject(AuthService); + const permissionService = inject(PermissionService); + const httpErrorReporter = inject(HttpErrorReporterService); + + let { requiredPolicy } = route.data || {}; + + if (!requiredPolicy) { + const routeFound = findRoute(routesService, getRoutePath(router, state.url)); + requiredPolicy = routeFound?.requiredPolicy; + } + + if (!requiredPolicy) return of(true); + + return permissionService.getGrantedPolicy$(requiredPolicy).pipe( + tap(access => { + if (!access && authService.isAuthenticated) { + httpErrorReporter.reportError({ status: 403 } as HttpErrorResponse); + } + }), + ); +}; diff --git a/npm/ng-packs/packages/feature-management/package.json b/npm/ng-packs/packages/feature-management/package.json index b07018c81e..de497ea449 100644 --- a/npm/ng-packs/packages/feature-management/package.json +++ b/npm/ng-packs/packages/feature-management/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.feature-management", - "version": "7.4.0", + "version": "7.4.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~7.4.0", + "@abp/ng.theme.shared": "~7.4.1", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/generators/package.json b/npm/ng-packs/packages/generators/package.json index 0a6721043d..eefbafd941 100644 --- a/npm/ng-packs/packages/generators/package.json +++ b/npm/ng-packs/packages/generators/package.json @@ -1,6 +1,6 @@ { "name": "@abp/nx.generators", - "version": "7.4.0", + "version": "7.4.1", "homepage": "https://abp.io", "generators": "./generators.json", "type": "commonjs", diff --git a/npm/ng-packs/packages/identity/package.json b/npm/ng-packs/packages/identity/package.json index 8b00379187..8df039e253 100644 --- a/npm/ng-packs/packages/identity/package.json +++ b/npm/ng-packs/packages/identity/package.json @@ -1,15 +1,15 @@ { "name": "@abp/ng.identity", - "version": "7.4.0", + "version": "7.4.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.components": "~7.4.0", - "@abp/ng.permission-management": "~7.4.0", - "@abp/ng.theme.shared": "~7.4.0", + "@abp/ng.components": "~7.4.1", + "@abp/ng.permission-management": "~7.4.1", + "@abp/ng.theme.shared": "~7.4.1", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/identity/src/lib/guards/extensions.guard.ts b/npm/ng-packs/packages/identity/src/lib/guards/extensions.guard.ts index 172b599f91..74dab0745a 100644 --- a/npm/ng-packs/packages/identity/src/lib/guards/extensions.guard.ts +++ b/npm/ng-packs/packages/identity/src/lib/guards/extensions.guard.ts @@ -26,6 +26,9 @@ import { IDENTITY_TOOLBAR_ACTION_CONTRIBUTORS, } from '../tokens/extensions.token'; +/** + * @deprecated Use `identityExtensionsResolver` *function* instead. + */ @Injectable() export class IdentityExtensionsGuard implements IAbpGuard { protected readonly configState = inject(ConfigStateService); diff --git a/npm/ng-packs/packages/identity/src/lib/identity-routing.module.ts b/npm/ng-packs/packages/identity/src/lib/identity-routing.module.ts index 33c8f53d5a..93ac912d97 100644 --- a/npm/ng-packs/packages/identity/src/lib/identity-routing.module.ts +++ b/npm/ng-packs/packages/identity/src/lib/identity-routing.module.ts @@ -1,9 +1,9 @@ import { NgModule } from '@angular/core'; -import { RouterModule, Routes, mapToCanActivate } from '@angular/router'; +import { RouterModule, Routes } from '@angular/router'; import { - AuthGuard, - PermissionGuard, + authGuard, + permissionGuard, ReplaceableComponents, ReplaceableRouteContainerComponent, RouterOutletComponent, @@ -12,14 +12,15 @@ import { import { RolesComponent } from './components/roles/roles.component'; import { UsersComponent } from './components/users/users.component'; import { eIdentityComponents } from './enums/components'; -import { IdentityExtensionsGuard } from './guards'; +import { identityExtensionsResolver } from './resolvers'; const routes: Routes = [ { path: '', redirectTo: 'roles', pathMatch: 'full' }, { path: '', component: RouterOutletComponent, - canActivate: mapToCanActivate([AuthGuard, PermissionGuard, IdentityExtensionsGuard]), + canActivate: [authGuard, permissionGuard], + resolve: [identityExtensionsResolver], children: [ { path: 'roles', diff --git a/npm/ng-packs/packages/identity/src/lib/resolvers/extensions.resolver.ts b/npm/ng-packs/packages/identity/src/lib/resolvers/extensions.resolver.ts new file mode 100644 index 0000000000..1a303e50c4 --- /dev/null +++ b/npm/ng-packs/packages/identity/src/lib/resolvers/extensions.resolver.ts @@ -0,0 +1,75 @@ +import { inject } from '@angular/core'; +import { map, tap } from 'rxjs'; +import { ConfigStateService } from '@abp/ng.core'; +import { + ExtensionsService, + getObjectExtensionEntitiesFromStore, + mapEntitiesToContributors, + mergeWithDefaultActions, + mergeWithDefaultProps, +} from '@abp/ng.theme.shared/extensions'; +import { eIdentityComponents } from '../enums'; +import { + IDENTITY_ENTITY_ACTION_CONTRIBUTORS, + IDENTITY_TOOLBAR_ACTION_CONTRIBUTORS, + IDENTITY_ENTITY_PROP_CONTRIBUTORS, + IDENTITY_CREATE_FORM_PROP_CONTRIBUTORS, + IDENTITY_EDIT_FORM_PROP_CONTRIBUTORS, + DEFAULT_IDENTITY_ENTITY_ACTIONS, + DEFAULT_IDENTITY_TOOLBAR_ACTIONS, + DEFAULT_IDENTITY_ENTITY_PROPS, + DEFAULT_IDENTITY_CREATE_FORM_PROPS, + DEFAULT_IDENTITY_EDIT_FORM_PROPS, +} from '../tokens'; +import { ResolveFn } from '@angular/router'; + +export const identityExtensionsResolver: ResolveFn = () => { + const configState = inject(ConfigStateService); + const extensions = inject(ExtensionsService); + + const config = { optional: true }; + + const actionContributors = inject(IDENTITY_ENTITY_ACTION_CONTRIBUTORS, config) || {}; + const toolbarContributors = inject(IDENTITY_TOOLBAR_ACTION_CONTRIBUTORS, config) || {}; + const propContributors = inject(IDENTITY_ENTITY_PROP_CONTRIBUTORS, config) || {}; + const createFormContributors = inject(IDENTITY_CREATE_FORM_PROP_CONTRIBUTORS, config) || {}; + const editFormContributors = inject(IDENTITY_EDIT_FORM_PROP_CONTRIBUTORS, config) || {}; + + return getObjectExtensionEntitiesFromStore(configState, 'Identity').pipe( + map(entities => ({ + [eIdentityComponents.Roles]: entities.Role, + [eIdentityComponents.Users]: entities.User, + })), + mapEntitiesToContributors(configState, 'AbpIdentity'), + tap(objectExtensionContributors => { + mergeWithDefaultActions( + extensions.entityActions, + DEFAULT_IDENTITY_ENTITY_ACTIONS, + actionContributors, + ); + mergeWithDefaultActions( + extensions.toolbarActions, + DEFAULT_IDENTITY_TOOLBAR_ACTIONS, + toolbarContributors, + ); + mergeWithDefaultProps( + extensions.entityProps, + DEFAULT_IDENTITY_ENTITY_PROPS, + objectExtensionContributors.prop, + propContributors, + ); + mergeWithDefaultProps( + extensions.createFormProps, + DEFAULT_IDENTITY_CREATE_FORM_PROPS, + objectExtensionContributors.createForm, + createFormContributors, + ); + mergeWithDefaultProps( + extensions.editFormProps, + DEFAULT_IDENTITY_EDIT_FORM_PROPS, + objectExtensionContributors.editForm, + editFormContributors, + ); + }), + ); +}; diff --git a/npm/ng-packs/packages/identity/src/lib/resolvers/index.ts b/npm/ng-packs/packages/identity/src/lib/resolvers/index.ts new file mode 100644 index 0000000000..754a8ccf12 --- /dev/null +++ b/npm/ng-packs/packages/identity/src/lib/resolvers/index.ts @@ -0,0 +1 @@ +export * from './extensions.resolver' \ No newline at end of file diff --git a/npm/ng-packs/packages/identity/src/public-api.ts b/npm/ng-packs/packages/identity/src/public-api.ts index 7e85188004..4c4913f7eb 100644 --- a/npm/ng-packs/packages/identity/src/public-api.ts +++ b/npm/ng-packs/packages/identity/src/public-api.ts @@ -4,3 +4,4 @@ export * from './lib/guards'; export * from './lib/identity.module'; export * from './lib/models'; export * from './lib/tokens'; +export * from './lib/resolvers'; diff --git a/npm/ng-packs/packages/oauth/package.json b/npm/ng-packs/packages/oauth/package.json index 04580b0c1e..b9dda531bb 100644 --- a/npm/ng-packs/packages/oauth/package.json +++ b/npm/ng-packs/packages/oauth/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.oauth", - "version": "7.4.0", + "version": "7.4.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.core": "~7.4.0", - "@abp/utils": "~7.4.0", + "@abp/ng.core": "~7.4.1", + "@abp/utils": "~7.4.1", "angular-oauth2-oidc": "^15.0.1", "just-clone": "^6.1.1", "just-compare": "^2.3.0", diff --git a/npm/ng-packs/packages/oauth/src/lib/guards/oauth.guard.ts b/npm/ng-packs/packages/oauth/src/lib/guards/oauth.guard.ts index 2571a1756c..6f751804cd 100644 --- a/npm/ng-packs/packages/oauth/src/lib/guards/oauth.guard.ts +++ b/npm/ng-packs/packages/oauth/src/lib/guards/oauth.guard.ts @@ -1,11 +1,19 @@ import { Injectable, inject } from '@angular/core'; -import { UrlTree, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; +import { + UrlTree, + ActivatedRouteSnapshot, + RouterStateSnapshot, + CanActivateFn, +} from '@angular/router'; import { Observable } from 'rxjs'; import { OAuthService } from 'angular-oauth2-oidc'; import { AuthService, IAbpGuard } from '@abp/ng.core'; +/** + * @deprecated Use `abpOAuthGuard` *function* instead. + */ @Injectable({ providedIn: 'root', }) @@ -27,3 +35,21 @@ export class AbpOAuthGuard implements IAbpGuard { return false; } } + +export const abpOAuthGuard: CanActivateFn = ( + route: ActivatedRouteSnapshot, + state: RouterStateSnapshot, +) => { + const oAuthService = inject(OAuthService); + const authService = inject(AuthService); + + const hasValidAccessToken = oAuthService.hasValidAccessToken(); + + if (hasValidAccessToken) { + return true; + } + + const params = { returnUrl: state.url }; + authService.navigateToLogin(params); + return false; +}; diff --git a/npm/ng-packs/packages/oauth/src/lib/oauth.module.ts b/npm/ng-packs/packages/oauth/src/lib/oauth.module.ts index ac800e7c8f..a222b6327b 100644 --- a/npm/ng-packs/packages/oauth/src/lib/oauth.module.ts +++ b/npm/ng-packs/packages/oauth/src/lib/oauth.module.ts @@ -4,7 +4,7 @@ import { OAuthModule, OAuthStorage } from 'angular-oauth2-oidc'; import { AbpLocalStorageService, ApiInterceptor, - AuthGuard, + authGuard, AuthService, CHECK_AUTHENTICATION_STATE_FN_KEY, noop, @@ -14,7 +14,7 @@ import { AbpOAuthService } from './services'; import { OAuthConfigurationHandler } from './handlers/oauth-configuration.handler'; import { HTTP_INTERCEPTORS } from '@angular/common/http'; import { OAuthApiInterceptor } from './interceptors/api.interceptor'; -import { AbpOAuthGuard } from './guards/oauth.guard'; +import { abpOAuthGuard } from './guards/oauth.guard'; import { NavigateToManageProfileProvider } from './providers'; import { checkAccessToken, pipeToLogin } from './utils'; @@ -31,8 +31,8 @@ export class AbpOAuthModule { useClass: AbpOAuthService, }, { - provide: AuthGuard, - useClass: AbpOAuthGuard, + provide: authGuard, + useValue: abpOAuthGuard, }, { provide: ApiInterceptor, diff --git a/npm/ng-packs/packages/oauth/src/lib/utils/auth-utils.ts b/npm/ng-packs/packages/oauth/src/lib/utils/auth-utils.ts index f1dc5b6106..bd50e97ee7 100644 --- a/npm/ng-packs/packages/oauth/src/lib/utils/auth-utils.ts +++ b/npm/ng-packs/packages/oauth/src/lib/utils/auth-utils.ts @@ -1,6 +1,5 @@ -import { inject, Injector } from '@angular/core'; +import { Injector } from '@angular/core'; import { Router } from '@angular/router'; -import { OAuthStorage, TokenResponse } from 'angular-oauth2-oidc'; import { pipe } from 'rxjs'; import { switchMap, tap } from 'rxjs/operators'; import { diff --git a/npm/ng-packs/packages/permission-management/package.json b/npm/ng-packs/packages/permission-management/package.json index 692bb6c2be..ee9c2ebfaa 100644 --- a/npm/ng-packs/packages/permission-management/package.json +++ b/npm/ng-packs/packages/permission-management/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.permission-management", - "version": "7.4.0", + "version": "7.4.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~7.4.0", + "@abp/ng.theme.shared": "~7.4.1", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/schematics/package.json b/npm/ng-packs/packages/schematics/package.json index e8655768b9..7d613dee16 100644 --- a/npm/ng-packs/packages/schematics/package.json +++ b/npm/ng-packs/packages/schematics/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.schematics", - "version": "7.4.0", + "version": "7.4.1", "author": "", "schematics": "./collection.json", "dependencies": { diff --git a/npm/ng-packs/packages/setting-management/package.json b/npm/ng-packs/packages/setting-management/package.json index 47658075b7..919d96f13d 100644 --- a/npm/ng-packs/packages/setting-management/package.json +++ b/npm/ng-packs/packages/setting-management/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.setting-management", - "version": "7.4.0", + "version": "7.4.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.components": "~7.4.0", - "@abp/ng.theme.shared": "~7.4.0", + "@abp/ng.components": "~7.4.1", + "@abp/ng.theme.shared": "~7.4.1", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/setting-management/src/lib/setting-management-routing.module.ts b/npm/ng-packs/packages/setting-management/src/lib/setting-management-routing.module.ts index 1fc5fd7c7b..b642bc176e 100644 --- a/npm/ng-packs/packages/setting-management/src/lib/setting-management-routing.module.ts +++ b/npm/ng-packs/packages/setting-management/src/lib/setting-management-routing.module.ts @@ -1,7 +1,7 @@ import { NgModule } from '@angular/core'; -import { RouterModule, Routes, mapToCanActivate } from '@angular/router'; +import { RouterModule, Routes } from '@angular/router'; import { - AuthGuard, + authGuard, ReplaceableComponents, ReplaceableRouteContainerComponent, RouterOutletComponent, @@ -13,7 +13,7 @@ const routes: Routes = [ { path: '', component: RouterOutletComponent, - canActivate: mapToCanActivate([AuthGuard]), + canActivate: [authGuard], children: [ { path: '', diff --git a/npm/ng-packs/packages/tenant-management/package.json b/npm/ng-packs/packages/tenant-management/package.json index 6e3035220f..7b98e6c2af 100644 --- a/npm/ng-packs/packages/tenant-management/package.json +++ b/npm/ng-packs/packages/tenant-management/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.tenant-management", - "version": "7.4.0", + "version": "7.4.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.feature-management": "~7.4.0", - "@abp/ng.theme.shared": "~7.4.0", + "@abp/ng.feature-management": "~7.4.1", + "@abp/ng.theme.shared": "~7.4.1", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/tenant-management/src/lib/guards/extensions.guard.ts b/npm/ng-packs/packages/tenant-management/src/lib/guards/extensions.guard.ts index bdadb7e78a..42e0b50d75 100644 --- a/npm/ng-packs/packages/tenant-management/src/lib/guards/extensions.guard.ts +++ b/npm/ng-packs/packages/tenant-management/src/lib/guards/extensions.guard.ts @@ -26,6 +26,9 @@ import { TENANT_MANAGEMENT_TOOLBAR_ACTION_CONTRIBUTORS, } from '../tokens/extensions.token'; +/** + * @deprecated Use `tenantManagementExtensionsResolver` *function* instead. + */ @Injectable() export class TenantManagementExtensionsGuard implements IAbpGuard { protected readonly configState = inject(ConfigStateService); @@ -81,3 +84,5 @@ export class TenantManagementExtensionsGuard implements IAbpGuard { ); } } + + diff --git a/npm/ng-packs/packages/tenant-management/src/lib/resolvers/extensions.resolver.ts b/npm/ng-packs/packages/tenant-management/src/lib/resolvers/extensions.resolver.ts new file mode 100644 index 0000000000..609f048465 --- /dev/null +++ b/npm/ng-packs/packages/tenant-management/src/lib/resolvers/extensions.resolver.ts @@ -0,0 +1,75 @@ +import { inject } from '@angular/core'; +import { map, tap } from 'rxjs'; +import { ConfigStateService } from '@abp/ng.core'; +import { + ExtensionsService, + getObjectExtensionEntitiesFromStore, + mapEntitiesToContributors, + mergeWithDefaultActions, + mergeWithDefaultProps, +} from '@abp/ng.theme.shared/extensions'; +import { eTenantManagementComponents } from '../enums'; +import { + TENANT_MANAGEMENT_ENTITY_ACTION_CONTRIBUTORS, + TENANT_MANAGEMENT_TOOLBAR_ACTION_CONTRIBUTORS, + TENANT_MANAGEMENT_ENTITY_PROP_CONTRIBUTORS, + TENANT_MANAGEMENT_CREATE_FORM_PROP_CONTRIBUTORS, + TENANT_MANAGEMENT_EDIT_FORM_PROP_CONTRIBUTORS, + DEFAULT_TENANT_MANAGEMENT_ENTITY_ACTIONS, + DEFAULT_TENANT_MANAGEMENT_TOOLBAR_ACTIONS, + DEFAULT_TENANT_MANAGEMENT_ENTITY_PROPS, + DEFAULT_TENANT_MANAGEMENT_CREATE_FORM_PROPS, + DEFAULT_TENANT_MANAGEMENT_EDIT_FORM_PROPS, +} from '../tokens'; +import { ResolveFn } from '@angular/router'; + +export const tenantManagementExtensionsResolver: ResolveFn = () => { + const configState = inject(ConfigStateService); + const extensions = inject(ExtensionsService); + + const config = { optional: true }; + + const actionContributors = inject(TENANT_MANAGEMENT_ENTITY_ACTION_CONTRIBUTORS, config) || {}; + const toolbarContributors = inject(TENANT_MANAGEMENT_TOOLBAR_ACTION_CONTRIBUTORS, config) || {}; + const propContributors = inject(TENANT_MANAGEMENT_ENTITY_PROP_CONTRIBUTORS, config) || {}; + const createFormContributors = + inject(TENANT_MANAGEMENT_CREATE_FORM_PROP_CONTRIBUTORS, config) || {}; + const editFormContributors = inject(TENANT_MANAGEMENT_EDIT_FORM_PROP_CONTRIBUTORS, config) || {}; + + return getObjectExtensionEntitiesFromStore(configState, 'TenantManagement').pipe( + map(entities => ({ + [eTenantManagementComponents.Tenants]: entities.Tenant, + })), + mapEntitiesToContributors(configState, 'TenantManagement'), + tap(objectExtensionContributors => { + mergeWithDefaultActions( + extensions.entityActions, + DEFAULT_TENANT_MANAGEMENT_ENTITY_ACTIONS, + actionContributors, + ); + mergeWithDefaultActions( + extensions.toolbarActions, + DEFAULT_TENANT_MANAGEMENT_TOOLBAR_ACTIONS, + toolbarContributors, + ); + mergeWithDefaultProps( + extensions.entityProps, + DEFAULT_TENANT_MANAGEMENT_ENTITY_PROPS, + objectExtensionContributors.prop, + propContributors, + ); + mergeWithDefaultProps( + extensions.createFormProps, + DEFAULT_TENANT_MANAGEMENT_CREATE_FORM_PROPS, + objectExtensionContributors.createForm, + createFormContributors, + ); + mergeWithDefaultProps( + extensions.editFormProps, + DEFAULT_TENANT_MANAGEMENT_EDIT_FORM_PROPS, + objectExtensionContributors.editForm, + editFormContributors, + ); + }), + ); +}; diff --git a/npm/ng-packs/packages/tenant-management/src/lib/resolvers/index.ts b/npm/ng-packs/packages/tenant-management/src/lib/resolvers/index.ts new file mode 100644 index 0000000000..754a8ccf12 --- /dev/null +++ b/npm/ng-packs/packages/tenant-management/src/lib/resolvers/index.ts @@ -0,0 +1 @@ +export * from './extensions.resolver' \ No newline at end of file diff --git a/npm/ng-packs/packages/tenant-management/src/lib/tenant-management-routing.module.ts b/npm/ng-packs/packages/tenant-management/src/lib/tenant-management-routing.module.ts index 06e2f0369e..2fcce5e108 100644 --- a/npm/ng-packs/packages/tenant-management/src/lib/tenant-management-routing.module.ts +++ b/npm/ng-packs/packages/tenant-management/src/lib/tenant-management-routing.module.ts @@ -1,9 +1,9 @@ import { NgModule } from '@angular/core'; -import { RouterModule, Routes, mapToCanActivate } from '@angular/router'; +import { RouterModule, Routes } from '@angular/router'; import { - AuthGuard, - PermissionGuard, + authGuard, + permissionGuard, ReplaceableComponents, ReplaceableRouteContainerComponent, RouterOutletComponent, @@ -11,14 +11,15 @@ import { import { TenantsComponent } from './components/tenants/tenants.component'; import { eTenantManagementComponents } from './enums/components'; -import { TenantManagementExtensionsGuard } from './guards'; +import { tenantManagementExtensionsResolver } from './resolvers'; const routes: Routes = [ { path: '', redirectTo: 'tenants', pathMatch: 'full' }, { path: '', component: RouterOutletComponent, - canActivate: mapToCanActivate([AuthGuard, PermissionGuard, TenantManagementExtensionsGuard]), + canActivate: [authGuard, permissionGuard], + resolve: [tenantManagementExtensionsResolver], children: [ { path: 'tenants', diff --git a/npm/ng-packs/packages/tenant-management/src/public-api.ts b/npm/ng-packs/packages/tenant-management/src/public-api.ts index 6321ce8fae..f39c438435 100644 --- a/npm/ng-packs/packages/tenant-management/src/public-api.ts +++ b/npm/ng-packs/packages/tenant-management/src/public-api.ts @@ -4,3 +4,4 @@ export * from './lib/guards'; export * from './lib/models'; export * from './lib/tenant-management.module'; export * from './lib/tokens'; +export * from './lib/resolvers'; diff --git a/npm/ng-packs/packages/theme-basic/package.json b/npm/ng-packs/packages/theme-basic/package.json index 09644b6e90..66fb3a6686 100644 --- a/npm/ng-packs/packages/theme-basic/package.json +++ b/npm/ng-packs/packages/theme-basic/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.theme.basic", - "version": "7.4.0", + "version": "7.4.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.account.core": "~7.4.0", - "@abp/ng.theme.shared": "~7.4.0", + "@abp/ng.account.core": "~7.4.1", + "@abp/ng.theme.shared": "~7.4.1", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/theme-shared/package.json b/npm/ng-packs/packages/theme-shared/package.json index 5c0fc9610d..b3118175e5 100644 --- a/npm/ng-packs/packages/theme-shared/package.json +++ b/npm/ng-packs/packages/theme-shared/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.theme.shared", - "version": "7.4.0", + "version": "7.4.1", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.core": "~7.4.0", + "@abp/ng.core": "~7.4.1", "@fortawesome/fontawesome-free": "^5.15.4", "@ng-bootstrap/ng-bootstrap": "^15.0.0", "@ngx-validate/core": "^0.2.0", diff --git a/npm/packs/anchor-js/package.json b/npm/packs/anchor-js/package.json index 8b3542378a..1784f53c7a 100644 --- a/npm/packs/anchor-js/package.json +++ b/npm/packs/anchor-js/package.json @@ -1,11 +1,11 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/anchor-js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~7.4.0", + "@abp/core": "~7.4.1", "anchor-js": "^4.3.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/aspnetcore.components.server.basictheme/package.json b/npm/packs/aspnetcore.components.server.basictheme/package.json index ee04c0e990..13bac6c467 100644 --- a/npm/packs/aspnetcore.components.server.basictheme/package.json +++ b/npm/packs/aspnetcore.components.server.basictheme/package.json @@ -1,11 +1,11 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/aspnetcore.components.server.basictheme", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.components.server.theming": "~7.4.0" + "@abp/aspnetcore.components.server.theming": "~7.4.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/aspnetcore.components.server.theming/package.json b/npm/packs/aspnetcore.components.server.theming/package.json index a55a897a9c..4086c1969b 100644 --- a/npm/packs/aspnetcore.components.server.theming/package.json +++ b/npm/packs/aspnetcore.components.server.theming/package.json @@ -1,12 +1,12 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/aspnetcore.components.server.theming", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/bootstrap": "~7.4.0", - "@abp/font-awesome": "~7.4.0" + "@abp/bootstrap": "~7.4.1", + "@abp/font-awesome": "~7.4.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json b/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json index 69a53526b2..00cb45e009 100644 --- a/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json +++ b/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json @@ -1,5 +1,5 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/aspnetcore.mvc.ui.theme.basic", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.shared": "~7.4.0" + "@abp/aspnetcore.mvc.ui.theme.shared": "~7.4.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json b/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json index 86a227a968..6cf45992d6 100644 --- a/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json +++ b/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json @@ -1,5 +1,5 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/aspnetcore.mvc.ui.theme.shared", "repository": { "type": "git", @@ -10,22 +10,22 @@ "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui": "~7.4.0", - "@abp/bootstrap": "~7.4.0", - "@abp/bootstrap-datepicker": "~7.4.0", - "@abp/bootstrap-daterangepicker": "~7.4.0", - "@abp/datatables.net-bs5": "~7.4.0", - "@abp/font-awesome": "~7.4.0", - "@abp/jquery-form": "~7.4.0", - "@abp/jquery-validation-unobtrusive": "~7.4.0", - "@abp/lodash": "~7.4.0", - "@abp/luxon": "~7.4.0", - "@abp/malihu-custom-scrollbar-plugin": "~7.4.0", - "@abp/moment": "~7.4.0", - "@abp/select2": "~7.4.0", - "@abp/sweetalert2": "~7.4.0", - "@abp/timeago": "~7.4.0", - "@abp/toastr": "~7.4.0" + "@abp/aspnetcore.mvc.ui": "~7.4.1", + "@abp/bootstrap": "~7.4.1", + "@abp/bootstrap-datepicker": "~7.4.1", + "@abp/bootstrap-daterangepicker": "~7.4.1", + "@abp/datatables.net-bs5": "~7.4.1", + "@abp/font-awesome": "~7.4.1", + "@abp/jquery-form": "~7.4.1", + "@abp/jquery-validation-unobtrusive": "~7.4.1", + "@abp/lodash": "~7.4.1", + "@abp/luxon": "~7.4.1", + "@abp/malihu-custom-scrollbar-plugin": "~7.4.1", + "@abp/moment": "~7.4.1", + "@abp/select2": "~7.4.1", + "@abp/sweetalert2": "~7.4.1", + "@abp/timeago": "~7.4.1", + "@abp/toastr": "~7.4.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/aspnetcore.mvc.ui/package-lock.json b/npm/packs/aspnetcore.mvc.ui/package-lock.json index 74d3620b9c..ea60b590ab 100644 --- a/npm/packs/aspnetcore.mvc.ui/package-lock.json +++ b/npm/packs/aspnetcore.mvc.ui/package-lock.json @@ -1,6 +1,6 @@ { "name": "@abp/aspnetcore.mvc.ui", - "version": "7.4.0", + "version": "7.4.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/npm/packs/aspnetcore.mvc.ui/package.json b/npm/packs/aspnetcore.mvc.ui/package.json index 9d89144d7e..00113c20bb 100644 --- a/npm/packs/aspnetcore.mvc.ui/package.json +++ b/npm/packs/aspnetcore.mvc.ui/package.json @@ -1,5 +1,5 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/aspnetcore.mvc.ui", "repository": { "type": "git", diff --git a/npm/packs/blogging/package.json b/npm/packs/blogging/package.json index b09ebe3751..237ebc11c3 100644 --- a/npm/packs/blogging/package.json +++ b/npm/packs/blogging/package.json @@ -1,14 +1,14 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/blogging", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.shared": "~7.4.0", - "@abp/owl.carousel": "~7.4.0", - "@abp/prismjs": "~7.4.0", - "@abp/tui-editor": "~7.4.0" + "@abp/aspnetcore.mvc.ui.theme.shared": "~7.4.1", + "@abp/owl.carousel": "~7.4.1", + "@abp/prismjs": "~7.4.1", + "@abp/tui-editor": "~7.4.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/bootstrap-datepicker/package.json b/npm/packs/bootstrap-datepicker/package.json index 58865a1ac5..7d29b8b0a3 100644 --- a/npm/packs/bootstrap-datepicker/package.json +++ b/npm/packs/bootstrap-datepicker/package.json @@ -1,5 +1,5 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/bootstrap-datepicker", "repository": { "type": "git", diff --git a/npm/packs/bootstrap-daterangepicker/package.json b/npm/packs/bootstrap-daterangepicker/package.json index 4eafb5a8a0..d92025f1bd 100644 --- a/npm/packs/bootstrap-daterangepicker/package.json +++ b/npm/packs/bootstrap-daterangepicker/package.json @@ -1,5 +1,5 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/bootstrap-daterangepicker", "repository": { "type": "git", diff --git a/npm/packs/bootstrap/package.json b/npm/packs/bootstrap/package.json index 7ff316b0ac..09787d790b 100644 --- a/npm/packs/bootstrap/package.json +++ b/npm/packs/bootstrap/package.json @@ -1,5 +1,5 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/bootstrap", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~7.4.0", + "@abp/core": "~7.4.1", "bootstrap": "^5.1.3" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/chart.js/package.json b/npm/packs/chart.js/package.json index b54cbd56c4..39a4844efd 100644 --- a/npm/packs/chart.js/package.json +++ b/npm/packs/chart.js/package.json @@ -1,5 +1,5 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/chart.js", "publishConfig": { "access": "public" diff --git a/npm/packs/clipboard/package.json b/npm/packs/clipboard/package.json index c762093a23..069870a9f9 100644 --- a/npm/packs/clipboard/package.json +++ b/npm/packs/clipboard/package.json @@ -1,11 +1,11 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/clipboard", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~7.4.0", + "@abp/core": "~7.4.1", "clipboard": "^2.0.8" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/cms-kit.admin/package.json b/npm/packs/cms-kit.admin/package.json index e61d6cb878..316d70c1e2 100644 --- a/npm/packs/cms-kit.admin/package.json +++ b/npm/packs/cms-kit.admin/package.json @@ -1,15 +1,15 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/cms-kit.admin", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/codemirror": "~7.4.0", - "@abp/jstree": "~7.4.0", - "@abp/slugify": "~7.4.0", - "@abp/tui-editor": "~7.4.0", - "@abp/uppy": "~7.4.0" + "@abp/codemirror": "~7.4.1", + "@abp/jstree": "~7.4.1", + "@abp/slugify": "~7.4.1", + "@abp/tui-editor": "~7.4.1", + "@abp/uppy": "~7.4.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/cms-kit.public/package.json b/npm/packs/cms-kit.public/package.json index cd298f3501..2a37ba8b99 100644 --- a/npm/packs/cms-kit.public/package.json +++ b/npm/packs/cms-kit.public/package.json @@ -1,12 +1,12 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/cms-kit.public", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/highlight.js": "~7.4.0", - "@abp/star-rating-svg": "~7.4.0" + "@abp/highlight.js": "~7.4.1", + "@abp/star-rating-svg": "~7.4.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/cms-kit/package.json b/npm/packs/cms-kit/package.json index efaeabf662..91d48ce1f8 100644 --- a/npm/packs/cms-kit/package.json +++ b/npm/packs/cms-kit/package.json @@ -1,12 +1,12 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/cms-kit", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/cms-kit.admin": "~7.4.0", - "@abp/cms-kit.public": "~7.4.0" + "@abp/cms-kit.admin": "~7.4.1", + "@abp/cms-kit.public": "~7.4.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/codemirror/package.json b/npm/packs/codemirror/package.json index f29943e59d..0ecb2d825f 100644 --- a/npm/packs/codemirror/package.json +++ b/npm/packs/codemirror/package.json @@ -1,11 +1,11 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/codemirror", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~7.4.0", + "@abp/core": "~7.4.1", "codemirror": "^5.65.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/core/package.json b/npm/packs/core/package.json index de7df5edeb..db2a5f8eba 100644 --- a/npm/packs/core/package.json +++ b/npm/packs/core/package.json @@ -1,5 +1,5 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/core", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/utils": "~7.4.0" + "@abp/utils": "~7.4.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/cropperjs/package.json b/npm/packs/cropperjs/package.json index 07b45d4d4b..1c3adff63b 100644 --- a/npm/packs/cropperjs/package.json +++ b/npm/packs/cropperjs/package.json @@ -1,11 +1,11 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/cropperjs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~7.4.0", + "@abp/core": "~7.4.1", "cropperjs": "^1.5.12" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/datatables.net-bs4/package.json b/npm/packs/datatables.net-bs4/package.json index 4b821168e7..6139027d97 100644 --- a/npm/packs/datatables.net-bs4/package.json +++ b/npm/packs/datatables.net-bs4/package.json @@ -1,5 +1,5 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/datatables.net-bs4", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/datatables.net": "~7.4.0", + "@abp/datatables.net": "~7.4.1", "datatables.net-bs4": "^1.11.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/datatables.net-bs5/package.json b/npm/packs/datatables.net-bs5/package.json index 108be39b57..4ef0aa47c9 100644 --- a/npm/packs/datatables.net-bs5/package.json +++ b/npm/packs/datatables.net-bs5/package.json @@ -1,11 +1,11 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/datatables.net-bs5", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/datatables.net": "~7.4.0", + "@abp/datatables.net": "~7.4.1", "datatables.net-bs5": "^1.11.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/datatables.net/package.json b/npm/packs/datatables.net/package.json index 160b0117c1..c40a7549cb 100644 --- a/npm/packs/datatables.net/package.json +++ b/npm/packs/datatables.net/package.json @@ -1,5 +1,5 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/datatables.net", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/jquery": "~7.4.0", + "@abp/jquery": "~7.4.1", "datatables.net": "^1.11.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/docs/package.json b/npm/packs/docs/package.json index 2e50895ed0..c6b03d5474 100644 --- a/npm/packs/docs/package.json +++ b/npm/packs/docs/package.json @@ -1,15 +1,15 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/docs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/anchor-js": "~7.4.0", - "@abp/clipboard": "~7.4.0", - "@abp/malihu-custom-scrollbar-plugin": "~7.4.0", - "@abp/popper.js": "~7.4.0", - "@abp/prismjs": "~7.4.0" + "@abp/anchor-js": "~7.4.1", + "@abp/clipboard": "~7.4.1", + "@abp/malihu-custom-scrollbar-plugin": "~7.4.1", + "@abp/popper.js": "~7.4.1", + "@abp/prismjs": "~7.4.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/flag-icon-css/package.json b/npm/packs/flag-icon-css/package.json index 9f3b32c495..904fa65c97 100644 --- a/npm/packs/flag-icon-css/package.json +++ b/npm/packs/flag-icon-css/package.json @@ -1,5 +1,5 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/flag-icon-css", "publishConfig": { "access": "public" diff --git a/npm/packs/flag-icons/package.json b/npm/packs/flag-icons/package.json index 9a0463a798..026485667e 100644 --- a/npm/packs/flag-icons/package.json +++ b/npm/packs/flag-icons/package.json @@ -1,5 +1,5 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/flag-icons", "publishConfig": { "access": "public" diff --git a/npm/packs/font-awesome/package.json b/npm/packs/font-awesome/package.json index f8c2507180..770e319e26 100644 --- a/npm/packs/font-awesome/package.json +++ b/npm/packs/font-awesome/package.json @@ -1,5 +1,5 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/font-awesome", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~7.4.0", + "@abp/core": "~7.4.1", "@fortawesome/fontawesome-free": "^5.15.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/highlight.js/package.json b/npm/packs/highlight.js/package.json index 13e2c741f5..acc04e595a 100644 --- a/npm/packs/highlight.js/package.json +++ b/npm/packs/highlight.js/package.json @@ -1,11 +1,11 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/highlight.js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~7.4.0", + "@abp/core": "~7.4.1", "@highlightjs/cdn-assets": "~11.4.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/jquery-form/package.json b/npm/packs/jquery-form/package.json index c1eaadedfa..910dda8881 100644 --- a/npm/packs/jquery-form/package.json +++ b/npm/packs/jquery-form/package.json @@ -1,5 +1,5 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/jquery-form", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/jquery": "~7.4.0", + "@abp/jquery": "~7.4.1", "jquery-form": "^4.3.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/jquery-validation-unobtrusive/package.json b/npm/packs/jquery-validation-unobtrusive/package.json index d07bc08406..795087d7dd 100644 --- a/npm/packs/jquery-validation-unobtrusive/package.json +++ b/npm/packs/jquery-validation-unobtrusive/package.json @@ -1,5 +1,5 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/jquery-validation-unobtrusive", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/jquery-validation": "~7.4.0", + "@abp/jquery-validation": "~7.4.1", "jquery-validation-unobtrusive": "^3.2.12" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/jquery-validation/package.json b/npm/packs/jquery-validation/package.json index 803d556ce5..5178919e18 100644 --- a/npm/packs/jquery-validation/package.json +++ b/npm/packs/jquery-validation/package.json @@ -1,5 +1,5 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/jquery-validation", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/jquery": "~7.4.0", + "@abp/jquery": "~7.4.1", "jquery-validation": "^1.19.3" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/jquery/package.json b/npm/packs/jquery/package.json index ed35001c5b..631e7c0cb4 100644 --- a/npm/packs/jquery/package.json +++ b/npm/packs/jquery/package.json @@ -1,5 +1,5 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/jquery", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~7.4.0", + "@abp/core": "~7.4.1", "jquery": "~3.6.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/jstree/package.json b/npm/packs/jstree/package.json index c6794062ae..2d94ce38b8 100644 --- a/npm/packs/jstree/package.json +++ b/npm/packs/jstree/package.json @@ -1,11 +1,11 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/jstree", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~7.4.0", + "@abp/jquery": "~7.4.1", "jstree": "^3.3.12" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/lodash/package.json b/npm/packs/lodash/package.json index cbaa5a3f4c..e253bf5026 100644 --- a/npm/packs/lodash/package.json +++ b/npm/packs/lodash/package.json @@ -1,5 +1,5 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/lodash", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~7.4.0", + "@abp/core": "~7.4.1", "lodash": "^4.17.21" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/luxon/package.json b/npm/packs/luxon/package.json index 07d9393f9d..3cc35bc828 100644 --- a/npm/packs/luxon/package.json +++ b/npm/packs/luxon/package.json @@ -1,5 +1,5 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/luxon", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~7.4.0", + "@abp/core": "~7.4.1", "luxon": "^2.3.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/malihu-custom-scrollbar-plugin/package.json b/npm/packs/malihu-custom-scrollbar-plugin/package.json index da0d25f81e..72b953d34b 100644 --- a/npm/packs/malihu-custom-scrollbar-plugin/package.json +++ b/npm/packs/malihu-custom-scrollbar-plugin/package.json @@ -1,5 +1,5 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/malihu-custom-scrollbar-plugin", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~7.4.0", + "@abp/core": "~7.4.1", "malihu-custom-scrollbar-plugin": "^3.1.5" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/markdown-it/package.json b/npm/packs/markdown-it/package.json index 911e9a83fc..21409a9704 100644 --- a/npm/packs/markdown-it/package.json +++ b/npm/packs/markdown-it/package.json @@ -1,11 +1,11 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/markdown-it", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~7.4.0", + "@abp/core": "~7.4.1", "markdown-it": "^12.3.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/moment/package.json b/npm/packs/moment/package.json index 91c919eabe..56d5123a88 100644 --- a/npm/packs/moment/package.json +++ b/npm/packs/moment/package.json @@ -1,5 +1,5 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/moment", "repository": { "type": "git", diff --git a/npm/packs/owl.carousel/package.json b/npm/packs/owl.carousel/package.json index ed5825da6c..cbba8f8c5b 100644 --- a/npm/packs/owl.carousel/package.json +++ b/npm/packs/owl.carousel/package.json @@ -1,11 +1,11 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/owl.carousel", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~7.4.0", + "@abp/core": "~7.4.1", "owl.carousel": "^2.3.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/popper.js/package.json b/npm/packs/popper.js/package.json index 38c9f317a7..5aa46044ea 100644 --- a/npm/packs/popper.js/package.json +++ b/npm/packs/popper.js/package.json @@ -1,11 +1,11 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/popper.js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~7.4.0", + "@abp/core": "~7.4.1", "@popperjs/core": "^2.11.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/prismjs/package.json b/npm/packs/prismjs/package.json index 7f70f7f662..a76d8b4d48 100644 --- a/npm/packs/prismjs/package.json +++ b/npm/packs/prismjs/package.json @@ -1,12 +1,12 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/prismjs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/clipboard": "~7.4.0", - "@abp/core": "~7.4.0", + "@abp/clipboard": "~7.4.1", + "@abp/core": "~7.4.1", "prismjs": "^1.26.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/qrcode/package.json b/npm/packs/qrcode/package.json index b342e54584..83cdc72c28 100644 --- a/npm/packs/qrcode/package.json +++ b/npm/packs/qrcode/package.json @@ -1,5 +1,5 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/qrcode", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~7.4.0" + "@abp/core": "~7.4.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/select2/package.json b/npm/packs/select2/package.json index 138587f583..da628403c1 100644 --- a/npm/packs/select2/package.json +++ b/npm/packs/select2/package.json @@ -1,5 +1,5 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/select2", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~7.4.0", + "@abp/core": "~7.4.1", "select2": "^4.0.13" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/signalr/package.json b/npm/packs/signalr/package.json index 4630102fab..7934a12406 100644 --- a/npm/packs/signalr/package.json +++ b/npm/packs/signalr/package.json @@ -1,11 +1,11 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/signalr", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~7.4.0", + "@abp/core": "~7.4.1", "@microsoft/signalr": "~6.0.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/slugify/package.json b/npm/packs/slugify/package.json index 8d106275b1..5a66ee22f5 100644 --- a/npm/packs/slugify/package.json +++ b/npm/packs/slugify/package.json @@ -1,5 +1,5 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/slugify", "publishConfig": { "access": "public" diff --git a/npm/packs/star-rating-svg/package.json b/npm/packs/star-rating-svg/package.json index 49484a3cf3..a7923aadc7 100644 --- a/npm/packs/star-rating-svg/package.json +++ b/npm/packs/star-rating-svg/package.json @@ -1,11 +1,11 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/star-rating-svg", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~7.4.0", + "@abp/jquery": "~7.4.1", "star-rating-svg": "^3.5.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/sweetalert2/package.json b/npm/packs/sweetalert2/package.json index bdae361897..7508409375 100644 --- a/npm/packs/sweetalert2/package.json +++ b/npm/packs/sweetalert2/package.json @@ -1,5 +1,5 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/sweetalert2", "publishConfig": { "access": "public" @@ -10,7 +10,7 @@ "directory": "npm/packs/sweetalert2" }, "dependencies": { - "@abp/core": "~7.4.0", + "@abp/core": "~7.4.1", "sweetalert2": "^11.3.6" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/timeago/package.json b/npm/packs/timeago/package.json index f361de4194..828a8a2ba4 100644 --- a/npm/packs/timeago/package.json +++ b/npm/packs/timeago/package.json @@ -1,5 +1,5 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/timeago", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/jquery": "~7.4.0", + "@abp/jquery": "~7.4.1", "timeago": "^1.6.7" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/toastr/package.json b/npm/packs/toastr/package.json index 758df70b38..7a9fb784cd 100644 --- a/npm/packs/toastr/package.json +++ b/npm/packs/toastr/package.json @@ -1,5 +1,5 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/toastr", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/jquery": "~7.4.0", + "@abp/jquery": "~7.4.1", "toastr": "^2.1.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/tui-editor/package.json b/npm/packs/tui-editor/package.json index cda42125cc..ea66914086 100644 --- a/npm/packs/tui-editor/package.json +++ b/npm/packs/tui-editor/package.json @@ -1,12 +1,12 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/tui-editor", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~7.4.0", - "@abp/prismjs": "~7.4.0" + "@abp/jquery": "~7.4.1", + "@abp/prismjs": "~7.4.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/uppy/package.json b/npm/packs/uppy/package.json index 16e3e9d676..0a914395c4 100644 --- a/npm/packs/uppy/package.json +++ b/npm/packs/uppy/package.json @@ -1,11 +1,11 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/uppy", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~7.4.0", + "@abp/core": "~7.4.1", "uppy": "^1.16.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/utils/package.json b/npm/packs/utils/package.json index 5976e26e37..fa6dbe0af0 100644 --- a/npm/packs/utils/package.json +++ b/npm/packs/utils/package.json @@ -1,6 +1,6 @@ { "name": "@abp/utils", - "version": "7.4.0", + "version": "7.4.1", "scripts": { "prepublishOnly": "yarn install --ignore-scripts && node prepublish.js", "ng": "ng", diff --git a/npm/packs/vee-validate/package.json b/npm/packs/vee-validate/package.json index a4a716df49..acc479df3f 100644 --- a/npm/packs/vee-validate/package.json +++ b/npm/packs/vee-validate/package.json @@ -1,11 +1,11 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/vee-validate", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/vue": "~7.4.0", + "@abp/vue": "~7.4.1", "vee-validate": "~3.4.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/virtual-file-explorer/package.json b/npm/packs/virtual-file-explorer/package.json index 87e42e5fd2..4c33fd06e8 100644 --- a/npm/packs/virtual-file-explorer/package.json +++ b/npm/packs/virtual-file-explorer/package.json @@ -1,12 +1,12 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/virtual-file-explorer", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/clipboard": "~7.4.0", - "@abp/prismjs": "~7.4.0" + "@abp/clipboard": "~7.4.1", + "@abp/prismjs": "~7.4.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/vue/package.json b/npm/packs/vue/package.json index 310f4eb33f..3c5fcad26f 100644 --- a/npm/packs/vue/package.json +++ b/npm/packs/vue/package.json @@ -1,5 +1,5 @@ { - "version": "7.4.0", + "version": "7.4.1", "name": "@abp/vue", "publishConfig": { "access": "public" diff --git a/source-code/Volo.Abp.Account.SourceCode/Volo.Abp.Account.SourceCode.zip b/source-code/Volo.Abp.Account.SourceCode/Volo.Abp.Account.SourceCode.zip index f4ae508c1b..84f047a17c 100644 Binary files a/source-code/Volo.Abp.Account.SourceCode/Volo.Abp.Account.SourceCode.zip and b/source-code/Volo.Abp.Account.SourceCode/Volo.Abp.Account.SourceCode.zip differ diff --git a/source-code/Volo.Abp.AuditLogging.SourceCode/Volo.Abp.AuditLogging.SourceCode.zip b/source-code/Volo.Abp.AuditLogging.SourceCode/Volo.Abp.AuditLogging.SourceCode.zip index 3212963ba9..159c8e04fd 100644 Binary files a/source-code/Volo.Abp.AuditLogging.SourceCode/Volo.Abp.AuditLogging.SourceCode.zip and b/source-code/Volo.Abp.AuditLogging.SourceCode/Volo.Abp.AuditLogging.SourceCode.zip differ diff --git a/source-code/Volo.Abp.BackgroundJobs.SourceCode/Volo.Abp.BackgroundJobs.SourceCode.zip b/source-code/Volo.Abp.BackgroundJobs.SourceCode/Volo.Abp.BackgroundJobs.SourceCode.zip index 3f3a3196f8..26fe756069 100644 Binary files a/source-code/Volo.Abp.BackgroundJobs.SourceCode/Volo.Abp.BackgroundJobs.SourceCode.zip and b/source-code/Volo.Abp.BackgroundJobs.SourceCode/Volo.Abp.BackgroundJobs.SourceCode.zip differ diff --git a/source-code/Volo.Abp.BasicTheme.SourceCode/Volo.Abp.BasicTheme.SourceCode.zip b/source-code/Volo.Abp.BasicTheme.SourceCode/Volo.Abp.BasicTheme.SourceCode.zip index 3051a256ab..686fb5c846 100644 Binary files a/source-code/Volo.Abp.BasicTheme.SourceCode/Volo.Abp.BasicTheme.SourceCode.zip and b/source-code/Volo.Abp.BasicTheme.SourceCode/Volo.Abp.BasicTheme.SourceCode.zip differ diff --git a/source-code/Volo.Abp.BlobStoring.Database.SourceCode/Volo.Abp.BlobStoring.Database.SourceCode.zip b/source-code/Volo.Abp.BlobStoring.Database.SourceCode/Volo.Abp.BlobStoring.Database.SourceCode.zip index cc71d6ef10..60734e8888 100644 Binary files a/source-code/Volo.Abp.BlobStoring.Database.SourceCode/Volo.Abp.BlobStoring.Database.SourceCode.zip and b/source-code/Volo.Abp.BlobStoring.Database.SourceCode/Volo.Abp.BlobStoring.Database.SourceCode.zip differ diff --git a/source-code/Volo.Abp.FeatureManagement.SourceCode/Volo.Abp.FeatureManagement.SourceCode.zip b/source-code/Volo.Abp.FeatureManagement.SourceCode/Volo.Abp.FeatureManagement.SourceCode.zip index 75058c62c3..1ea50e7aa1 100644 Binary files a/source-code/Volo.Abp.FeatureManagement.SourceCode/Volo.Abp.FeatureManagement.SourceCode.zip and b/source-code/Volo.Abp.FeatureManagement.SourceCode/Volo.Abp.FeatureManagement.SourceCode.zip differ diff --git a/source-code/Volo.Abp.Identity.SourceCode/Volo.Abp.Identity.SourceCode.zip b/source-code/Volo.Abp.Identity.SourceCode/Volo.Abp.Identity.SourceCode.zip index 96f29fb17c..4696702f16 100644 Binary files a/source-code/Volo.Abp.Identity.SourceCode/Volo.Abp.Identity.SourceCode.zip and b/source-code/Volo.Abp.Identity.SourceCode/Volo.Abp.Identity.SourceCode.zip differ diff --git a/source-code/Volo.Abp.IdentityServer.SourceCode/Volo.Abp.IdentityServer.SourceCode.zip b/source-code/Volo.Abp.IdentityServer.SourceCode/Volo.Abp.IdentityServer.SourceCode.zip index 3bed90bb00..a5d9f48350 100644 Binary files a/source-code/Volo.Abp.IdentityServer.SourceCode/Volo.Abp.IdentityServer.SourceCode.zip and b/source-code/Volo.Abp.IdentityServer.SourceCode/Volo.Abp.IdentityServer.SourceCode.zip differ diff --git a/source-code/Volo.Abp.OpenIddict.SourceCode/Volo.Abp.OpenIddict.SourceCode.zip b/source-code/Volo.Abp.OpenIddict.SourceCode/Volo.Abp.OpenIddict.SourceCode.zip index fea0d4869e..4125cac8d0 100644 Binary files a/source-code/Volo.Abp.OpenIddict.SourceCode/Volo.Abp.OpenIddict.SourceCode.zip and b/source-code/Volo.Abp.OpenIddict.SourceCode/Volo.Abp.OpenIddict.SourceCode.zip differ diff --git a/source-code/Volo.Abp.PermissionManagement.SourceCode/Volo.Abp.PermissionManagement.SourceCode.zip b/source-code/Volo.Abp.PermissionManagement.SourceCode/Volo.Abp.PermissionManagement.SourceCode.zip index ad4015d1d5..d18a3564ee 100644 Binary files a/source-code/Volo.Abp.PermissionManagement.SourceCode/Volo.Abp.PermissionManagement.SourceCode.zip and b/source-code/Volo.Abp.PermissionManagement.SourceCode/Volo.Abp.PermissionManagement.SourceCode.zip differ diff --git a/source-code/Volo.Abp.SettingManagement.SourceCode/Volo.Abp.SettingManagement.SourceCode.zip b/source-code/Volo.Abp.SettingManagement.SourceCode/Volo.Abp.SettingManagement.SourceCode.zip index 38c4943d4b..13949f7303 100644 Binary files a/source-code/Volo.Abp.SettingManagement.SourceCode/Volo.Abp.SettingManagement.SourceCode.zip and b/source-code/Volo.Abp.SettingManagement.SourceCode/Volo.Abp.SettingManagement.SourceCode.zip differ diff --git a/source-code/Volo.Abp.TenantManagement.SourceCode/Volo.Abp.TenantManagement.SourceCode.zip b/source-code/Volo.Abp.TenantManagement.SourceCode/Volo.Abp.TenantManagement.SourceCode.zip index 38290ded7f..3d1896d0cd 100644 Binary files a/source-code/Volo.Abp.TenantManagement.SourceCode/Volo.Abp.TenantManagement.SourceCode.zip and b/source-code/Volo.Abp.TenantManagement.SourceCode/Volo.Abp.TenantManagement.SourceCode.zip differ diff --git a/source-code/Volo.Abp.Users.SourceCode/Volo.Abp.Users.SourceCode.zip b/source-code/Volo.Abp.Users.SourceCode/Volo.Abp.Users.SourceCode.zip index 1614ff3249..d2243f5801 100644 Binary files a/source-code/Volo.Abp.Users.SourceCode/Volo.Abp.Users.SourceCode.zip and b/source-code/Volo.Abp.Users.SourceCode/Volo.Abp.Users.SourceCode.zip differ diff --git a/source-code/Volo.Abp.VirtualFileExplorer.SourceCode/Volo.Abp.VirtualFileExplorer.SourceCode.zip b/source-code/Volo.Abp.VirtualFileExplorer.SourceCode/Volo.Abp.VirtualFileExplorer.SourceCode.zip index 8d8c5bae05..90d2bec64d 100644 Binary files a/source-code/Volo.Abp.VirtualFileExplorer.SourceCode/Volo.Abp.VirtualFileExplorer.SourceCode.zip and b/source-code/Volo.Abp.VirtualFileExplorer.SourceCode/Volo.Abp.VirtualFileExplorer.SourceCode.zip differ diff --git a/source-code/Volo.Blogging.SourceCode/Volo.Blogging.SourceCode.zip b/source-code/Volo.Blogging.SourceCode/Volo.Blogging.SourceCode.zip index 9b08f5daff..d4c4197c66 100644 Binary files a/source-code/Volo.Blogging.SourceCode/Volo.Blogging.SourceCode.zip and b/source-code/Volo.Blogging.SourceCode/Volo.Blogging.SourceCode.zip differ diff --git a/source-code/Volo.ClientSimulation.SourceCode/Volo.ClientSimulation.SourceCode.zip b/source-code/Volo.ClientSimulation.SourceCode/Volo.ClientSimulation.SourceCode.zip index 11e3ed60fc..7394ec46af 100644 Binary files a/source-code/Volo.ClientSimulation.SourceCode/Volo.ClientSimulation.SourceCode.zip and b/source-code/Volo.ClientSimulation.SourceCode/Volo.ClientSimulation.SourceCode.zip differ diff --git a/source-code/Volo.CmsKit.SourceCode/Volo.CmsKit.SourceCode.zip b/source-code/Volo.CmsKit.SourceCode/Volo.CmsKit.SourceCode.zip index d3b885fc16..84f49c284b 100644 Binary files a/source-code/Volo.CmsKit.SourceCode/Volo.CmsKit.SourceCode.zip and b/source-code/Volo.CmsKit.SourceCode/Volo.CmsKit.SourceCode.zip differ diff --git a/source-code/Volo.Docs.SourceCode/Volo.Docs.SourceCode.zip b/source-code/Volo.Docs.SourceCode/Volo.Docs.SourceCode.zip index a34bf2afec..904849dd0b 100644 Binary files a/source-code/Volo.Docs.SourceCode/Volo.Docs.SourceCode.zip and b/source-code/Volo.Docs.SourceCode/Volo.Docs.SourceCode.zip differ diff --git a/templates/app-nolayers/angular/package.json b/templates/app-nolayers/angular/package.json index 5e5a446743..16bf83b581 100644 --- a/templates/app-nolayers/angular/package.json +++ b/templates/app-nolayers/angular/package.json @@ -12,15 +12,15 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~7.4.0", - "@abp/ng.components": "~7.4.0", - "@abp/ng.core": "~7.4.0", - "@abp/ng.oauth": "~7.4.0", - "@abp/ng.identity": "~7.4.0", - "@abp/ng.setting-management": "~7.4.0", - "@abp/ng.tenant-management": "~7.4.0", - "@abp/ng.theme.shared": "~7.4.0", - "@abp/ng.theme.lepton-x": "~2.4.0", + "@abp/ng.account": "~7.4.1", + "@abp/ng.components": "~7.4.1", + "@abp/ng.core": "~7.4.1", + "@abp/ng.oauth": "~7.4.1", + "@abp/ng.identity": "~7.4.1", + "@abp/ng.setting-management": "~7.4.1", + "@abp/ng.tenant-management": "~7.4.1", + "@abp/ng.theme.shared": "~7.4.1", + "@abp/ng.theme.lepton-x": "~2.4.1", "@angular/animations": "~16.2.0", "@angular/common": "~16.2.0", "@angular/compiler": "~16.2.0", @@ -42,7 +42,7 @@ "@angular-eslint/eslint-plugin-template": "~16.2.0", "@angular-eslint/schematics": "~16.2.0", "@angular-eslint/template-parser": "~16.2.0", - "@abp/ng.schematics": "~7.4.0", + "@abp/ng.schematics": "~7.4.1", "@angular/cli": "~16.2.0", "@angular/compiler-cli": "~16.2.0", "@angular/language-service": "~16.2.0", diff --git a/templates/app-nolayers/angular/src/environments/environment.prod.ts b/templates/app-nolayers/angular/src/environments/environment.prod.ts index e6cc007d52..7702e6fc43 100644 --- a/templates/app-nolayers/angular/src/environments/environment.prod.ts +++ b/templates/app-nolayers/angular/src/environments/environment.prod.ts @@ -10,7 +10,7 @@ export const environment = { logoUrl: '', }, oAuthConfig: { - issuer: 'https://localhost:44305/', + issuer: 'https://localhost:44300/', redirectUri: baseUrl, clientId: 'MyProjectName_App', responseType: 'code', @@ -19,7 +19,7 @@ export const environment = { }, apis: { default: { - url: 'https://localhost:44305', + url: 'https://localhost:44300', rootNamespace: 'MyCompanyName.MyProjectName', }, }, diff --git a/templates/app-nolayers/angular/src/environments/environment.ts b/templates/app-nolayers/angular/src/environments/environment.ts index 04dc6e89f3..f12e925ee9 100644 --- a/templates/app-nolayers/angular/src/environments/environment.ts +++ b/templates/app-nolayers/angular/src/environments/environment.ts @@ -10,7 +10,7 @@ export const environment = { logoUrl: '', }, oAuthConfig: { - issuer: 'https://localhost:44305/', + issuer: 'https://localhost:44300/', redirectUri: baseUrl, clientId: 'MyProjectName_App', responseType: 'code', @@ -19,7 +19,7 @@ export const environment = { }, apis: { default: { - url: 'https://localhost:44305', + url: 'https://localhost:44300', rootNamespace: 'MyCompanyName.MyProjectName', }, }, diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/package.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/package.json index b9beae2ef2..a7d01f336a 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/package.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/package.json @@ -3,7 +3,7 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.components.server.leptonxlitetheme": "~2.4.0-rc.4", - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~2.4.0-rc.4" + "@abp/aspnetcore.components.server.leptonxlitetheme": "~2.4.1", + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~2.4.1" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20231003031426_Initial.Designer.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20231026071039_Initial.Designer.cs similarity index 99% rename from templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20231003031426_Initial.Designer.cs rename to templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20231026071039_Initial.Designer.cs index e73ffc0d1d..f6131569e7 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20231003031426_Initial.Designer.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20231026071039_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Blazor.Server.Migrations { [DbContext(typeof(MyProjectNameDbContext))] - [Migration("20231003031426_Initial")] + [Migration("20231026071039_Initial")] partial class Initial { /// @@ -22,7 +22,7 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "8.0.0-rc.1.23419.6") + .HasAnnotation("ProductVersion", "8.0.0-rc.2.23480.1") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -218,7 +218,6 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Migrations .HasColumnName("ChangeType"); b.Property("EntityId") - .IsRequired() .HasMaxLength(128) .HasColumnType("nvarchar(128)") .HasColumnName("EntityId"); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20231003031426_Initial.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20231026071039_Initial.cs similarity index 99% rename from templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20231003031426_Initial.cs rename to templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20231026071039_Initial.cs index 8b6e1b81cf..10e01ba747 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20231003031426_Initial.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20231026071039_Initial.cs @@ -464,7 +464,7 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Migrations ChangeTime = table.Column(type: "datetime2", nullable: false), ChangeType = table.Column(type: "tinyint", nullable: false), EntityTenantId = table.Column(type: "uniqueidentifier", nullable: true), - EntityId = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + EntityId = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), EntityTypeFullName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true) }, diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/MyProjectNameDbContextModelSnapshot.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/MyProjectNameDbContextModelSnapshot.cs index cdb1b5bacf..97625b9411 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/MyProjectNameDbContextModelSnapshot.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/MyProjectNameDbContextModelSnapshot.cs @@ -19,7 +19,7 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "8.0.0-rc.1.23419.6") + .HasAnnotation("ProductVersion", "8.0.0-rc.2.23480.1") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -215,7 +215,6 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Migrations .HasColumnName("ChangeType"); b.Property("EntityId") - .IsRequired() .HasMaxLength(128) .HasColumnType("nvarchar(128)") .HasColumnName("EntityId"); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/package.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/package.json index cd5f25b790..9122625971 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/package.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/package.json @@ -3,7 +3,7 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~2.4.0-rc.4", - "@abp/aspnetcore.components.server.leptonxlitetheme": "~2.4.0-rc.4" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~2.4.1", + "@abp/aspnetcore.components.server.leptonxlitetheme": "~2.4.1" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/package.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/package.json index df64c1f21d..5d98265162 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/package.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~2.4.0-rc.4" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~2.4.1" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20231003031450_Initial.Designer.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20231026071041_Initial.Designer.cs similarity index 99% rename from templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20231003031450_Initial.Designer.cs rename to templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20231026071041_Initial.Designer.cs index f2ed06d4cd..222393bd82 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20231003031450_Initial.Designer.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20231026071041_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Migrations { [DbContext(typeof(MyProjectNameDbContext))] - [Migration("20231003031450_Initial")] + [Migration("20231026071041_Initial")] partial class Initial { /// @@ -22,7 +22,7 @@ namespace MyCompanyName.MyProjectName.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "8.0.0-rc.1.23419.6") + .HasAnnotation("ProductVersion", "8.0.0-rc.2.23480.1") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -218,7 +218,6 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnName("ChangeType"); b.Property("EntityId") - .IsRequired() .HasMaxLength(128) .HasColumnType("nvarchar(128)") .HasColumnName("EntityId"); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20231003031621_Initial.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20231026071041_Initial.cs similarity index 99% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20231003031621_Initial.cs rename to templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20231026071041_Initial.cs index d79d7169cb..193fa0b299 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20231003031621_Initial.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20231026071041_Initial.cs @@ -464,7 +464,7 @@ namespace MyCompanyName.MyProjectName.Migrations ChangeTime = table.Column(type: "datetime2", nullable: false), ChangeType = table.Column(type: "tinyint", nullable: false), EntityTenantId = table.Column(type: "uniqueidentifier", nullable: true), - EntityId = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + EntityId = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), EntityTypeFullName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true) }, diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/MyProjectNameDbContextModelSnapshot.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/MyProjectNameDbContextModelSnapshot.cs index 5697b4d5ef..2ab818fa36 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/MyProjectNameDbContextModelSnapshot.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/MyProjectNameDbContextModelSnapshot.cs @@ -19,7 +19,7 @@ namespace MyCompanyName.MyProjectName.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "8.0.0-rc.1.23419.6") + .HasAnnotation("ProductVersion", "8.0.0-rc.2.23480.1") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -215,7 +215,6 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnName("ChangeType"); b.Property("EntityId") - .IsRequired() .HasMaxLength(128) .HasColumnType("nvarchar(128)") .HasColumnName("EntityId"); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/package.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/package.json index df64c1f21d..5d98265162 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/package.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~2.4.0-rc.4" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~2.4.1" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/package.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/package.json index df64c1f21d..5d98265162 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/package.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~2.4.0-rc.4" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~2.4.1" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20231003031446_Initial.Designer.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20231026071035_Initial.Designer.cs similarity index 99% rename from templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20231003031446_Initial.Designer.cs rename to templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20231026071035_Initial.Designer.cs index cdefb06e34..e25c062a5d 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20231003031446_Initial.Designer.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20231026071035_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Host.Migrations { [DbContext(typeof(MyProjectNameDbContext))] - [Migration("20231003031446_Initial")] + [Migration("20231026071035_Initial")] partial class Initial { /// @@ -22,7 +22,7 @@ namespace MyCompanyName.MyProjectName.Host.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "8.0.0-rc.1.23419.6") + .HasAnnotation("ProductVersion", "8.0.0-rc.2.23480.1") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -218,7 +218,6 @@ namespace MyCompanyName.MyProjectName.Host.Migrations .HasColumnName("ChangeType"); b.Property("EntityId") - .IsRequired() .HasMaxLength(128) .HasColumnType("nvarchar(128)") .HasColumnName("EntityId"); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20231003031446_Initial.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20231026071035_Initial.cs similarity index 99% rename from templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20231003031446_Initial.cs rename to templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20231026071035_Initial.cs index 9eaa158d4b..3b285fc029 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20231003031446_Initial.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20231026071035_Initial.cs @@ -464,7 +464,7 @@ namespace MyCompanyName.MyProjectName.Host.Migrations ChangeTime = table.Column(type: "datetime2", nullable: false), ChangeType = table.Column(type: "tinyint", nullable: false), EntityTenantId = table.Column(type: "uniqueidentifier", nullable: true), - EntityId = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + EntityId = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), EntityTypeFullName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true) }, diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/MyProjectNameDbContextModelSnapshot.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/MyProjectNameDbContextModelSnapshot.cs index 04ad8a488a..a38be819e5 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/MyProjectNameDbContextModelSnapshot.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/MyProjectNameDbContextModelSnapshot.cs @@ -19,7 +19,7 @@ namespace MyCompanyName.MyProjectName.Host.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "8.0.0-rc.1.23419.6") + .HasAnnotation("ProductVersion", "8.0.0-rc.2.23480.1") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -215,7 +215,6 @@ namespace MyCompanyName.MyProjectName.Host.Migrations .HasColumnName("ChangeType"); b.Property("EntityId") - .IsRequired() .HasMaxLength(128) .HasColumnType("nvarchar(128)") .HasColumnName("EntityId"); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/package.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/package.json index df64c1f21d..5d98265162 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/package.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~2.4.0-rc.4" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~2.4.1" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/package.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/package.json index df64c1f21d..5d98265162 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/package.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~2.4.0-rc.4" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~2.4.1" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20231003031451_Initial.Designer.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20231026071042_Initial.Designer.cs similarity index 99% rename from templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20231003031451_Initial.Designer.cs rename to templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20231026071042_Initial.Designer.cs index a3684f655c..cce37bd3dd 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20231003031451_Initial.Designer.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20231026071042_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Mvc.Migrations { [DbContext(typeof(MyProjectNameDbContext))] - [Migration("20231003031451_Initial")] + [Migration("20231026071042_Initial")] partial class Initial { /// @@ -22,7 +22,7 @@ namespace MyCompanyName.MyProjectName.Mvc.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "8.0.0-rc.1.23419.6") + .HasAnnotation("ProductVersion", "8.0.0-rc.2.23480.1") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -218,7 +218,6 @@ namespace MyCompanyName.MyProjectName.Mvc.Migrations .HasColumnName("ChangeType"); b.Property("EntityId") - .IsRequired() .HasMaxLength(128) .HasColumnType("nvarchar(128)") .HasColumnName("EntityId"); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20231003031451_Initial.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20231026071042_Initial.cs similarity index 99% rename from templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20231003031451_Initial.cs rename to templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20231026071042_Initial.cs index 03261fb7bd..2263582b8a 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20231003031451_Initial.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20231026071042_Initial.cs @@ -464,7 +464,7 @@ namespace MyCompanyName.MyProjectName.Mvc.Migrations ChangeTime = table.Column(type: "datetime2", nullable: false), ChangeType = table.Column(type: "tinyint", nullable: false), EntityTenantId = table.Column(type: "uniqueidentifier", nullable: true), - EntityId = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + EntityId = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), EntityTypeFullName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true) }, diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/MyProjectNameDbContextModelSnapshot.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/MyProjectNameDbContextModelSnapshot.cs index b28dbf62b4..9e899c6051 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/MyProjectNameDbContextModelSnapshot.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/MyProjectNameDbContextModelSnapshot.cs @@ -19,7 +19,7 @@ namespace MyCompanyName.MyProjectName.Mvc.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "8.0.0-rc.1.23419.6") + .HasAnnotation("ProductVersion", "8.0.0-rc.2.23480.1") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -215,7 +215,6 @@ namespace MyCompanyName.MyProjectName.Mvc.Migrations .HasColumnName("ChangeType"); b.Property("EntityId") - .IsRequired() .HasMaxLength(128) .HasColumnType("nvarchar(128)") .HasColumnName("EntityId"); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/package.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/package.json index df64c1f21d..5d98265162 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/package.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~2.4.0-rc.4" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~2.4.1" } } diff --git a/templates/app/angular/package.json b/templates/app/angular/package.json index 428834d181..eb41b2624f 100644 --- a/templates/app/angular/package.json +++ b/templates/app/angular/package.json @@ -12,15 +12,15 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~7.4.0", - "@abp/ng.components": "~7.4.0", - "@abp/ng.core": "~7.4.0", - "@abp/ng.oauth": "~7.4.0", - "@abp/ng.identity": "~7.4.0", - "@abp/ng.setting-management": "~7.4.0", - "@abp/ng.tenant-management": "~7.4.0", - "@abp/ng.theme.shared": "~7.4.0", - "@abp/ng.theme.lepton-x": "~2.4.0", + "@abp/ng.account": "~7.4.1", + "@abp/ng.components": "~7.4.1", + "@abp/ng.core": "~7.4.1", + "@abp/ng.oauth": "~7.4.1", + "@abp/ng.identity": "~7.4.1", + "@abp/ng.setting-management": "~7.4.1", + "@abp/ng.tenant-management": "~7.4.1", + "@abp/ng.theme.shared": "~7.4.1", + "@abp/ng.theme.lepton-x": "~2.4.1", "@angular/animations": "~16.2.0", "@angular/common": "~16.2.0", "@angular/compiler": "~16.2.0", @@ -42,7 +42,7 @@ "@angular-eslint/eslint-plugin-template": "~16.2.0", "@angular-eslint/schematics": "~16.2.0", "@angular-eslint/template-parser": "~16.2.0", - "@abp/ng.schematics": "~7.4.0", + "@abp/ng.schematics": "~7.4.1", "@angular/cli": "~16.2.0", "@angular/compiler-cli": "~16.2.0", "@angular/language-service": "~16.2.0", diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/package.json index 15e9058aeb..3d5139e4f3 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/package.json @@ -3,6 +3,6 @@ "name": "my-app-authserver", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~2.4.0-rc.4" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~2.4.1" } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/package.json index cd5f25b790..9122625971 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/package.json @@ -3,7 +3,7 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~2.4.0-rc.4", - "@abp/aspnetcore.components.server.leptonxlitetheme": "~2.4.0-rc.4" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~2.4.1", + "@abp/aspnetcore.components.server.leptonxlitetheme": "~2.4.1" } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/package.json index cd5f25b790..9122625971 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/package.json @@ -3,7 +3,7 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~2.4.0-rc.4", - "@abp/aspnetcore.components.server.leptonxlitetheme": "~2.4.0-rc.4" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~2.4.1", + "@abp/aspnetcore.components.server.leptonxlitetheme": "~2.4.1" } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231003030048_Initial.Designer.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231026070402_Initial.Designer.cs similarity index 99% rename from templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231003030048_Initial.Designer.cs rename to templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231026070402_Initial.Designer.cs index d80788a40e..6ed09621a7 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231003030048_Initial.Designer.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231026070402_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Migrations { [DbContext(typeof(MyProjectNameDbContext))] - [Migration("20231003030048_Initial")] + [Migration("20231026070402_Initial")] partial class Initial { /// @@ -22,7 +22,7 @@ namespace MyCompanyName.MyProjectName.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "8.0.0-rc.1.23419.6") + .HasAnnotation("ProductVersion", "8.0.0-rc.2.23480.1") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -218,7 +218,6 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnName("ChangeType"); b.Property("EntityId") - .IsRequired() .HasMaxLength(128) .HasColumnType("nvarchar(128)") .HasColumnName("EntityId"); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231003030048_Initial.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231026070402_Initial.cs similarity index 99% rename from templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231003030048_Initial.cs rename to templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231026070402_Initial.cs index 00c66b2800..bef0c6b97d 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231003030048_Initial.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231026070402_Initial.cs @@ -485,7 +485,7 @@ namespace MyCompanyName.MyProjectName.Migrations ChangeTime = table.Column(type: "datetime2", nullable: false), ChangeType = table.Column(type: "tinyint", nullable: false), EntityTenantId = table.Column(type: "uniqueidentifier", nullable: true), - EntityId = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + EntityId = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), EntityTypeFullName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true) }, diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/MyProjectNameDbContextModelSnapshot.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/MyProjectNameDbContextModelSnapshot.cs index 1198a563d4..f44d13227d 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/MyProjectNameDbContextModelSnapshot.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/MyProjectNameDbContextModelSnapshot.cs @@ -19,7 +19,7 @@ namespace MyCompanyName.MyProjectName.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "8.0.0-rc.1.23419.6") + .HasAnnotation("ProductVersion", "8.0.0-rc.2.23480.1") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -215,7 +215,6 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnName("ChangeType"); b.Property("EntityId") - .IsRequired() .HasMaxLength(128) .HasColumnType("nvarchar(128)") .HasColumnName("EntityId"); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json index df64c1f21d..5d98265162 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~2.4.0-rc.4" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~2.4.1" } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json index df64c1f21d..5d98265162 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~2.4.0-rc.4" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~2.4.1" } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json index df64c1f21d..5d98265162 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~2.4.0-rc.4" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~2.4.1" } } diff --git a/templates/module/angular/package.json b/templates/module/angular/package.json index 59093f8585..42e13a9dc5 100644 --- a/templates/module/angular/package.json +++ b/templates/module/angular/package.json @@ -12,15 +12,15 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~7.4.0", - "@abp/ng.components": "~7.4.0", - "@abp/ng.core": "~7.4.0", - "@abp/ng.oauth": "~7.4.0", - "@abp/ng.identity": "~7.4.0", - "@abp/ng.setting-management": "~7.4.0", - "@abp/ng.tenant-management": "~7.4.0", - "@abp/ng.theme.basic": "~7.4.0", - "@abp/ng.theme.shared": "~7.4.0", + "@abp/ng.account": "~7.4.1", + "@abp/ng.components": "~7.4.1", + "@abp/ng.core": "~7.4.1", + "@abp/ng.oauth": "~7.4.1", + "@abp/ng.identity": "~7.4.1", + "@abp/ng.setting-management": "~7.4.1", + "@abp/ng.tenant-management": "~7.4.1", + "@abp/ng.theme.basic": "~7.4.1", + "@abp/ng.theme.shared": "~7.4.1", "@angular/animations": "~16.2.0", "@angular/common": "~16.2.0", "@angular/compiler": "~16.2.0", @@ -41,7 +41,7 @@ "@angular-eslint/eslint-plugin-template": "~16.2.0", "@angular-eslint/schematics": "~16.2.0", "@angular-eslint/template-parser": "~16.2.0", - "@abp/ng.schematics": "~7.4.0", + "@abp/ng.schematics": "~7.4.1", "@angular/cli": "~16.2.0", "@angular/compiler-cli": "~16.2.0", "@angular/language-service": "~16.2.0", diff --git a/templates/module/angular/projects/my-project-name/package.json b/templates/module/angular/projects/my-project-name/package.json index 24701083c8..c8f403d461 100644 --- a/templates/module/angular/projects/my-project-name/package.json +++ b/templates/module/angular/projects/my-project-name/package.json @@ -4,8 +4,8 @@ "peerDependencies": { "@angular/common": ">=14", "@angular/core": ">=14", - "@abp/ng.core": ">=7.4.0", - "@abp/ng.theme.shared": ">=7.4.0" + "@abp/ng.core": ">=7.4.1", + "@abp/ng.theme.shared": ">=7.4.1" }, "dependencies": { "tslib": "^2.1.0" diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20231003031621_Initial.Designer.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20231026071058_Initial.Designer.cs similarity index 99% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20231003031621_Initial.Designer.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20231026071058_Initial.Designer.cs index e9ad539254..b6947fded4 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20231003031621_Initial.Designer.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20231026071058_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Migrations { [DbContext(typeof(AuthServerDbContext))] - [Migration("20231003031621_Initial")] + [Migration("20231026071058_Initial")] partial class Initial { /// @@ -22,7 +22,7 @@ namespace MyCompanyName.MyProjectName.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "8.0.0-rc.1.23419.6") + .HasAnnotation("ProductVersion", "8.0.0-rc.2.23480.1") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -218,7 +218,6 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnName("ChangeType"); b.Property("EntityId") - .IsRequired() .HasMaxLength(128) .HasColumnType("nvarchar(128)") .HasColumnName("EntityId"); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20231003031450_Initial.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20231026071058_Initial.cs similarity index 99% rename from templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20231003031450_Initial.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20231026071058_Initial.cs index d79d7169cb..193fa0b299 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20231003031450_Initial.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20231026071058_Initial.cs @@ -464,7 +464,7 @@ namespace MyCompanyName.MyProjectName.Migrations ChangeTime = table.Column(type: "datetime2", nullable: false), ChangeType = table.Column(type: "tinyint", nullable: false), EntityTenantId = table.Column(type: "uniqueidentifier", nullable: true), - EntityId = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + EntityId = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), EntityTypeFullName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true) }, diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/AuthServerDbContextModelSnapshot.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/AuthServerDbContextModelSnapshot.cs index b60bca4607..849e6894c2 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/AuthServerDbContextModelSnapshot.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/AuthServerDbContextModelSnapshot.cs @@ -19,7 +19,7 @@ namespace MyCompanyName.MyProjectName.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "8.0.0-rc.1.23419.6") + .HasAnnotation("ProductVersion", "8.0.0-rc.2.23480.1") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -215,7 +215,6 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnName("ChangeType"); b.Property("EntityId") - .IsRequired() .HasMaxLength(128) .HasColumnType("nvarchar(128)") .HasColumnName("EntityId"); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/package.json index a674d1b123..55e0a1cc09 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/package.json @@ -3,6 +3,6 @@ "name": "my-app-authserver", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~7.4.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "~7.4.1" } } diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20231003031642_Initial.Designer.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20231026071107_Initial.Designer.cs similarity index 99% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20231003031642_Initial.Designer.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20231026071107_Initial.Designer.cs index c4d7e314c4..34883896f8 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20231003031642_Initial.Designer.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20231026071107_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Blazor.Server.Host.Migrations { [DbContext(typeof(UnifiedDbContext))] - [Migration("20231003031642_Initial")] + [Migration("20231026071107_Initial")] partial class Initial { /// @@ -22,7 +22,7 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Host.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "8.0.0-rc.1.23419.6") + .HasAnnotation("ProductVersion", "8.0.0-rc.2.23480.1") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -218,7 +218,6 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Host.Migrations .HasColumnName("ChangeType"); b.Property("EntityId") - .IsRequired() .HasMaxLength(128) .HasColumnType("nvarchar(128)") .HasColumnName("EntityId"); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20231003031642_Initial.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20231026071107_Initial.cs similarity index 99% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20231003031642_Initial.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20231026071107_Initial.cs index c75c765e1a..b21456cc73 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20231003031642_Initial.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20231026071107_Initial.cs @@ -404,7 +404,7 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Host.Migrations ChangeTime = table.Column(type: "datetime2", nullable: false), ChangeType = table.Column(type: "tinyint", nullable: false), EntityTenantId = table.Column(type: "uniqueidentifier", nullable: true), - EntityId = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + EntityId = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), EntityTypeFullName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true) }, diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/UnifiedDbContextModelSnapshot.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/UnifiedDbContextModelSnapshot.cs index 6172cec5c5..102de849e7 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/UnifiedDbContextModelSnapshot.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/UnifiedDbContextModelSnapshot.cs @@ -19,7 +19,7 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Host.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "8.0.0-rc.1.23419.6") + .HasAnnotation("ProductVersion", "8.0.0-rc.2.23480.1") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -215,7 +215,6 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Host.Migrations .HasColumnName("ChangeType"); b.Property("EntityId") - .IsRequired() .HasMaxLength(128) .HasColumnType("nvarchar(128)") .HasColumnName("EntityId"); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/package.json index b62c2b2ae9..43b26f8e4e 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/package.json @@ -3,7 +3,7 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~7.4.0", - "@abp/aspnetcore.components.server.basictheme": "~7.4.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "~7.4.1", + "@abp/aspnetcore.components.server.basictheme": "~7.4.1" } } diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json index 7fbc0569f6..212b67b1c1 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~7.4.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "~7.4.1" } } diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20231003031645_Initial.Designer.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20231026071207_Initial.Designer.cs similarity index 99% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20231003031645_Initial.Designer.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20231026071207_Initial.Designer.cs index cb4ee3216d..db13e9c657 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20231003031645_Initial.Designer.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20231026071207_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Migrations { [DbContext(typeof(UnifiedDbContext))] - [Migration("20231003031645_Initial")] + [Migration("20231026071207_Initial")] partial class Initial { /// @@ -22,7 +22,7 @@ namespace MyCompanyName.MyProjectName.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "8.0.0-rc.1.23419.6") + .HasAnnotation("ProductVersion", "8.0.0-rc.2.23480.1") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -218,7 +218,6 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnName("ChangeType"); b.Property("EntityId") - .IsRequired() .HasMaxLength(128) .HasColumnType("nvarchar(128)") .HasColumnName("EntityId"); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20231003031645_Initial.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20231026071207_Initial.cs similarity index 99% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20231003031645_Initial.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20231026071207_Initial.cs index ddeb81c91f..d19146cde5 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20231003031645_Initial.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20231026071207_Initial.cs @@ -404,7 +404,7 @@ namespace MyCompanyName.MyProjectName.Migrations ChangeTime = table.Column(type: "datetime2", nullable: false), ChangeType = table.Column(type: "tinyint", nullable: false), EntityTenantId = table.Column(type: "uniqueidentifier", nullable: true), - EntityId = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + EntityId = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), EntityTypeFullName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true) }, diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs index bfffc80e3d..a8942a8d84 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs @@ -19,7 +19,7 @@ namespace MyCompanyName.MyProjectName.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "8.0.0-rc.1.23419.6") + .HasAnnotation("ProductVersion", "8.0.0-rc.2.23480.1") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -215,7 +215,6 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnName("ChangeType"); b.Property("EntityId") - .IsRequired() .HasMaxLength(128) .HasColumnType("nvarchar(128)") .HasColumnName("EntityId"); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json index 7fbc0569f6..212b67b1c1 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~7.4.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "~7.4.1" } }