From f287e592c05058423ab0873cbd3d9fdf2b9ad85f Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 3 Dec 2020 18:40:51 +0800 Subject: [PATCH 001/217] Add Autofac.Extensions.DependencyInjection to Volo.Abp.Autofac module. --- .../AutofacRegistration.cs | 140 +++++++++++++----- .../AutofacServiceProvider.cs | 122 --------------- .../AutofacServiceProviderFactory.cs | 77 ---------- .../AutofacServiceScope.cs | 67 --------- .../AutofacServiceScopeFactory.cs | 65 -------- .../Volo.Abp.Autofac/Volo.Abp.Autofac.csproj | 2 + 6 files changed, 108 insertions(+), 365 deletions(-) delete mode 100644 framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacServiceProvider.cs delete mode 100644 framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacServiceProviderFactory.cs delete mode 100644 framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacServiceScope.cs delete mode 100644 framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacServiceScopeFactory.cs diff --git a/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacRegistration.cs b/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacRegistration.cs index 024fc3a258..aeb0de9f2f 100644 --- a/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacRegistration.cs +++ b/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacRegistration.cs @@ -1,6 +1,6 @@ // This software is part of the Autofac IoC container // Copyright © 2015 Autofac Contributors -// http://autofac.org +// https://autofac.org // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation @@ -24,9 +24,12 @@ // OTHER DEALINGS IN THE SOFTWARE. using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Reflection; using Autofac.Builder; using Microsoft.Extensions.DependencyInjection; +using Volo.Abp; using Volo.Abp.Modularity; namespace Autofac.Extensions.DependencyInjection @@ -45,16 +48,62 @@ namespace Autofac.Extensions.DependencyInjection /// The into which the registrations should be made. /// /// - /// The set of service descriptors to register in the container. + /// A container builder that can be used to create an . /// public static void Populate( - this ContainerBuilder builder, - IServiceCollection services) + this ContainerBuilder builder, + IServiceCollection services) { - builder.RegisterType().As(); - builder.RegisterType().As(); + Populate(builder, services, null); + } + + /// + /// Populates the Autofac container builder with the set of registered service descriptors + /// and makes and + /// available in the container. Using this overload is incompatible with the ASP.NET Core + /// support for . + /// + /// + /// The into which the registrations should be made. + /// + /// + /// A container builder that can be used to create an . + /// + /// + /// If provided and not then all registrations with lifetime are registered + /// using + /// with provided + /// instead of using . + /// + /// + /// + /// Specifying a addresses a specific case where you have + /// an application that uses Autofac but where you need to isolate a set of services in a child scope. For example, + /// if you have a large application that self-hosts ASP.NET Core items, you may want to isolate the ASP.NET + /// Core registrations in a child lifetime scope so they don't show up for the rest of the application. + /// This overload allows that. Note it is the developer's responsibility to execute this and create an + /// using the child lifetime scope. + /// + /// + public static void Populate( + this ContainerBuilder builder, + IServiceCollection services, + object lifetimeScopeTagForSingletons) + { + if (services == null) + { + throw new ArgumentNullException(nameof(services)); + } - Register(builder, services); + builder.RegisterType().As().ExternallyOwned(); + var autofacServiceScopeFactory = typeof(AutofacServiceProvider).Assembly.GetType("Autofac.Extensions.DependencyInjection.AutofacServiceScopeFactory"); + if (autofacServiceScopeFactory == null) + { + throw new AbpException("Unable get type of Autofac.Extensions.DependencyInjection.AutofacServiceScopeFactory!"); + } + builder.RegisterType(autofacServiceScopeFactory).As(); + + Register(builder, services, lifetimeScopeTagForSingletons); } /// @@ -64,18 +113,33 @@ namespace Autofac.Extensions.DependencyInjection /// The object registration style. /// The registration being built. /// The lifecycle specified on the service registration. + /// + /// If not then all registrations with lifetime are registered + /// using + /// with provided + /// instead of using . + /// /// /// The , configured with the proper lifetime scope, /// and available for additional configuration. /// private static IRegistrationBuilder ConfigureLifecycle( - this IRegistrationBuilder registrationBuilder, - ServiceLifetime lifecycleKind) + this IRegistrationBuilder registrationBuilder, + ServiceLifetime lifecycleKind, + object lifetimeScopeTagForSingleton) { switch (lifecycleKind) { case ServiceLifetime.Singleton: - registrationBuilder.SingleInstance(); + if (lifetimeScopeTagForSingleton == null) + { + registrationBuilder.SingleInstance(); + } + else + { + registrationBuilder.InstancePerMatchingLifetimeScope(lifetimeScopeTagForSingleton); + } + break; case ServiceLifetime.Scoped: registrationBuilder.InstancePerLifetimeScope(); @@ -95,57 +159,65 @@ namespace Autofac.Extensions.DependencyInjection /// The into which the registrations should be made. /// /// - /// The set of service descriptors to register in the container. + /// A container builder that can be used to create an . + /// + /// + /// If not then all registrations with lifetime are registered + /// using + /// with provided + /// instead of using . /// + [SuppressMessage("CA2000", "CA2000", Justification = "Registrations created here are disposed when the built container is disposed.")] private static void Register( - ContainerBuilder builder, - IServiceCollection services) + ContainerBuilder builder, + IServiceCollection services, + object lifetimeScopeTagForSingletons) { var moduleContainer = services.GetSingletonInstance(); var registrationActionList = services.GetRegistrationActionList(); - foreach (var service in services) + foreach (var descriptor in services) { - if (service.ImplementationType != null) + if (descriptor.ImplementationType != null) { // Test if the an open generic type is being registered - var serviceTypeInfo = service.ServiceType.GetTypeInfo(); + var serviceTypeInfo = descriptor.ServiceType.GetTypeInfo(); if (serviceTypeInfo.IsGenericTypeDefinition) { builder - .RegisterGeneric(service.ImplementationType) - .As(service.ServiceType) - .ConfigureLifecycle(service.Lifetime) + .RegisterGeneric(descriptor.ImplementationType) + .As(descriptor.ServiceType) + .ConfigureLifecycle(descriptor.Lifetime, lifetimeScopeTagForSingletons) .ConfigureAbpConventions(moduleContainer, registrationActionList); } else { builder - .RegisterType(service.ImplementationType) - .As(service.ServiceType) - .ConfigureLifecycle(service.Lifetime) + .RegisterType(descriptor.ImplementationType) + .As(descriptor.ServiceType) + .ConfigureLifecycle(descriptor.Lifetime, lifetimeScopeTagForSingletons) .ConfigureAbpConventions(moduleContainer, registrationActionList); } } - else if (service.ImplementationFactory != null) + else if (descriptor.ImplementationFactory != null) { - var registration = RegistrationBuilder.ForDelegate(service.ServiceType, (context, parameters) => - { - var serviceProvider = context.Resolve(); - return service.ImplementationFactory(serviceProvider); - }) - .ConfigureLifecycle(service.Lifetime) - .CreateRegistration(); - //TODO: ConfigureAbpConventions ? + var registration = RegistrationBuilder.ForDelegate(descriptor.ServiceType, (context, parameters) => + { + var serviceProvider = context.Resolve(); + return descriptor.ImplementationFactory(serviceProvider); + }) + .ConfigureLifecycle(descriptor.Lifetime, lifetimeScopeTagForSingletons) + .CreateRegistration(); + //TODO: ConfigureAbpConventions ? builder.RegisterComponent(registration); } else { builder - .RegisterInstance(service.ImplementationInstance) - .As(service.ServiceType) - .ConfigureLifecycle(service.Lifetime); + .RegisterInstance(descriptor.ImplementationInstance) + .As(descriptor.ServiceType) + .ConfigureLifecycle(descriptor.Lifetime, null); } } } diff --git a/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacServiceProvider.cs b/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacServiceProvider.cs deleted file mode 100644 index 1c1a24ff66..0000000000 --- a/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacServiceProvider.cs +++ /dev/null @@ -1,122 +0,0 @@ -// This software is part of the Autofac IoC container -// Copyright © 2015 Autofac Contributors -// https://autofac.org -// -// Permission is hereby granted, free of charge, to any person -// obtaining a copy of this software and associated documentation -// files (the "Software"), to deal in the Software without -// restriction, including without limitation the rights to use, -// copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the -// Software is furnished to do so, subject to the following -// conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -// OTHER DEALINGS IN THE SOFTWARE. - -using System; -using Microsoft.Extensions.DependencyInjection; - -namespace Autofac.Extensions.DependencyInjection -{ - /// - /// Autofac implementation of the ASP.NET Core . - /// - /// - /// - public class AutofacServiceProvider : IServiceProvider, ISupportRequiredService, IDisposable - { - private readonly ILifetimeScope _lifetimeScope; - - private bool _disposed = false; - - /// - /// Initializes a new instance of the class. - /// - /// - /// The lifetime scope from which services will be resolved. - /// - public AutofacServiceProvider(ILifetimeScope lifetimeScope) - { - this._lifetimeScope = lifetimeScope; - } - - /// - /// Gets service of type from the - /// and requires it be present. - /// - /// - /// An object that specifies the type of service object to get. - /// - /// - /// A service object of type . - /// - /// - /// Thrown if the isn't registered with the container. - /// - /// - /// Thrown if the object can't be resolved from the container. - /// - public object GetRequiredService(Type serviceType) - { - return this._lifetimeScope.Resolve(serviceType); - } - - /// - /// Gets the service object of the specified type. - /// - /// - /// An object that specifies the type of service object to get. - /// - /// - /// A service object of type ; or - /// if there is no service object of type . - /// - public object GetService(Type serviceType) - { - return this._lifetimeScope.ResolveOptional(serviceType); - } - - /// - /// Gets the underlying instance of . - /// - public ILifetimeScope LifetimeScope => _lifetimeScope; - - /// - /// Releases unmanaged and - optionally - managed resources. - /// - /// - /// to release both managed and unmanaged resources; - /// to release only unmanaged resources. - /// - protected virtual void Dispose(bool disposing) - { - if (!this._disposed) - { - this._disposed = true; - if (disposing) - { - this._lifetimeScope.Dispose(); - } - } - } - - /// - /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - /// - public void Dispose() - { - this.Dispose(true); - GC.SuppressFinalize(this); - } - } -} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacServiceProviderFactory.cs b/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacServiceProviderFactory.cs deleted file mode 100644 index 21a7ca331d..0000000000 --- a/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacServiceProviderFactory.cs +++ /dev/null @@ -1,77 +0,0 @@ -// This software is part of the Autofac IoC container -// Copyright © 2017 Autofac Contributors -// http://autofac.org -// -// Permission is hereby granted, free of charge, to any person -// obtaining a copy of this software and associated documentation -// files (the "Software"), to deal in the Software without -// restriction, including without limitation the rights to use, -// copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the -// Software is furnished to do so, subject to the following -// conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -// OTHER DEALINGS IN THE SOFTWARE. - -using System; -using Microsoft.Extensions.DependencyInjection; - -namespace Autofac.Extensions.DependencyInjection -{ - /// - /// A factory for creating a and an . - /// - public class AutofacServiceProviderFactory : IServiceProviderFactory - { - private readonly Action _configurationAction; - - /// - /// Initializes a new instance of the class. - /// - /// Action on a that adds component registrations to the container. - public AutofacServiceProviderFactory(Action configurationAction = null) - { - _configurationAction = configurationAction ?? (builder => { }); - } - - /// - /// Creates a container builder from an . - /// - /// The collection of services - /// A container builder that can be used to create an . - public ContainerBuilder CreateBuilder(IServiceCollection services) - { - var builder = new ContainerBuilder(); - - builder.Populate(services); - - _configurationAction(builder); - - return builder; - } - - /// - /// Creates an from the container builder. - /// - /// The container builder - /// An - public IServiceProvider CreateServiceProvider(ContainerBuilder containerBuilder) - { - if (containerBuilder == null) throw new ArgumentNullException(nameof(containerBuilder)); - - var container = containerBuilder.Build(); - - return new AutofacServiceProvider(container); - } - } -} diff --git a/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacServiceScope.cs b/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacServiceScope.cs deleted file mode 100644 index 425c6769da..0000000000 --- a/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacServiceScope.cs +++ /dev/null @@ -1,67 +0,0 @@ -// This software is part of the Autofac IoC container -// Copyright © 2015 Autofac Contributors -// http://autofac.org -// -// Permission is hereby granted, free of charge, to any person -// obtaining a copy of this software and associated documentation -// files (the "Software"), to deal in the Software without -// restriction, including without limitation the rights to use, -// copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the -// Software is furnished to do so, subject to the following -// conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -// OTHER DEALINGS IN THE SOFTWARE. - -using System; -using Microsoft.Extensions.DependencyInjection; - -namespace Autofac.Extensions.DependencyInjection -{ - /// - /// Autofac implementation of the ASP.NET Core . - /// - /// - internal class AutofacServiceScope : IServiceScope - { - private readonly ILifetimeScope _lifetimeScope; - - /// - /// Initializes a new instance of the class. - /// - /// - /// The lifetime scope from which services should be resolved for this service scope. - /// - public AutofacServiceScope(ILifetimeScope lifetimeScope) - { - this._lifetimeScope = lifetimeScope; - this.ServiceProvider = this._lifetimeScope.Resolve(); - } - - /// - /// Gets an corresponding to this service scope. - /// - /// - /// An that can be used to resolve dependencies from the scope. - /// - public IServiceProvider ServiceProvider { get; } - - /// - /// Disposes of the lifetime scope and resolved disposable services. - /// - public void Dispose() - { - this._lifetimeScope.Dispose(); - } - } -} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacServiceScopeFactory.cs b/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacServiceScopeFactory.cs deleted file mode 100644 index 31917fd079..0000000000 --- a/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacServiceScopeFactory.cs +++ /dev/null @@ -1,65 +0,0 @@ -// This software is part of the Autofac IoC container -// Copyright © 2015 Autofac Contributors -// http://autofac.org -// -// Permission is hereby granted, free of charge, to any person -// obtaining a copy of this software and associated documentation -// files (the "Software"), to deal in the Software without -// restriction, including without limitation the rights to use, -// copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the -// Software is furnished to do so, subject to the following -// conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -// OTHER DEALINGS IN THE SOFTWARE. - -using System.Diagnostics.CodeAnalysis; -using Microsoft.Extensions.DependencyInjection; - -namespace Autofac.Extensions.DependencyInjection -{ - /// - /// Autofac implementation of the ASP.NET Core . - /// - /// - [SuppressMessage("Microsoft.ApiDesignGuidelines", "CA2213", Justification = "The creator of the root service lifetime scope is responsible for disposal.")] - internal class AutofacServiceScopeFactory : IServiceScopeFactory - { - private readonly ILifetimeScope _lifetimeScope; - - /// - /// Initializes a new instance of the class. - /// - /// The lifetime scope. - public AutofacServiceScopeFactory(ILifetimeScope lifetimeScope) - { - this._lifetimeScope = lifetimeScope; - } - - /// - /// Creates an which contains an - /// used to resolve dependencies within - /// the scope. - /// - /// - /// An controlling the lifetime of the scope. Once - /// this is disposed, any scoped services that have been resolved - /// from the - /// will also be disposed. - /// - public IServiceScope CreateScope() - { - return new AutofacServiceScope(this._lifetimeScope.BeginLifetimeScope()); - } - } -} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Autofac/Volo.Abp.Autofac.csproj b/framework/src/Volo.Abp.Autofac/Volo.Abp.Autofac.csproj index 2032464676..465c645328 100644 --- a/framework/src/Volo.Abp.Autofac/Volo.Abp.Autofac.csproj +++ b/framework/src/Volo.Abp.Autofac/Volo.Abp.Autofac.csproj @@ -17,6 +17,8 @@ + + From 89c0e675d2a7f873726e8bb0223f14541f15ce55 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 21 Dec 2020 17:54:10 +0800 Subject: [PATCH 002/217] Fix sorting in MongoAuditLogRepository --- .../Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs index 14e4dd39c7..a09494d8ce 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs @@ -172,11 +172,11 @@ namespace Volo.Abp.AuditLogging.MongoDB { var query = GetEntityChangeListQuery(auditLogId, startTime, endTime, changeType, entityId, entityTypeFullName); - var auditLogs = await query.As>() + return await query + .OrderBy(sorting ?? "changeTime desc") + .As>() .PageBy>(skipCount, maxResultCount) .ToListAsync(GetCancellationToken(cancellationToken)); - - return auditLogs.AsQueryable().OrderBy(sorting ?? "changeTime desc").ToList(); } public virtual async Task GetEntityChangeCountAsync( From cfecb1f8d9f718735ea2a3cad947840c312625cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 21 Dec 2020 16:31:55 +0300 Subject: [PATCH 003/217] Implemented creating dbcontext in async way. --- .../Repositories/IReadOnlyRepository.cs | 9 + .../Abp/Domain/Repositories/RepositoryBase.cs | 20 +++ .../EntityFrameworkCore/EfCoreRepository.cs | 113 ++++++++---- .../EntityFrameworkCore/IEfCoreRepository.cs | 10 +- .../EntityFrameworkCore/IDbContextProvider.cs | 8 +- .../UnitOfWorkDbContextProvider.cs | 104 ++++++++++- .../MemoryDb/MemoryDbRepository.cs | 6 + .../MongoDB/IMongoDbRepository.cs | 14 +- .../Repositories/MongoDB/MongoDbRepository.cs | 161 ++++++++++++------ .../Abp/MongoDB/IMongoDbContextProvider.cs | 13 +- .../UnitOfWorkMongoDbContextProvider.cs | 109 +++++++++++- .../RepositoryRegistration_Tests.cs | 6 + 12 files changed, 477 insertions(+), 96 deletions(-) diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IReadOnlyRepository.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IReadOnlyRepository.cs index 499a1e58be..80d1425044 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IReadOnlyRepository.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IReadOnlyRepository.cs @@ -1,6 +1,7 @@ using System; using System.Linq; using System.Linq.Expressions; +using System.Threading.Tasks; using Volo.Abp.Domain.Entities; using Volo.Abp.Linq; @@ -11,9 +12,17 @@ namespace Volo.Abp.Domain.Repositories { IAsyncQueryableExecuter AsyncExecuter { get; } + [Obsolete("Use WithDetailsAsync method.")] IQueryable WithDetails(); + [Obsolete("Use WithDetailsAsync method.")] IQueryable WithDetails(params Expression>[] propertySelectors); + + Task> WithDetailsAsync(); //TODO: CancellationToken + + Task> WithDetailsAsync(params Expression>[] propertySelectors); //TODO: CancellationToken + + Task> GetQueryableAsync(); //TODO: CancellationToken } public interface IReadOnlyRepository : IReadOnlyRepository, IReadOnlyBasicRepository diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs index fd66b293c9..4ee118fcfe 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs @@ -24,34 +24,54 @@ namespace Volo.Abp.Domain.Repositories public IUnitOfWorkManager UnitOfWorkManager { get; set; } + [Obsolete("This method will be removed in future versions.")] public virtual Type ElementType => GetQueryable().ElementType; + [Obsolete("This method will be removed in future versions.")] public virtual Expression Expression => GetQueryable().Expression; + [Obsolete("This method will be removed in future versions.")] public virtual IQueryProvider Provider => GetQueryable().Provider; + [Obsolete("Use WithDetailsAsync method.")] public virtual IQueryable WithDetails() { return GetQueryable(); } + [Obsolete("Use WithDetailsAsync method.")] public virtual IQueryable WithDetails(params Expression>[] propertySelectors) { return GetQueryable(); } + public virtual Task> WithDetailsAsync() + { + return GetQueryableAsync(); + } + + public virtual Task> WithDetailsAsync(params Expression>[] propertySelectors) + { + return GetQueryableAsync(); + } + + [Obsolete("This method will be removed in future versions.")] IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } + [Obsolete("This method will be removed in future versions.")] public IEnumerator GetEnumerator() { return GetQueryable().GetEnumerator(); } + [Obsolete("Use GetQueryableAsync method.")] protected abstract IQueryable GetQueryable(); + public abstract Task> GetQueryableAsync(); + public abstract Task FindAsync( Expression> predicate, bool includeDetails = true, diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs index 0d44fd1249..bee421dbe2 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs @@ -19,11 +19,34 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore where TDbContext : IEfCoreDbContext where TEntity : class, IEntity { - public virtual DbSet DbSet => DbContext.Set(); + [Obsolete("Use GetDbContextAsync() method.")] + protected virtual TDbContext DbContext => _dbContextProvider.GetDbContext(); + [Obsolete("Use GetDbContextAsync() method.")] DbContext IEfCoreRepository.DbContext => DbContext.As(); - protected virtual TDbContext DbContext => _dbContextProvider.GetDbContext(); + async Task IEfCoreRepository.GetDbContextAsync() + { + return await GetDbContextAsync() as DbContext; + } + + protected virtual Task GetDbContextAsync() + { + return _dbContextProvider.GetDbContextAsync(); + } + + [Obsolete("Use GetDbSetAsync() method.")] + public virtual DbSet DbSet => DbContext.Set(); + + Task> IEfCoreRepository.GetDbSetAsync() + { + return GetDbSetAsync(); + } + + protected async Task> GetDbSetAsync() + { + return (await GetDbContextAsync()).Set(); + } protected virtual AbpEntityOptions AbpEntityOptions => _entityOptionsLazy.Value; @@ -45,64 +68,72 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore ); } - public async override Task InsertAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) + public override async Task InsertAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) { CheckAndSetId(entity); - var savedEntity = DbSet.Add(entity).Entity; + var dbContext = await GetDbContextAsync(); + + var savedEntity = (await dbContext.Set().AddAsync(entity, GetCancellationToken(cancellationToken))).Entity; if (autoSave) { - await DbContext.SaveChangesAsync(GetCancellationToken(cancellationToken)); + await dbContext.SaveChangesAsync(GetCancellationToken(cancellationToken)); } return savedEntity; } - public async override Task UpdateAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) + public override async Task UpdateAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) { - DbContext.Attach(entity); + var dbContext = await GetDbContextAsync(); - var updatedEntity = DbContext.Update(entity).Entity; + dbContext.Attach(entity); + + var updatedEntity = dbContext.Update(entity).Entity; if (autoSave) { - await DbContext.SaveChangesAsync(GetCancellationToken(cancellationToken)); + await dbContext.SaveChangesAsync(GetCancellationToken(cancellationToken)); } return updatedEntity; } - public async override Task DeleteAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) + public override async Task DeleteAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) { - DbSet.Remove(entity); + var dbContext = await GetDbContextAsync(); + + dbContext.Set().Remove(entity); if (autoSave) { - await DbContext.SaveChangesAsync(GetCancellationToken(cancellationToken)); + await dbContext.SaveChangesAsync(GetCancellationToken(cancellationToken)); } } - public async override Task> GetListAsync(bool includeDetails = false, CancellationToken cancellationToken = default) + public override async Task> GetListAsync(bool includeDetails = false, CancellationToken cancellationToken = default) { return includeDetails - ? await WithDetails().ToListAsync(GetCancellationToken(cancellationToken)) - : await DbSet.ToListAsync(GetCancellationToken(cancellationToken)); + ? await (await WithDetailsAsync()).ToListAsync(GetCancellationToken(cancellationToken)) + : await (await GetDbSetAsync()).ToListAsync(GetCancellationToken(cancellationToken)); } - public async override Task GetCountAsync(CancellationToken cancellationToken = default) + public override async Task GetCountAsync(CancellationToken cancellationToken = default) { - return await DbSet.LongCountAsync(GetCancellationToken(cancellationToken)); + return await (await GetDbSetAsync()).LongCountAsync(GetCancellationToken(cancellationToken)); } - public async override Task> GetPagedListAsync( + public override async Task> GetPagedListAsync( int skipCount, int maxResultCount, string sorting, bool includeDetails = false, CancellationToken cancellationToken = default) { - var queryable = includeDetails ? WithDetails() : DbSet; + var queryable = includeDetails + ? await WithDetailsAsync() + : await GetDbSetAsync(); return await queryable .OrderBy(sorting) @@ -110,39 +141,48 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore .ToListAsync(GetCancellationToken(cancellationToken)); } + [Obsolete("Use GetQueryableAsync method.")] protected override IQueryable GetQueryable() { return DbSet.AsQueryable(); } - public async override Task FindAsync( + public override async Task> GetQueryableAsync() + { + return (await GetDbSetAsync()).AsQueryable(); + } + + public override async Task FindAsync( Expression> predicate, bool includeDetails = true, CancellationToken cancellationToken = default) { return includeDetails - ? await WithDetails() + ? await (await WithDetailsAsync()) .Where(predicate) .SingleOrDefaultAsync(GetCancellationToken(cancellationToken)) - : await DbSet + : await (await GetDbSetAsync()) .Where(predicate) .SingleOrDefaultAsync(GetCancellationToken(cancellationToken)); } - public async override Task DeleteAsync(Expression> predicate, bool autoSave = false, CancellationToken cancellationToken = default) + public override async Task DeleteAsync(Expression> predicate, bool autoSave = false, CancellationToken cancellationToken = default) { - var entities = await GetQueryable() + var dbContext = await GetDbContextAsync(); + var dbSet = dbContext.Set(); + + var entities = await dbSet .Where(predicate) .ToListAsync(GetCancellationToken(cancellationToken)); foreach (var entity in entities) { - DbSet.Remove(entity); + dbSet.Remove(entity); } if (autoSave) { - await DbContext.SaveChangesAsync(GetCancellationToken(cancellationToken)); + await dbContext.SaveChangesAsync(GetCancellationToken(cancellationToken)); } } @@ -152,7 +192,7 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore CancellationToken cancellationToken = default) where TProperty : class { - await DbContext + await (await GetDbContextAsync()) .Entry(entity) .Collection(propertyExpression) .LoadAsync(GetCancellationToken(cancellationToken)); @@ -164,12 +204,13 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore CancellationToken cancellationToken = default) where TProperty : class { - await DbContext + await (await GetDbContextAsync()) .Entry(entity) .Reference(propertyExpression) .LoadAsync(GetCancellationToken(cancellationToken)); } + [Obsolete("Use WithDetailsAsync")] public override IQueryable WithDetails() { if (AbpEntityOptions.DefaultWithDetailsFunc == null) @@ -180,6 +221,17 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore return AbpEntityOptions.DefaultWithDetailsFunc(GetQueryable()); } + public override async Task> WithDetailsAsync() + { + if (AbpEntityOptions.DefaultWithDetailsFunc == null) + { + return await base.WithDetailsAsync(); + } + + return AbpEntityOptions.DefaultWithDetailsFunc(await GetQueryableAsync()); + } + + [Obsolete("Use WithDetailsAsync method.")] public override IQueryable WithDetails(params Expression>[] propertySelectors) { var query = GetQueryable(); @@ -195,6 +247,7 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore return query; } + [Obsolete("This method will be deleted in future versions.")] public IAsyncEnumerator GetAsyncEnumerator(CancellationToken cancellationToken = default) { return DbSet.AsAsyncEnumerable().GetAsyncEnumerator(cancellationToken); @@ -251,8 +304,8 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore public virtual async Task FindAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default) { return includeDetails - ? await WithDetails().FirstOrDefaultAsync(e => e.Id.Equals(id), GetCancellationToken(cancellationToken)) - : await DbSet.FindAsync(new object[] {id}, GetCancellationToken(cancellationToken)); + ? await (await WithDetailsAsync()).FirstOrDefaultAsync(e => e.Id.Equals(id), GetCancellationToken(cancellationToken)) + : await (await GetDbSetAsync()).FindAsync(new object[] {id}, GetCancellationToken(cancellationToken)); } public virtual async Task DeleteAsync(TKey id, bool autoSave = false, CancellationToken cancellationToken = default) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/IEfCoreRepository.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/IEfCoreRepository.cs index 31a78f744d..f793dc04ed 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/IEfCoreRepository.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/IEfCoreRepository.cs @@ -1,3 +1,5 @@ +using System; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Volo.Abp.Domain.Entities; @@ -6,9 +8,15 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore public interface IEfCoreRepository : IRepository where TEntity : class, IEntity { + [Obsolete("Use GetDbContextAsync() method.")] DbContext DbContext { get; } + [Obsolete("Use GetDbSetAsync() method.")] DbSet DbSet { get; } + + Task GetDbContextAsync(); + + Task> GetDbSetAsync(); } public interface IEfCoreRepository : IEfCoreRepository, IRepository @@ -16,4 +24,4 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore { } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IDbContextProvider.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IDbContextProvider.cs index c4655fddd0..17af400b97 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IDbContextProvider.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IDbContextProvider.cs @@ -1,8 +1,12 @@ +using System.Threading.Tasks; + namespace Volo.Abp.EntityFrameworkCore { - public interface IDbContextProvider + public interface IDbContextProvider where TDbContext : IEfCoreDbContext { TDbContext GetDbContext(); + + Task GetDbContextAsync(); } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs index 91ed2f8126..acd414af83 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs @@ -1,6 +1,6 @@ using System; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.ChangeTracking; using Microsoft.EntityFrameworkCore.Storage; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.Data; @@ -47,6 +47,33 @@ namespace Volo.Abp.Uow.EntityFrameworkCore return ((EfCoreDatabaseApi)databaseApi).DbContext; } + public async Task GetDbContextAsync() + { + var unitOfWork = _unitOfWorkManager.Current; + if (unitOfWork == null) + { + throw new AbpException("A DbContext can only be created inside a unit of work!"); + } + + var connectionStringName = ConnectionStringNameAttribute.GetConnStringName(); + var connectionString = _connectionStringResolver.Resolve(connectionStringName); + + var dbContextKey = $"{typeof(TDbContext).FullName}_{connectionString}"; + + var databaseApi = unitOfWork.FindDatabaseApi(dbContextKey); + + if (databaseApi == null) + { + databaseApi = new EfCoreDatabaseApi( + await CreateDbContextAsync(unitOfWork, connectionStringName, connectionString) + ); + + unitOfWork.AddDatabaseApi(dbContextKey, databaseApi); + } + + return ((EfCoreDatabaseApi)databaseApi).DbContext; + } + private TDbContext CreateDbContext(IUnitOfWork unitOfWork, string connectionStringName, string connectionString) { var creationContext = new DbContextCreationContext(connectionStringName, connectionString); @@ -67,6 +94,26 @@ namespace Volo.Abp.Uow.EntityFrameworkCore } } + private async Task CreateDbContextAsync(IUnitOfWork unitOfWork, string connectionStringName, string connectionString) + { + var creationContext = new DbContextCreationContext(connectionStringName, connectionString); + using (DbContextCreationContext.Use(creationContext)) + { + var dbContext = await CreateDbContextAsync(unitOfWork); + + if (dbContext is IAbpEfCoreDbContext abpEfCoreDbContext) + { + abpEfCoreDbContext.Initialize( + new AbpEfCoreDbContextInitializationContext( + unitOfWork + ) + ); + } + + return dbContext; + } + } + private TDbContext CreateDbContext(IUnitOfWork unitOfWork) { return unitOfWork.Options.IsTransactional @@ -74,7 +121,14 @@ namespace Volo.Abp.Uow.EntityFrameworkCore : unitOfWork.ServiceProvider.GetRequiredService(); } - public TDbContext CreateDbContextWithTransaction(IUnitOfWork unitOfWork) + private async Task CreateDbContextAsync(IUnitOfWork unitOfWork) + { + return unitOfWork.Options.IsTransactional + ? await CreateDbContextWithTransactionAsync(unitOfWork) + : unitOfWork.ServiceProvider.GetRequiredService(); + } + + private TDbContext CreateDbContextWithTransaction(IUnitOfWork unitOfWork) { var transactionApiKey = $"EntityFrameworkCore_{DbContextCreationContext.Current.ConnectionString}"; var activeTransaction = unitOfWork.FindTransactionApi(transactionApiKey) as EfCoreTransactionApi; @@ -117,5 +171,49 @@ namespace Volo.Abp.Uow.EntityFrameworkCore return dbContext; } } + + private async Task CreateDbContextWithTransactionAsync(IUnitOfWork unitOfWork) + { + var transactionApiKey = $"EntityFrameworkCore_{DbContextCreationContext.Current.ConnectionString}"; + var activeTransaction = unitOfWork.FindTransactionApi(transactionApiKey) as EfCoreTransactionApi; + + if (activeTransaction == null) + { + var dbContext = unitOfWork.ServiceProvider.GetRequiredService(); + + var dbtransaction = unitOfWork.Options.IsolationLevel.HasValue + ? await dbContext.Database.BeginTransactionAsync(unitOfWork.Options.IsolationLevel.Value) + : await dbContext.Database.BeginTransactionAsync(); + + unitOfWork.AddTransactionApi( + transactionApiKey, + new EfCoreTransactionApi( + dbtransaction, + dbContext + ) + ); + + return dbContext; + } + else + { + DbContextCreationContext.Current.ExistingConnection = activeTransaction.DbContextTransaction.GetDbTransaction().Connection; + + var dbContext = unitOfWork.ServiceProvider.GetRequiredService(); + + if (dbContext.As().HasRelationalTransactionManager()) + { + await dbContext.Database.UseTransactionAsync(activeTransaction.DbContextTransaction.GetDbTransaction()); + } + else + { + await dbContext.Database.BeginTransactionAsync(); //TODO: Why not using the new created transaction? + } + + activeTransaction.AttendedDbContexts.Add(dbContext); + + return dbContext; + } + } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs index bb77149a29..17b3f09adc 100644 --- a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs +++ b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs @@ -46,11 +46,17 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb EntityChangeEventHelper = NullEntityChangeEventHelper.Instance; } + [Obsolete("This method will be removed in future versions.")] protected override IQueryable GetQueryable() { return ApplyDataFilters(Collection.AsQueryable()); } + public override Task> GetQueryableAsync() + { + return Task.FromResult(ApplyDataFilters(Collection.AsQueryable())); + } + protected virtual async Task TriggerDomainEventsAsync(object entity) { var generatesDomainEventsEntity = entity as IGeneratesDomainEvents; diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbRepository.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbRepository.cs index 50155c6df5..960222679f 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbRepository.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/IMongoDbRepository.cs @@ -1,4 +1,7 @@ -using MongoDB.Driver; +using System; +using System.Threading; +using System.Threading.Tasks; +using MongoDB.Driver; using MongoDB.Driver.Linq; using Volo.Abp.Domain.Entities; @@ -7,11 +10,20 @@ namespace Volo.Abp.Domain.Repositories.MongoDB public interface IMongoDbRepository : IRepository where TEntity : class, IEntity { + [Obsolete("Use GetDatabaseAsync method.")] IMongoDatabase Database { get; } + Task GetDatabaseAsync(CancellationToken cancellationToken = default); + + [Obsolete("Use GetCollectionAsync method.")] IMongoCollection Collection { get; } + Task> GetCollectionAsync(CancellationToken cancellationToken = default); + + [Obsolete("Use GetMongoQueryableAsync method.")] IMongoQueryable GetMongoQueryable(); + + Task> GetMongoQueryableAsync(CancellationToken cancellationToken = default); } public interface IMongoDbRepository : IMongoDbRepository, IRepository diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs index 6af98da56b..5f1025f77d 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs @@ -25,13 +25,37 @@ namespace Volo.Abp.Domain.Repositories.MongoDB where TMongoDbContext : IAbpMongoDbContext where TEntity : class, IEntity { + [Obsolete("Use GetCollectionAsync method.")] public virtual IMongoCollection Collection => DbContext.Collection(); + public async Task> GetCollectionAsync(CancellationToken cancellationToken = default) + { + return (await GetDbContextAsync(GetCancellationToken(cancellationToken))).Collection(); + } + + [Obsolete("Use GetDatabaseAsync method.")] public virtual IMongoDatabase Database => DbContext.Database; - public virtual IClientSessionHandle SessionHandle => DbContext.SessionHandle; + public async Task GetDatabaseAsync(CancellationToken cancellationToken = default) + { + return (await GetDbContextAsync(GetCancellationToken(cancellationToken))).Database; + } + + [Obsolete("Use GetSessionHandleAsync method.")] + protected virtual IClientSessionHandle SessionHandle => DbContext.SessionHandle; + + protected async Task GetSessionHandleAsync(CancellationToken cancellationToken = default) + { + return (await GetDbContextAsync(GetCancellationToken(cancellationToken))).SessionHandle; + } + + [Obsolete("Use GetDbContextAsync method.")] + protected virtual TMongoDbContext DbContext => DbContextProvider.GetDbContext(); - public virtual TMongoDbContext DbContext => DbContextProvider.GetDbContext(); + protected Task GetDbContextAsync(CancellationToken cancellationToken = default) + { + return DbContextProvider.GetDbContextAsync(GetCancellationToken(cancellationToken)); + } protected IMongoDbContextProvider DbContextProvider { get; } @@ -55,24 +79,27 @@ namespace Volo.Abp.Domain.Repositories.MongoDB GuidGenerator = SimpleGuidGenerator.Instance; } - public async override Task InsertAsync( + public override async Task InsertAsync( TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) { await ApplyAbpConceptsForAddedEntityAsync(entity); - if (SessionHandle != null) + var dbContext = await GetDbContextAsync(GetCancellationToken(cancellationToken)); + var collection = dbContext.Collection(); + + if (dbContext.SessionHandle != null) { - await Collection.InsertOneAsync( - SessionHandle, + await collection.InsertOneAsync( + dbContext.SessionHandle, entity, cancellationToken: GetCancellationToken(cancellationToken) ); } else { - await Collection.InsertOneAsync( + await collection.InsertOneAsync( entity, cancellationToken: GetCancellationToken(cancellationToken) ); @@ -81,7 +108,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB return entity; } - public async override Task UpdateAsync( + public override async Task UpdateAsync( TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) @@ -103,20 +130,21 @@ namespace Volo.Abp.Domain.Repositories.MongoDB var oldConcurrencyStamp = SetNewConcurrencyStamp(entity); ReplaceOneResult result; - if (SessionHandle != null) + var dbContext = await GetDbContextAsync(GetCancellationToken(cancellationToken)); + var collection = dbContext.Collection(); + + if (dbContext.SessionHandle != null) { - result = await Collection.ReplaceOneAsync( - SessionHandle, + result = await collection.ReplaceOneAsync( + dbContext.SessionHandle, CreateEntityFilter(entity, true, oldConcurrencyStamp), entity, cancellationToken: GetCancellationToken(cancellationToken) ); - - } else { - result = await Collection.ReplaceOneAsync( + result = await collection.ReplaceOneAsync( CreateEntityFilter(entity, true, oldConcurrencyStamp), entity, cancellationToken: GetCancellationToken(cancellationToken) @@ -131,7 +159,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB return entity; } - public async override Task DeleteAsync( + public override async Task DeleteAsync( TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) @@ -139,15 +167,18 @@ namespace Volo.Abp.Domain.Repositories.MongoDB await ApplyAbpConceptsForDeletedEntityAsync(entity); var oldConcurrencyStamp = SetNewConcurrencyStamp(entity); + var dbContext = await GetDbContextAsync(GetCancellationToken(cancellationToken)); + var collection = dbContext.Collection(); + if (entity is ISoftDelete softDeleteEntity && !IsHardDeleted(entity)) { softDeleteEntity.IsDeleted = true; ReplaceOneResult result; - if (SessionHandle != null) + if (dbContext.SessionHandle != null) { - result = await Collection.ReplaceOneAsync( - SessionHandle, + result = await collection.ReplaceOneAsync( + dbContext.SessionHandle, CreateEntityFilter(entity, true, oldConcurrencyStamp), entity, cancellationToken: GetCancellationToken(cancellationToken) @@ -155,7 +186,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB } else { - result = await Collection.ReplaceOneAsync( + result = await collection.ReplaceOneAsync( CreateEntityFilter(entity, true, oldConcurrencyStamp), entity, cancellationToken: GetCancellationToken(cancellationToken) @@ -171,17 +202,17 @@ namespace Volo.Abp.Domain.Repositories.MongoDB { DeleteResult result; - if (SessionHandle != null) + if (dbContext.SessionHandle != null) { - result = await Collection.DeleteOneAsync( - SessionHandle, + result = await collection.DeleteOneAsync( + dbContext.SessionHandle, CreateEntityFilter(entity, true, oldConcurrencyStamp), cancellationToken: GetCancellationToken(cancellationToken) ); } else { - result = await Collection.DeleteOneAsync( + result = await collection.DeleteOneAsync( CreateEntityFilter(entity, true, oldConcurrencyStamp), GetCancellationToken(cancellationToken) ); @@ -194,38 +225,44 @@ namespace Volo.Abp.Domain.Repositories.MongoDB } } - public async override Task> GetListAsync(bool includeDetails = false, CancellationToken cancellationToken = default) + public override async Task> GetListAsync(bool includeDetails = false, CancellationToken cancellationToken = default) { - return await GetMongoQueryable().ToListAsync(GetCancellationToken(cancellationToken)); + cancellationToken = GetCancellationToken(cancellationToken); + return await (await GetMongoQueryableAsync(cancellationToken)).ToListAsync(cancellationToken); } - public async override Task GetCountAsync(CancellationToken cancellationToken = default) + public override async Task GetCountAsync(CancellationToken cancellationToken = default) { - return await GetMongoQueryable().LongCountAsync(GetCancellationToken(cancellationToken)); + cancellationToken = GetCancellationToken(cancellationToken); + return await (await GetMongoQueryableAsync(cancellationToken)).LongCountAsync(cancellationToken); } - public async override Task> GetPagedListAsync( + public override async Task> GetPagedListAsync( int skipCount, int maxResultCount, string sorting, bool includeDetails = false, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + cancellationToken = GetCancellationToken(cancellationToken); + + return await (await GetMongoQueryableAsync(cancellationToken)) .OrderBy(sorting) .As>() .PageBy>(skipCount, maxResultCount) - .ToListAsync(GetCancellationToken(cancellationToken)); + .ToListAsync(cancellationToken); } - public async override Task DeleteAsync( + public override async Task DeleteAsync( Expression> predicate, bool autoSave = false, CancellationToken cancellationToken = default) { - var entities = await GetMongoQueryable() + cancellationToken = GetCancellationToken(cancellationToken); + + var entities = await (await GetMongoQueryableAsync(cancellationToken)) .Where(predicate) - .ToListAsync(GetCancellationToken(cancellationToken)); + .ToListAsync(cancellationToken); foreach (var entity in entities) { @@ -233,25 +270,45 @@ namespace Volo.Abp.Domain.Repositories.MongoDB } } + [Obsolete("Use GetQueryableAsync method.")] protected override IQueryable GetQueryable() { return GetMongoQueryable(); } - public async override Task FindAsync( + public override async Task> GetQueryableAsync() + { + return await GetMongoQueryableAsync(); + } + + public override async Task FindAsync( Expression> predicate, bool includeDetails = true, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(predicate) .SingleOrDefaultAsync(GetCancellationToken(cancellationToken)); } + [Obsolete("Use GetMongoQueryableAsync method.")] public virtual IMongoQueryable GetMongoQueryable() { return ApplyDataFilters(SessionHandle != null ? Collection.AsQueryable(SessionHandle) : Collection.AsQueryable()); } + + public async Task> GetMongoQueryableAsync(CancellationToken cancellationToken = default) + { + var dbContext = await GetDbContextAsync(cancellationToken); + var collection = dbContext.Collection(); + + return ApplyDataFilters( + dbContext.SessionHandle != null + ? collection.AsQueryable(dbContext.SessionHandle) + : collection.AsQueryable() + ); + } + protected virtual bool IsHardDeleted(TEntity entity) { var hardDeletedEntities = UnitOfWorkManager?.Current?.Items.GetOrDefault(UnitOfWorkItemNames.HardDeletedEntities) as HashSet; @@ -393,30 +450,19 @@ namespace Volo.Abp.Domain.Repositories.MongoDB throw new AbpDbConcurrencyException("Database operation expected to affect 1 row but actually affected 0 row. Data may have been modified or deleted since entities were loaded. This exception has been thrown on optimistic concurrency check."); } - /// - /// IMongoQueryable - /// - /// + [Obsolete("This method will be removed in future versions.")] public QueryableExecutionModel GetExecutionModel() { return GetMongoQueryable().GetExecutionModel(); } - /// - /// IMongoQueryable - /// - /// - /// + [Obsolete("This method will be removed in future versions.")] public IAsyncCursor ToCursor(CancellationToken cancellationToken = new CancellationToken()) { return GetMongoQueryable().ToCursor(cancellationToken); } - /// - /// IMongoQueryable - /// - /// - /// + [Obsolete("This method will be removed in future versions.")] public Task> ToCursorAsync(CancellationToken cancellationToken = new CancellationToken()) { return GetMongoQueryable().ToCursorAsync(cancellationToken); @@ -457,16 +503,21 @@ namespace Volo.Abp.Domain.Repositories.MongoDB bool includeDetails = true, CancellationToken cancellationToken = default) { - if (SessionHandle != null) + cancellationToken = GetCancellationToken(cancellationToken); + + var dbContext = await GetDbContextAsync(cancellationToken); + var collection = dbContext.Collection(); + + if (dbContext.SessionHandle != null) { - return await Collection - .Find(SessionHandle, RepositoryFilterer.CreateEntityFilter(id, true)) - .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); + return await collection + .Find(dbContext.SessionHandle, RepositoryFilterer.CreateEntityFilter(id, true)) + .FirstOrDefaultAsync(cancellationToken); } - return await Collection + return await collection .Find(RepositoryFilterer.CreateEntityFilter(id, true)) - .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); + .FirstOrDefaultAsync(cancellationToken); } public virtual Task DeleteAsync( diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/IMongoDbContextProvider.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/IMongoDbContextProvider.cs index 9f89054dcc..959cb39df1 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/IMongoDbContextProvider.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/IMongoDbContextProvider.cs @@ -1,8 +1,15 @@ -namespace Volo.Abp.MongoDB +using System; +using System.Threading; +using System.Threading.Tasks; + +namespace Volo.Abp.MongoDB { - public interface IMongoDbContextProvider + public interface IMongoDbContextProvider where TMongoDbContext : IAbpMongoDbContext { + [Obsolete("Use CreateDbContextAsync")] TMongoDbContext GetDbContext(); + + Task GetDbContextAsync(CancellationToken cancellationToken = default); } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs index d3d8a419fb..8a9ecd5de6 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs @@ -1,4 +1,6 @@ using System; +using System.Threading; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using MongoDB.Bson; using MongoDB.Driver; @@ -21,6 +23,7 @@ namespace Volo.Abp.Uow.MongoDB _connectionStringResolver = connectionStringResolver; } + [Obsolete("Use CreateDbContextAsync")] public TMongoDbContext GetDbContext() { var unitOfWork = _unitOfWorkManager.Current; @@ -48,6 +51,46 @@ namespace Volo.Abp.Uow.MongoDB return ((MongoDbDatabaseApi) databaseApi).DbContext; } + public async Task GetDbContextAsync(CancellationToken cancellationToken = default) + { + var unitOfWork = _unitOfWorkManager.Current; + if (unitOfWork == null) + { + throw new AbpException( + $"A {nameof(IMongoDatabase)} instance can only be created inside a unit of work!"); + } + + var connectionString = _connectionStringResolver.Resolve(); + var dbContextKey = $"{typeof(TMongoDbContext).FullName}_{connectionString}"; + + var mongoUrl = new MongoUrl(connectionString); + var databaseName = mongoUrl.DatabaseName; + if (databaseName.IsNullOrWhiteSpace()) + { + databaseName = ConnectionStringNameAttribute.GetConnStringName(); + } + + //TODO: Create only single MongoDbClient per connection string in an application (extract MongoClientCache for example). + var databaseApi = unitOfWork.FindDatabaseApi(dbContextKey); + if (databaseApi == null) + { + databaseApi = new MongoDbDatabaseApi( + await CreateDbContextAsync( + unitOfWork, + mongoUrl, + databaseName, + cancellationToken + ) + ); + + unitOfWork.AddDatabaseApi(dbContextKey, databaseApi); + } + + return ((MongoDbDatabaseApi) databaseApi).DbContext; + } + + [Obsolete("Use CreateDbContextAsync")] + private TMongoDbContext CreateDbContext(IUnitOfWork unitOfWork, MongoUrl mongoUrl, string databaseName) { var client = new MongoClient(mongoUrl); @@ -64,7 +107,34 @@ namespace Volo.Abp.Uow.MongoDB return dbContext; } - public TMongoDbContext CreateDbContextWithTransaction( + private async Task CreateDbContextAsync( + IUnitOfWork unitOfWork, + MongoUrl mongoUrl, + string databaseName, + CancellationToken cancellationToken = default) + { + var client = new MongoClient(mongoUrl); + var database = client.GetDatabase(databaseName); + + if (unitOfWork.Options.IsTransactional) + { + return await CreateDbContextWithTransactionAsync( + unitOfWork, + mongoUrl, + client, + database, + cancellationToken + ); + } + + var dbContext = unitOfWork.ServiceProvider.GetRequiredService(); + dbContext.ToAbpMongoDbContext().InitializeDatabase(database, client, null); + + return dbContext; + } + + [Obsolete("Use CreateDbContextWithTransactionAsync")] + private TMongoDbContext CreateDbContextWithTransaction( IUnitOfWork unitOfWork, MongoUrl url, MongoClient client, @@ -99,5 +169,42 @@ namespace Volo.Abp.Uow.MongoDB return dbContext; } + + private async Task CreateDbContextWithTransactionAsync( + IUnitOfWork unitOfWork, + MongoUrl url, + MongoClient client, + IMongoDatabase database, + CancellationToken cancellationToken = default) + { + var transactionApiKey = $"MongoDb_{url}"; + var activeTransaction = unitOfWork.FindTransactionApi(transactionApiKey) as MongoDbTransactionApi; + var dbContext = unitOfWork.ServiceProvider.GetRequiredService(); + + if (activeTransaction?.SessionHandle == null) + { + var session = await client.StartSessionAsync(cancellationToken: cancellationToken); + + if (unitOfWork.Options.Timeout.HasValue) + { + session.AdvanceOperationTime(new BsonTimestamp(unitOfWork.Options.Timeout.Value)); + } + + session.StartTransaction(); + + unitOfWork.AddTransactionApi( + transactionApiKey, + new MongoDbTransactionApi(session) + ); + + dbContext.ToAbpMongoDbContext().InitializeDatabase(database, client, session); + } + else + { + dbContext.ToAbpMongoDbContext().InitializeDatabase(database, client, activeTransaction.SessionHandle); + } + + return dbContext; + } } } diff --git a/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs b/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs index 57b8054784..3acd59a2b6 100644 --- a/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs +++ b/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs @@ -241,11 +241,17 @@ namespace Volo.Abp.Domain.Repositories where TEntity : class, IEntity { + [Obsolete("Use GetQueryableAsync method.")] protected override IQueryable GetQueryable() { throw new NotImplementedException(); } + public override Task> GetQueryableAsync() + { + throw new NotImplementedException(); + } + public override Task FindAsync(Expression> predicate, bool includeDetails = true, CancellationToken cancellationToken = default) { throw new NotImplementedException(); From 420dfbe8b4affa728dace63533a5a9f053fb5170 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 21 Dec 2020 17:01:31 +0300 Subject: [PATCH 004/217] Identity module EF core async fix. --- .../EFCoreIdentitySecurityLogRepository.cs | 29 +++--- .../EfCoreIdentityClaimTypeRepository.cs | 8 +- .../EfCoreIdentityLinkUserRepository.cs | 6 +- .../EfCoreIdentityRoleRepository.cs | 19 ++-- .../EfCoreIdentityUserRepository.cs | 90 ++++++++++++------- .../EfCoreOrganizationUnitRepository.cs | 66 +++++++++----- .../MongoOrganizationUnitRepository.cs | 62 +++++++------ 7 files changed, 177 insertions(+), 103 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EFCoreIdentitySecurityLogRepository.cs b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EFCoreIdentitySecurityLogRepository.cs index ddccb3187f..91915cd9b8 100644 --- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EFCoreIdentitySecurityLogRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EFCoreIdentitySecurityLogRepository.cs @@ -34,7 +34,9 @@ namespace Volo.Abp.Identity.EntityFrameworkCore bool includeDetails = false, CancellationToken cancellationToken = default) { - var query = GetListQuery( + cancellationToken = GetCancellationToken(cancellationToken); + + var query = await GetListQueryAsync( startTime, endTime, applicationName, @@ -43,12 +45,13 @@ namespace Volo.Abp.Identity.EntityFrameworkCore userId, userName, clientId, - correlationId + correlationId, + cancellationToken ); return await query.OrderBy(sorting ?? nameof(IdentitySecurityLog.CreationTime) + " desc") .PageBy(skipCount, maxResultCount) - .ToListAsync(GetCancellationToken(cancellationToken)); + .ToListAsync(cancellationToken); } public async Task GetCountAsync( @@ -63,7 +66,9 @@ namespace Volo.Abp.Identity.EntityFrameworkCore string correlationId = null, CancellationToken cancellationToken = default) { - var query = GetListQuery( + cancellationToken = GetCancellationToken(cancellationToken); + + var query = await GetListQueryAsync( startTime, endTime, applicationName, @@ -72,18 +77,21 @@ namespace Volo.Abp.Identity.EntityFrameworkCore userId, userName, clientId, - correlationId + correlationId, + cancellationToken ); - return await query.LongCountAsync(GetCancellationToken(cancellationToken)); + return await query.LongCountAsync(cancellationToken); } public async Task GetByUserIdAsync(Guid id, Guid userId, bool includeDetails = false, CancellationToken cancellationToken = default) { - return await DbSet.OrderBy(x => x.Id).FirstOrDefaultAsync(x => x.Id == id && x.UserId == userId, GetCancellationToken(cancellationToken)); + return await (await GetDbSetAsync()) + .OrderBy(x => x.Id) + .FirstOrDefaultAsync(x => x.Id == id && x.UserId == userId, GetCancellationToken(cancellationToken)); } - protected virtual IQueryable GetListQuery( + protected virtual async Task> GetListQueryAsync( DateTime? startTime = null, DateTime? endTime = null, string applicationName = null, @@ -92,9 +100,10 @@ namespace Volo.Abp.Identity.EntityFrameworkCore Guid? userId = null, string userName = null, string clientId = null, - string correlationId = null) + string correlationId = null, + CancellationToken cancellationToken = default) { - return DbSet.AsNoTracking() + return (await GetDbSetAsync()).AsNoTracking() .WhereIf(startTime.HasValue, securityLog => securityLog.CreationTime >= startTime.Value) .WhereIf(endTime.HasValue, securityLog => securityLog.CreationTime < endTime.Value.AddDays(1).Date) .WhereIf(!applicationName.IsNullOrWhiteSpace(), securityLog => securityLog.ApplicationName == applicationName) diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityClaimTypeRepository.cs b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityClaimTypeRepository.cs index 0d0ff499c1..4cbdfb5725 100644 --- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityClaimTypeRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityClaimTypeRepository.cs @@ -22,7 +22,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore Guid? ignoredId = null, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .WhereIf(ignoredId != null, ct => ct.Id != ignoredId) .CountAsync(ct => ct.Name == name, GetCancellationToken(cancellationToken)) > 0; } @@ -34,7 +34,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore string filter, CancellationToken cancellationToken = default) { - var identityClaimTypes = await DbSet + var identityClaimTypes = await (await GetDbSetAsync()) .WhereIf( !filter.IsNullOrWhiteSpace(), u => @@ -51,7 +51,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore string filter = null, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .WhereIf( !filter.IsNullOrWhiteSpace(), u => @@ -59,4 +59,4 @@ namespace Volo.Abp.Identity.EntityFrameworkCore ).LongCountAsync(GetCancellationToken(cancellationToken)); } } -} \ No newline at end of file +} diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityLinkUserRepository.cs b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityLinkUserRepository.cs index 39b62c8f46..6920d1081e 100644 --- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityLinkUserRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityLinkUserRepository.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Linq.Dynamic.Core; using System.Threading; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; @@ -20,7 +19,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore public async Task FindAsync(IdentityLinkUserInfo sourceLinkUserInfo, IdentityLinkUserInfo targetLinkUserInfo, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .OrderBy(x => x.Id).FirstOrDefaultAsync(x => x.SourceUserId == sourceLinkUserInfo.UserId && x.SourceTenantId == sourceLinkUserInfo.TenantId && x.TargetUserId == targetLinkUserInfo.UserId && x.TargetTenantId == targetLinkUserInfo.TenantId || @@ -31,7 +30,8 @@ namespace Volo.Abp.Identity.EntityFrameworkCore public async Task> GetListAsync(IdentityLinkUserInfo linkUserInfo, CancellationToken cancellationToken = default) { - return await DbSet.Where(x => + return await (await GetDbSetAsync()) + .Where(x => x.SourceUserId == linkUserInfo.UserId && x.SourceTenantId == linkUserInfo.TenantId || x.TargetUserId == linkUserInfo.UserId && x.TargetTenantId == linkUserInfo.TenantId) .ToListAsync(cancellationToken: GetCancellationToken(cancellationToken)); diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityRoleRepository.cs b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityRoleRepository.cs index bb17d863aa..b1389afd6a 100644 --- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityRoleRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityRoleRepository.cs @@ -22,7 +22,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore bool includeDetails = true, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .IncludeDetails(includeDetails) .OrderBy(x => x.Id) .FirstOrDefaultAsync(r => r.NormalizedName == normalizedRoleName, GetCancellationToken(cancellationToken)); @@ -36,7 +36,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore bool includeDetails = true, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .IncludeDetails(includeDetails) .WhereIf(!filter.IsNullOrWhiteSpace(), x => x.Name.Contains(filter) || @@ -50,7 +50,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore IEnumerable ids, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .Where(t => ids.Contains(t.Id)) .ToListAsync(GetCancellationToken(cancellationToken)); } @@ -58,23 +58,32 @@ namespace Volo.Abp.Identity.EntityFrameworkCore public virtual async Task> GetDefaultOnesAsync( bool includeDetails = false, CancellationToken cancellationToken = default) { - return await DbSet.IncludeDetails(includeDetails).Where(r => r.IsDefault).ToListAsync(GetCancellationToken(cancellationToken)); + return await (await GetDbSetAsync()) + .IncludeDetails(includeDetails) + .Where(r => r.IsDefault) + .ToListAsync(GetCancellationToken(cancellationToken)); } public async Task GetCountAsync( string filter = null, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .WhereIf(!filter.IsNullOrWhiteSpace(), x => x.Name.Contains(filter) || x.NormalizedName.Contains(filter)) .LongCountAsync(GetCancellationToken(cancellationToken)); } + [Obsolete("Use WithDetailsAsync")] public override IQueryable WithDetails() { return GetQueryable().IncludeDetails(); } + + public override async Task> WithDetailsAsync() + { + return (await GetQueryableAsync()).IncludeDetails(); + } } } diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserRepository.cs b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserRepository.cs index f5d8fd2bb5..853e980f01 100644 --- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserRepository.cs @@ -6,7 +6,6 @@ using System.Security.Claims; using System.Threading; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Internal; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; @@ -24,7 +23,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore bool includeDetails = true, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .IncludeDetails(includeDetails) .OrderBy(x => x.Id) .FirstOrDefaultAsync( @@ -37,20 +36,21 @@ namespace Volo.Abp.Identity.EntityFrameworkCore Guid id, CancellationToken cancellationToken = default) { - var query = from userRole in DbContext.Set() - join role in DbContext.Roles on userRole.RoleId equals role.Id + var dbContext = await GetDbContextAsync(); + var query = from userRole in dbContext.Set() + join role in dbContext.Roles on userRole.RoleId equals role.Id where userRole.UserId == id select role.Name; - var organizationUnitIds = DbContext.Set().Where(q => q.UserId == id).Select(q => q.OrganizationUnitId).ToArray(); + var organizationUnitIds = dbContext.Set().Where(q => q.UserId == id).Select(q => q.OrganizationUnitId).ToArray(); var organizationRoleIds = await ( - from ouRole in DbContext.Set() - join ou in DbContext.Set() on ouRole.OrganizationUnitId equals ou.Id + from ouRole in dbContext.Set() + join ou in dbContext.Set() on ouRole.OrganizationUnitId equals ou.Id where organizationUnitIds.Contains(ouRole.OrganizationUnitId) select ouRole.RoleId ).ToListAsync(GetCancellationToken(cancellationToken)); - var orgUnitRoleNameQuery = DbContext.Roles.Where(r => organizationRoleIds.Contains(r.Id)).Select(n => n.Name); + var orgUnitRoleNameQuery = dbContext.Roles.Where(r => organizationRoleIds.Contains(r.Id)).Select(n => n.Name); var resultQuery = query.Union(orgUnitRoleNameQuery); return await resultQuery.ToListAsync(GetCancellationToken(cancellationToken)); } @@ -59,10 +59,11 @@ namespace Volo.Abp.Identity.EntityFrameworkCore Guid id, CancellationToken cancellationToken = default) { - var query = from userOu in DbContext.Set() - join roleOu in DbContext.Set() on userOu.OrganizationUnitId equals roleOu.OrganizationUnitId - join ou in DbContext.Set() on roleOu.OrganizationUnitId equals ou.Id - join userOuRoles in DbContext.Roles on roleOu.RoleId equals userOuRoles.Id + var dbContext = await GetDbContextAsync(); + var query = from userOu in dbContext.Set() + join roleOu in dbContext.Set() on userOu.OrganizationUnitId equals roleOu.OrganizationUnitId + join ou in dbContext.Set() on roleOu.OrganizationUnitId equals ou.Id + join userOuRoles in dbContext.Roles on roleOu.RoleId equals userOuRoles.Id where userOu.UserId == id select userOuRoles.Name; @@ -77,7 +78,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore bool includeDetails = true, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .IncludeDetails(includeDetails) .Where(u => u.Logins.Any(login => login.LoginProvider == loginProvider && login.ProviderKey == providerKey)) .OrderBy(x=>x.Id) @@ -89,7 +90,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore bool includeDetails = true, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .IncludeDetails(includeDetails) .OrderBy(x => x.Id) .FirstOrDefaultAsync(u => u.NormalizedEmail == normalizedEmail, GetCancellationToken(cancellationToken)); @@ -100,7 +101,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore bool includeDetails = false, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .IncludeDetails(includeDetails) .Where(u => u.Claims.Any(c => c.ClaimType == claim.Type && c.ClaimValue == claim.Value)) .ToListAsync(GetCancellationToken(cancellationToken)); @@ -111,7 +112,9 @@ namespace Volo.Abp.Identity.EntityFrameworkCore bool includeDetails = false, CancellationToken cancellationToken = default) { - var role = await DbContext.Roles + var dbContext = await GetDbContextAsync(); + + var role = await dbContext.Roles .Where(x => x.NormalizedName == normalizedRoleName) .OrderBy(x => x.Id) .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); @@ -121,7 +124,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore return new List(); } - return await DbSet + return await dbContext.Users .IncludeDetails(includeDetails) .Where(u => u.Roles.Any(r => r.RoleId == role.Id)) .ToListAsync(GetCancellationToken(cancellationToken)); @@ -135,7 +138,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore bool includeDetails = false, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .IncludeDetails(includeDetails) .WhereIf( !filter.IsNullOrWhiteSpace(), @@ -156,24 +159,26 @@ namespace Volo.Abp.Identity.EntityFrameworkCore bool includeDetails = false, CancellationToken cancellationToken = default) { - var query = from userRole in DbContext.Set() - join role in DbContext.Roles.IncludeDetails(includeDetails) on userRole.RoleId equals role.Id + var dbContext = await GetDbContextAsync(); + + var query = from userRole in dbContext.Set() + join role in dbContext.Roles.IncludeDetails(includeDetails) on userRole.RoleId equals role.Id where userRole.UserId == id select role; //TODO: Needs improvement - var userOrganizationsQuery = from userOrg in DbContext.Set() - join ou in DbContext.OrganizationUnits.IncludeDetails(includeDetails) on userOrg.OrganizationUnitId equals ou.Id + var userOrganizationsQuery = from userOrg in dbContext.Set() + join ou in dbContext.OrganizationUnits.IncludeDetails(includeDetails) on userOrg.OrganizationUnitId equals ou.Id where userOrg.UserId == id select ou; - var orgUserRoleQuery = DbContext.Set() + var orgUserRoleQuery = dbContext.Set() .Where(q => userOrganizationsQuery .Select(t => t.Id) .Contains(q.OrganizationUnitId)) .Select(t => t.RoleId); - var orgRoles = DbContext.Roles.Where(q => orgUserRoleQuery.Contains(q.Id)); + var orgRoles = dbContext.Roles.Where(q => orgUserRoleQuery.Contains(q.Id)); var resultQuery = query.Union(orgRoles); return await resultQuery.ToListAsync(GetCancellationToken(cancellationToken)); @@ -200,9 +205,11 @@ namespace Volo.Abp.Identity.EntityFrameworkCore bool includeDetails = false, CancellationToken cancellationToken = default) { - var query = from userOU in DbContext.Set() - join ou in DbContext.OrganizationUnits.IncludeDetails(includeDetails) on userOU.OrganizationUnitId equals ou.Id - where userOU.UserId == id + var dbContext = await GetDbContextAsync(); + + var query = from userOu in dbContext.Set() + join ou in dbContext.OrganizationUnits.IncludeDetails(includeDetails) on userOu.OrganizationUnitId equals ou.Id + where userOu.UserId == id select ou; return await query.ToListAsync(GetCancellationToken(cancellationToken)); @@ -213,10 +220,13 @@ namespace Volo.Abp.Identity.EntityFrameworkCore CancellationToken cancellationToken = default ) { - var query = from userOu in DbContext.Set() - join user in DbSet on userOu.UserId equals user.Id + var dbContext = await GetDbContextAsync(); + + var query = from userOu in dbContext.Set() + join user in dbContext.Users on userOu.UserId equals user.Id where userOu.OrganizationUnitId == organizationUnitId select user; + return await query.ToListAsync(GetCancellationToken(cancellationToken)); } @@ -225,10 +235,13 @@ namespace Volo.Abp.Identity.EntityFrameworkCore CancellationToken cancellationToken = default ) { - var query = from userOu in DbContext.Set() - join user in DbSet on userOu.UserId equals user.Id + var dbContext = await GetDbContextAsync(); + + var query = from userOu in dbContext.Set() + join user in dbContext.Users on userOu.UserId equals user.Id where organizationUnitIds.Contains(userOu.OrganizationUnitId) select user; + return await query.ToListAsync(GetCancellationToken(cancellationToken)); } @@ -237,17 +250,26 @@ namespace Volo.Abp.Identity.EntityFrameworkCore CancellationToken cancellationToken = default ) { - var query = from userOu in DbContext.Set() - join user in DbSet on userOu.UserId equals user.Id - join ou in DbContext.Set() on userOu.OrganizationUnitId equals ou.Id + var dbContext = await GetDbContextAsync(); + + var query = from userOu in dbContext.Set() + join user in dbContext.Users on userOu.UserId equals user.Id + join ou in dbContext.Set() on userOu.OrganizationUnitId equals ou.Id where ou.Code.StartsWith(code) select user; + return await query.ToListAsync(GetCancellationToken(cancellationToken)); } + [Obsolete("Use WithDetailsAsync method.")] public override IQueryable WithDetails() { return GetQueryable().IncludeDetails(); } + + public override async Task> WithDetailsAsync() + { + return (await GetQueryableAsync()).IncludeDetails(); + } } } diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreOrganizationUnitRepository.cs b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreOrganizationUnitRepository.cs index d63d7a2228..c3a8975fec 100644 --- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreOrganizationUnitRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreOrganizationUnitRepository.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Linq.Dynamic.Core; using System.Linq; +using System.Linq.Expressions; using System.Threading; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; @@ -25,7 +26,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore bool includeDetails = false, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .IncludeDetails(includeDetails) .Where(x => x.ParentId == parentId) .ToListAsync(GetCancellationToken(cancellationToken)); @@ -37,7 +38,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore bool includeDetails = false, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .IncludeDetails(includeDetails) .Where(ou => ou.Code.StartsWith(code) && ou.Id != parentId.Value) .ToListAsync(GetCancellationToken(cancellationToken)); @@ -50,7 +51,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore bool includeDetails = true, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .IncludeDetails(includeDetails) .OrderBy(sorting ?? nameof(OrganizationUnit.DisplayName)) .PageBy(skipCount, maxResultCount) @@ -62,7 +63,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore bool includeDetails = false, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .IncludeDetails(includeDetails) .Where(t => ids.Contains(t.Id)) .ToListAsync(GetCancellationToken(cancellationToken)); @@ -73,7 +74,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore bool includeDetails = true, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .IncludeDetails(includeDetails) .OrderBy(x => x.Id) .FirstOrDefaultAsync( @@ -90,10 +91,13 @@ namespace Volo.Abp.Identity.EntityFrameworkCore bool includeDetails = false, CancellationToken cancellationToken = default) { - var query = from organizationRole in DbContext.Set() - join role in DbContext.Roles.IncludeDetails(includeDetails) on organizationRole.RoleId equals role.Id + var dbContext = await GetDbContextAsync(); + + var query = from organizationRole in dbContext.Set() + join role in dbContext.Roles.IncludeDetails(includeDetails) on organizationRole.RoleId equals role.Id where organizationRole.OrganizationUnitId == organizationUnit.Id select role; + query = query .OrderBy(sorting ?? nameof(IdentityRole.Name)) .PageBy(skipCount, maxResultCount); @@ -105,8 +109,10 @@ namespace Volo.Abp.Identity.EntityFrameworkCore OrganizationUnit organizationUnit, CancellationToken cancellationToken = default) { - var query = from organizationRole in DbContext.Set() - join role in DbContext.Roles on organizationRole.RoleId equals role.Id + var dbContext = await GetDbContextAsync(); + + var query = from organizationRole in dbContext.Set() + join role in dbContext.Roles on organizationRole.RoleId equals role.Id where organizationRole.OrganizationUnitId == organizationUnit.Id select role; @@ -123,8 +129,9 @@ namespace Volo.Abp.Identity.EntityFrameworkCore CancellationToken cancellationToken = default) { var roleIds = organizationUnit.Roles.Select(r => r.RoleId).ToList(); + var dbContext = await GetDbContextAsync(); - return await DbContext.Roles + return await dbContext.Roles .Where(r => !roleIds.Contains(r.Id)) .IncludeDetails(includeDetails) .WhereIf(!filter.IsNullOrWhiteSpace(), r => r.Name.Contains(filter)) @@ -139,8 +146,9 @@ namespace Volo.Abp.Identity.EntityFrameworkCore CancellationToken cancellationToken = default) { var roleIds = organizationUnit.Roles.Select(r => r.RoleId).ToList(); + var dbContext = await GetDbContextAsync(); - return await DbContext.Roles + return await dbContext.Roles .Where(r => !roleIds.Contains(r.Id)) .WhereIf(!filter.IsNullOrWhiteSpace(), r => r.Name.Contains(filter)) .CountAsync(cancellationToken); @@ -155,7 +163,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore bool includeDetails = false, CancellationToken cancellationToken = default) { - var query = CreateGetMembersFilteredQuery(organizationUnit, filter); + var query = await CreateGetMembersFilteredQueryAsync(organizationUnit, filter); return await query.IncludeDetails(includeDetails).OrderBy(sorting ?? nameof(IdentityUser.UserName)) .PageBy(skipCount, maxResultCount) @@ -167,7 +175,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore string filter = null, CancellationToken cancellationToken = default) { - var query = CreateGetMembersFilteredQuery(organizationUnit, filter); + var query = await CreateGetMembersFilteredQueryAsync(organizationUnit, filter); return await query.CountAsync(GetCancellationToken(cancellationToken)); } @@ -181,11 +189,13 @@ namespace Volo.Abp.Identity.EntityFrameworkCore bool includeDetails = false, CancellationToken cancellationToken = default) { - var userIdsInOrganizationUnit = DbContext.Set() + var dbContext = await GetDbContextAsync(); + + var userIdsInOrganizationUnit = dbContext.Set() .Where(uou => uou.OrganizationUnitId == organizationUnit.Id) .Select(uou => uou.UserId); - var query = DbContext.Users + var query = dbContext.Users .Where(u => !userIdsInOrganizationUnit.Contains(u.Id)); if (!filter.IsNullOrWhiteSpace()) @@ -209,11 +219,13 @@ namespace Volo.Abp.Identity.EntityFrameworkCore string filter = null, CancellationToken cancellationToken = default) { - var userIdsInOrganizationUnit = DbContext.Set() + var dbContext = await GetDbContextAsync(); + + var userIdsInOrganizationUnit = dbContext.Set() .Where(uou => uou.OrganizationUnitId == organizationUnit.Id) .Select(uou => uou.UserId); - return await DbContext.Users + return await dbContext.Users .Where(u => !userIdsInOrganizationUnit.Contains(u.Id)) .WhereIf(!filter.IsNullOrWhiteSpace(), u => u.UserName.Contains(filter) || @@ -222,11 +234,17 @@ namespace Volo.Abp.Identity.EntityFrameworkCore .CountAsync(cancellationToken); } + [Obsolete("Use WithDetailsAsync method.")] public override IQueryable WithDetails() { return GetQueryable().IncludeDetails(); } + public override async Task> WithDetailsAsync(params Expression>[] propertySelectors) + { + return (await GetQueryableAsync()).IncludeDetails(); + } + public virtual Task RemoveAllRolesAsync( OrganizationUnit organizationUnit, CancellationToken cancellationToken = default) @@ -239,17 +257,21 @@ namespace Volo.Abp.Identity.EntityFrameworkCore OrganizationUnit organizationUnit, CancellationToken cancellationToken = default) { - var ouMembersQuery = await DbContext.Set() + var dbContext = await GetDbContextAsync(); + + var ouMembersQuery = await dbContext.Set() .Where(q => q.OrganizationUnitId == organizationUnit.Id) .ToListAsync(GetCancellationToken(cancellationToken)); - DbContext.Set().RemoveRange(ouMembersQuery); + dbContext.Set().RemoveRange(ouMembersQuery); } - protected virtual IQueryable CreateGetMembersFilteredQuery(OrganizationUnit organizationUnit, string filter = null) + protected virtual async Task> CreateGetMembersFilteredQueryAsync(OrganizationUnit organizationUnit, string filter = null) { - var query = from userOu in DbContext.Set() - join user in DbContext.Users on userOu.UserId equals user.Id + var dbContext = await GetDbContextAsync(); + + var query = from userOu in dbContext.Set() + join user in dbContext.Users on userOu.UserId equals user.Id where userOu.OrganizationUnitId == organizationUnit.Id select user; diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoOrganizationUnitRepository.cs b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoOrganizationUnitRepository.cs index bd4b079a07..de0afd8abc 100644 --- a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoOrganizationUnitRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoOrganizationUnitRepository.cs @@ -1,9 +1,7 @@ -using MongoDB.Bson; -using MongoDB.Driver; +using MongoDB.Driver; using MongoDB.Driver.Linq; using System; using System.Collections.Generic; -using System.Data; using System.Linq; using System.Linq.Dynamic.Core; using System.Threading; @@ -11,7 +9,6 @@ using System.Threading.Tasks; using Volo.Abp.Domain.Repositories.MongoDB; using Volo.Abp.MongoDB; using Volo.Abp.MultiTenancy; -using Volo.Abp.Uow; namespace Volo.Abp.Identity.MongoDB { @@ -30,7 +27,7 @@ namespace Volo.Abp.Identity.MongoDB bool includeDetails = false, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(ou => ou.ParentId == parentId) .ToListAsync(GetCancellationToken(cancellationToken)); } @@ -41,7 +38,7 @@ namespace Volo.Abp.Identity.MongoDB bool includeDetails = false, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(ou => ou.Code.StartsWith(code) && ou.Id != parentId.Value) .ToListAsync(GetCancellationToken(cancellationToken)); } @@ -51,7 +48,7 @@ namespace Volo.Abp.Identity.MongoDB bool includeDetails = false, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(t => ids.Contains(t.Id)) .ToListAsync(GetCancellationToken(cancellationToken)); } @@ -63,7 +60,7 @@ namespace Volo.Abp.Identity.MongoDB bool includeDetails = false, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .OrderBy(sorting ?? nameof(OrganizationUnit.DisplayName)) .As>() .PageBy>(skipCount, maxResultCount) @@ -75,7 +72,7 @@ namespace Volo.Abp.Identity.MongoDB bool includeDetails = true, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .OrderBy(x => x.Id) .FirstOrDefaultAsync( ou => ou.DisplayName == displayName, @@ -92,7 +89,10 @@ namespace Volo.Abp.Identity.MongoDB CancellationToken cancellationToken = default) { var roleIds = organizationUnit.Roles.Select(r => r.RoleId).ToArray(); - return await ApplyDataFilters, IdentityRole>(DbContext.Roles.AsQueryable().Where(r => roleIds.Contains(r.Id))) + var dbContext = await GetDbContextAsync(cancellationToken); + return await ApplyDataFilters, IdentityRole>( + dbContext.Roles.AsQueryable().Where(r => roleIds.Contains(r.Id)) + ) .OrderBy(sorting ?? nameof(IdentityRole.Name)) .As>() .PageBy>(skipCount, maxResultCount) @@ -104,7 +104,10 @@ namespace Volo.Abp.Identity.MongoDB CancellationToken cancellationToken = default) { var roleIds = organizationUnit.Roles.Select(r => r.RoleId).ToArray(); - return await ApplyDataFilters, IdentityRole>( DbContext.Roles.AsQueryable().Where(r => roleIds.Contains(r.Id))) + var dbContext = await GetDbContextAsync(cancellationToken); + return await ApplyDataFilters, IdentityRole>( + dbContext.Roles.AsQueryable().Where(r => roleIds.Contains(r.Id)) + ) .As>() .CountAsync(cancellationToken); } @@ -119,7 +122,8 @@ namespace Volo.Abp.Identity.MongoDB CancellationToken cancellationToken = default) { var roleIds = organizationUnit.Roles.Select(r => r.RoleId).ToArray(); - return await ApplyDataFilters, IdentityRole>(DbContext.Roles.AsQueryable()) + var dbContext = await GetDbContextAsync(cancellationToken); + return await ApplyDataFilters, IdentityRole>(dbContext.Roles.AsQueryable()) .Where(r => !roleIds.Contains(r.Id)) .WhereIf(!filter.IsNullOrWhiteSpace(), r => r.Name.Contains(filter)) .OrderBy(sorting ?? nameof(IdentityRole.Name)) @@ -134,7 +138,8 @@ namespace Volo.Abp.Identity.MongoDB CancellationToken cancellationToken = default) { var roleIds = organizationUnit.Roles.Select(r => r.RoleId).ToArray(); - return await ApplyDataFilters, IdentityRole>(DbContext.Roles.AsQueryable()) + var dbContext = await GetDbContextAsync(cancellationToken); + return await ApplyDataFilters, IdentityRole>(dbContext.Roles.AsQueryable()) .Where(r => !roleIds.Contains(r.Id)) .WhereIf(!filter.IsNullOrWhiteSpace(), r => r.Name.Contains(filter)) .As>() @@ -150,13 +155,13 @@ namespace Volo.Abp.Identity.MongoDB bool includeDetails = false, CancellationToken cancellationToken = default) { - var query = CreateGetMembersFilteredQuery(organizationUnit, filter); - + cancellationToken = GetCancellationToken(cancellationToken); + var query = await CreateGetMembersFilteredQueryAsync(organizationUnit, filter, cancellationToken); return await query .OrderBy(sorting ?? nameof(IdentityUser.UserName)) .As>() .PageBy>(skipCount, maxResultCount) - .ToListAsync(GetCancellationToken(cancellationToken)); + .ToListAsync(cancellationToken); } public virtual async Task GetMembersCountAsync( @@ -164,9 +169,9 @@ namespace Volo.Abp.Identity.MongoDB string filter = null, CancellationToken cancellationToken = default) { - var query = CreateGetMembersFilteredQuery(organizationUnit, filter); - - return await query.CountAsync(GetCancellationToken(cancellationToken)); + cancellationToken = GetCancellationToken(cancellationToken); + var query = await CreateGetMembersFilteredQueryAsync(organizationUnit, filter, cancellationToken); + return await query.CountAsync(cancellationToken); } public async Task> GetUnaddedUsersAsync( @@ -178,7 +183,8 @@ namespace Volo.Abp.Identity.MongoDB bool includeDetails = false, CancellationToken cancellationToken = default) { - return await ApplyDataFilters, IdentityUser>(DbContext.Users.AsQueryable()) + var dbContext = await GetDbContextAsync(cancellationToken); + return await ApplyDataFilters, IdentityUser>(dbContext.Users.AsQueryable()) .Where(u => !u.OrganizationUnits.Any(uou => uou.OrganizationUnitId == organizationUnit.Id)) .WhereIf>( !filter.IsNullOrWhiteSpace(), @@ -196,7 +202,8 @@ namespace Volo.Abp.Identity.MongoDB public async Task GetUnaddedUsersCountAsync(OrganizationUnit organizationUnit, string filter = null, CancellationToken cancellationToken = default) { - return await ApplyDataFilters, IdentityUser>(DbContext.Users.AsQueryable()) + var dbContext = await GetDbContextAsync(cancellationToken); + return await ApplyDataFilters, IdentityUser>(dbContext.Users.AsQueryable()) .Where(u => !u.OrganizationUnits.Any(uou => uou.OrganizationUnitId == organizationUnit.Id)) .WhereIf>( !filter.IsNullOrWhiteSpace(), @@ -217,7 +224,8 @@ namespace Volo.Abp.Identity.MongoDB public virtual async Task RemoveAllMembersAsync(OrganizationUnit organizationUnit, CancellationToken cancellationToken = default) { - var users = await ApplyDataFilters, IdentityUser>(DbContext.Users.AsQueryable()) + var dbContext = await GetDbContextAsync(cancellationToken); + var users = await ApplyDataFilters, IdentityUser>(dbContext.Users.AsQueryable()) .Where(u => u.OrganizationUnits.Any(uou => uou.OrganizationUnitId == organizationUnit.Id)) .As>() .ToListAsync(GetCancellationToken(cancellationToken)); @@ -225,13 +233,17 @@ namespace Volo.Abp.Identity.MongoDB foreach (var user in users) { user.RemoveOrganizationUnit(organizationUnit.Id); - DbContext.Users.ReplaceOne(u => u.Id == user.Id, user); + await dbContext.Users.ReplaceOneAsync(u => u.Id == user.Id, user, cancellationToken: cancellationToken); } } - protected virtual IMongoQueryable CreateGetMembersFilteredQuery(OrganizationUnit organizationUnit, string filter = null) + protected virtual async Task> CreateGetMembersFilteredQueryAsync( + OrganizationUnit organizationUnit, + string filter = null, + CancellationToken cancellationToken = default) { - return ApplyDataFilters, IdentityUser>(DbContext.Users.AsQueryable()) + var dbContext = await GetDbContextAsync(cancellationToken); + return ApplyDataFilters, IdentityUser>(dbContext.Users.AsQueryable()) .Where(u => u.OrganizationUnits.Any(uou => uou.OrganizationUnitId == organizationUnit.Id)) .WhereIf>( !filter.IsNullOrWhiteSpace(), From ee7d9adb4d7014152b69f232a377f229a80683b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 21 Dec 2020 17:33:26 +0300 Subject: [PATCH 005/217] Fix naming --- .../Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs index acd414af83..f8cdbb3599 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs @@ -181,14 +181,14 @@ namespace Volo.Abp.Uow.EntityFrameworkCore { var dbContext = unitOfWork.ServiceProvider.GetRequiredService(); - var dbtransaction = unitOfWork.Options.IsolationLevel.HasValue + var dbTransaction = unitOfWork.Options.IsolationLevel.HasValue ? await dbContext.Database.BeginTransactionAsync(unitOfWork.Options.IsolationLevel.Value) : await dbContext.Database.BeginTransactionAsync(); unitOfWork.AddTransactionApi( transactionApiKey, new EfCoreTransactionApi( - dbtransaction, + dbTransaction, dbContext ) ); From c2c25a091ac1be9654c310da59c66f88dc0110d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 21 Dec 2020 17:33:40 +0300 Subject: [PATCH 006/217] Override true base method. --- .../EntityFrameworkCore/EfCoreOrganizationUnitRepository.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreOrganizationUnitRepository.cs b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreOrganizationUnitRepository.cs index c3a8975fec..6a54f41959 100644 --- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreOrganizationUnitRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreOrganizationUnitRepository.cs @@ -240,7 +240,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore return GetQueryable().IncludeDetails(); } - public override async Task> WithDetailsAsync(params Expression>[] propertySelectors) + public override async Task> WithDetailsAsync() { return (await GetQueryableAsync()).IncludeDetails(); } From 06889783f8c9e1c07c85847522ad7a760e4df621 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 21 Dec 2020 18:03:23 +0300 Subject: [PATCH 007/217] Apply async changes for EF Core repos. --- .../EfCoreFeatureValueRepository.cs | 6 +-- .../MongoDB/MongoFeatureValueRepository.cs | 6 +-- .../ApiResources/ApiResourceRepository.cs | 34 +++++++----- .../ApiScopes/ApiScopeRepository.cs | 25 +++++---- .../Clients/ClientRepository.cs | 52 +++++++++++-------- .../Devices/DeviceFlowCodesRepository.cs | 6 +-- .../Grants/PersistedGrantRepository.cs | 18 ++++--- .../IdentityResourceRepository.cs | 14 +++-- .../EfCorePermissionGrantRepository.cs | 6 +-- .../MongoDb/MongoPermissionGrantRepository.cs | 15 +++--- .../EfCoreSettingRepository.cs | 6 +-- .../MongoDB/MongoSettingRepository.cs | 12 +++-- .../EfCoreAbpUserRepositoryBase.cs | 8 +-- .../Users/MongoDB/MongoUserRepositoryBase.cs | 20 ++++--- 14 files changed, 139 insertions(+), 89 deletions(-) diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo/Abp/FeatureManagement/EntityFrameworkCore/EfCoreFeatureValueRepository.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo/Abp/FeatureManagement/EntityFrameworkCore/EfCoreFeatureValueRepository.cs index c559851bf1..be75e600d8 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo/Abp/FeatureManagement/EntityFrameworkCore/EfCoreFeatureValueRepository.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo/Abp/FeatureManagement/EntityFrameworkCore/EfCoreFeatureValueRepository.cs @@ -17,7 +17,7 @@ namespace Volo.Abp.FeatureManagement.EntityFrameworkCore public virtual async Task FindAsync(string name, string providerName, string providerKey) { - return await DbSet + return await (await GetDbSetAsync()) .OrderBy(x => x.Id) .FirstOrDefaultAsync( s => s.Name == name && s.ProviderName == providerName && s.ProviderKey == providerKey @@ -26,7 +26,7 @@ namespace Volo.Abp.FeatureManagement.EntityFrameworkCore public async Task> FindAllAsync(string name, string providerName, string providerKey) { - return await DbSet + return await (await GetDbSetAsync()) .Where( s => s.Name == name && s.ProviderName == providerName && s.ProviderKey == providerKey ).ToListAsync(); @@ -34,7 +34,7 @@ namespace Volo.Abp.FeatureManagement.EntityFrameworkCore public virtual async Task> GetListAsync(string providerName, string providerKey) { - return await DbSet + return await (await GetDbSetAsync()) .Where( s => s.ProviderName == providerName && s.ProviderKey == providerKey ).ToListAsync(); diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo/Abp/FeatureManagement/MongoDB/MongoFeatureValueRepository.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo/Abp/FeatureManagement/MongoDB/MongoFeatureValueRepository.cs index 2b96ca876a..21d4784f6e 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo/Abp/FeatureManagement/MongoDB/MongoFeatureValueRepository.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo/Abp/FeatureManagement/MongoDB/MongoFeatureValueRepository.cs @@ -18,20 +18,20 @@ namespace Volo.Abp.FeatureManagement.MongoDB public virtual async Task FindAsync(string name, string providerName, string providerKey) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync()) .OrderBy(x => x.Id) .FirstOrDefaultAsync(s => s.Name == name && s.ProviderName == providerName && s.ProviderKey == providerKey); } public async Task> FindAllAsync(string name, string providerName, string providerKey) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync()) .Where(s => s.Name == name && s.ProviderName == providerName && s.ProviderKey == providerKey).ToListAsync(); } public virtual async Task> GetListAsync(string providerName, string providerKey) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync()) .Where(s => s.ProviderName == providerName && s.ProviderKey == providerKey) .ToListAsync(); } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResources/ApiResourceRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResources/ApiResourceRepository.cs index 3cdcb7e49d..16a789048d 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResources/ApiResourceRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResources/ApiResourceRepository.cs @@ -20,7 +20,7 @@ namespace Volo.Abp.IdentityServer.ApiResources public async Task FindByNameAsync(string apiResourceName, bool includeDetails = true, CancellationToken cancellationToken = default) { - var query = from apiResource in DbSet.IncludeDetails(includeDetails) + var query = from apiResource in (await GetDbSetAsync()).IncludeDetails(includeDetails) where apiResource.Name == apiResourceName orderby apiResource.Id select apiResource; @@ -31,7 +31,7 @@ namespace Volo.Abp.IdentityServer.ApiResources public async Task> FindByNameAsync(string[] apiResourceNames, bool includeDetails = true, CancellationToken cancellationToken = default) { - var query = from apiResource in DbSet.IncludeDetails(includeDetails) + var query = from apiResource in (await GetDbSetAsync()).IncludeDetails(includeDetails) where apiResourceNames.Contains(apiResource.Name) orderby apiResource.Name select apiResource; @@ -44,7 +44,7 @@ namespace Volo.Abp.IdentityServer.ApiResources bool includeDetails = false, CancellationToken cancellationToken = default) { - var query = from api in DbSet.IncludeDetails(includeDetails) + var query = from api in (await GetDbSetAsync()).IncludeDetails(includeDetails) where api.Scopes.Any(x => scopeNames.Contains(x.Scope)) select api; @@ -58,7 +58,7 @@ namespace Volo.Abp.IdentityServer.ApiResources bool includeDetails = false, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .IncludeDetails(includeDetails) .WhereIf(!filter.IsNullOrWhiteSpace(), x => x.Name.Contains(filter) || x.Description.Contains(filter) || @@ -70,41 +70,49 @@ namespace Volo.Abp.IdentityServer.ApiResources public virtual async Task CheckNameExistAsync(string name, Guid? expectedId = null, CancellationToken cancellationToken = default) { - return await DbSet.AnyAsync(ar => ar.Id != expectedId && ar.Name == name, GetCancellationToken(cancellationToken)); + return await (await GetDbSetAsync()).AnyAsync(ar => ar.Id != expectedId && ar.Name == name, GetCancellationToken(cancellationToken)); } public async override Task DeleteAsync(Guid id, bool autoSave = false, CancellationToken cancellationToken = default) { - var resourceClaims = DbContext.Set().Where(sc => sc.ApiResourceId == id); + var dbContext = await GetDbContextAsync(); + + var resourceClaims = dbContext.Set().Where(sc => sc.ApiResourceId == id); foreach (var scopeClaim in resourceClaims) { - DbContext.Set().Remove(scopeClaim); + dbContext.Set().Remove(scopeClaim); } - var resourceScopes = DbContext.Set().Where(s => s.ApiResourceId == id); + var resourceScopes = dbContext.Set().Where(s => s.ApiResourceId == id); foreach (var scope in resourceScopes) { - DbContext.Set().Remove(scope); + dbContext.Set().Remove(scope); } - var resourceSecrets = DbContext.Set().Where(s => s.ApiResourceId == id); + var resourceSecrets = dbContext.Set().Where(s => s.ApiResourceId == id); foreach (var secret in resourceSecrets) { - DbContext.Set().Remove(secret); + dbContext.Set().Remove(secret); } - var apiResourceProperties = DbContext.Set().Where(s => s.ApiResourceId == id); + var apiResourceProperties = dbContext.Set().Where(s => s.ApiResourceId == id); foreach (var property in apiResourceProperties) { - DbContext.Set().Remove(property); + dbContext.Set().Remove(property); } await base.DeleteAsync(id, autoSave, cancellationToken); } + [Obsolete("Use WithDetailsAsync method.")] public override IQueryable WithDetails() { return GetQueryable().IncludeDetails(); } + + public override async Task> WithDetailsAsync() + { + return (await GetQueryableAsync()).IncludeDetails(); + } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiScopes/ApiScopeRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiScopes/ApiScopeRepository.cs index c2a962ead6..4cece3209e 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiScopes/ApiScopeRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiScopes/ApiScopeRepository.cs @@ -20,7 +20,7 @@ namespace Volo.Abp.IdentityServer.ApiScopes public async Task GetByNameAsync(string scopeName, bool includeDetails = true, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .OrderBy(x=>x.Id) .FirstOrDefaultAsync(x => x.Name == scopeName, GetCancellationToken(cancellationToken)); } @@ -28,7 +28,7 @@ namespace Volo.Abp.IdentityServer.ApiScopes public async Task> GetListByNameAsync(string[] scopeNames, bool includeDetails = false, CancellationToken cancellationToken = default) { - var query = from scope in DbSet.IncludeDetails(includeDetails) + var query = from scope in (await GetDbSetAsync()).IncludeDetails(includeDetails) where scopeNames.Contains(scope.Name) orderby scope.Id select scope; @@ -38,7 +38,7 @@ namespace Volo.Abp.IdentityServer.ApiScopes public async Task> GetListAsync(string sorting, int skipCount, int maxResultCount, string filter = null, bool includeDetails = false, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .IncludeDetails(includeDetails) .WhereIf(!filter.IsNullOrWhiteSpace(), x => x.Name.Contains(filter) || x.Description.Contains(filter) || @@ -50,29 +50,36 @@ namespace Volo.Abp.IdentityServer.ApiScopes public async Task CheckNameExistAsync(string name, Guid? expectedId = null, CancellationToken cancellationToken = default) { - return await DbSet.AnyAsync(x => x.Id != expectedId && x.Name == name, GetCancellationToken(cancellationToken)); + return await (await GetDbSetAsync()).AnyAsync(x => x.Id != expectedId && x.Name == name, GetCancellationToken(cancellationToken)); } - public async override Task DeleteAsync(Guid id, bool autoSave = false, CancellationToken cancellationToken = new CancellationToken()) + public override async Task DeleteAsync(Guid id, bool autoSave = false, CancellationToken cancellationToken = new CancellationToken()) { - var scopeClaims = DbContext.Set().Where(sc => sc.ApiScopeId == id); + var dbContext = await GetDbContextAsync(); + var scopeClaims = dbContext.Set().Where(sc => sc.ApiScopeId == id); foreach (var claim in scopeClaims) { - DbContext.Set().Remove(claim); + dbContext.Set().Remove(claim); } - var scopeProperties = DbContext.Set().Where(s => s.ApiScopeId == id); + var scopeProperties = dbContext.Set().Where(s => s.ApiScopeId == id); foreach (var property in scopeProperties) { - DbContext.Set().Remove(property); + dbContext.Set().Remove(property); } await base.DeleteAsync(id, autoSave, cancellationToken); } + [Obsolete("Use WithDetailsAsync method.")] public override IQueryable WithDetails() { return GetQueryable().IncludeDetails(); } + + public override async Task> WithDetailsAsync() + { + return (await GetQueryableAsync()).IncludeDetails(); + } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Clients/ClientRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Clients/ClientRepository.cs index 671d98d822..7607a189ca 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Clients/ClientRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Clients/ClientRepository.cs @@ -23,7 +23,7 @@ namespace Volo.Abp.IdentityServer.Clients bool includeDetails = true, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .IncludeDetails(includeDetails) .OrderBy(x => x.ClientId) .FirstOrDefaultAsync(x => x.ClientId == clientId, GetCancellationToken(cancellationToken)); @@ -33,7 +33,7 @@ namespace Volo.Abp.IdentityServer.Clients string sorting, int skipCount, int maxResultCount, string filter, bool includeDetails = false, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .IncludeDetails(includeDetails) .WhereIf(!filter.IsNullOrWhiteSpace(), x => x.ClientId.Contains(filter)) .OrderBy(sorting ?? nameof(Client.ClientName) + " desc") @@ -43,7 +43,7 @@ namespace Volo.Abp.IdentityServer.Clients public virtual async Task> GetAllDistinctAllowedCorsOriginsAsync(CancellationToken cancellationToken = default) { - return await DbContext.ClientCorsOrigins + return await (await GetDbContextAsync()).ClientCorsOrigins .Select(x => x.Origin) .Distinct() .ToListAsync(GetCancellationToken(cancellationToken)); @@ -51,62 +51,70 @@ namespace Volo.Abp.IdentityServer.Clients public virtual async Task CheckClientIdExistAsync(string clientId, Guid? expectedId = null, CancellationToken cancellationToken = default) { - return await DbSet.AnyAsync(c => c.Id != expectedId && c.ClientId == clientId, cancellationToken: cancellationToken); + return await (await GetDbSetAsync()).AnyAsync(c => c.Id != expectedId && c.ClientId == clientId, cancellationToken: cancellationToken); } public async override Task DeleteAsync(Guid id, bool autoSave = false, CancellationToken cancellationToken = default) { - foreach (var clientGrantType in DbContext.Set().Where(x => x.ClientId == id)) + var dbContext = await GetDbContextAsync(); + + foreach (var clientGrantType in dbContext.Set().Where(x => x.ClientId == id)) { - DbContext.Set().Remove(clientGrantType); + dbContext.Set().Remove(clientGrantType); } - foreach (var clientRedirectUri in DbContext.Set().Where(x => x.ClientId == id)) + foreach (var clientRedirectUri in dbContext.Set().Where(x => x.ClientId == id)) { - DbContext.Set().Remove(clientRedirectUri); + dbContext.Set().Remove(clientRedirectUri); } - foreach (var clientPostLogoutRedirectUri in DbContext.Set().Where(x => x.ClientId == id)) + foreach (var clientPostLogoutRedirectUri in dbContext.Set().Where(x => x.ClientId == id)) { - DbContext.Set().Remove(clientPostLogoutRedirectUri); + dbContext.Set().Remove(clientPostLogoutRedirectUri); } - foreach (var clientScope in DbContext.Set().Where(x => x.ClientId == id)) + foreach (var clientScope in dbContext.Set().Where(x => x.ClientId == id)) { - DbContext.Set().Remove(clientScope); + dbContext.Set().Remove(clientScope); } - foreach (var clientSecret in DbContext.Set().Where(x => x.ClientId == id)) + foreach (var clientSecret in dbContext.Set().Where(x => x.ClientId == id)) { - DbContext.Set().Remove(clientSecret); + dbContext.Set().Remove(clientSecret); } - foreach (var clientClaim in DbContext.Set().Where(x => x.ClientId == id)) + foreach (var clientClaim in dbContext.Set().Where(x => x.ClientId == id)) { - DbContext.Set().Remove(clientClaim); + dbContext.Set().Remove(clientClaim); } - foreach (var clientIdPRestriction in DbContext.Set().Where(x => x.ClientId == id)) + foreach (var clientIdPRestriction in dbContext.Set().Where(x => x.ClientId == id)) { - DbContext.Set().Remove(clientIdPRestriction); + dbContext.Set().Remove(clientIdPRestriction); } - foreach (var clientCorsOrigin in DbContext.Set().Where(x => x.ClientId == id)) + foreach (var clientCorsOrigin in dbContext.Set().Where(x => x.ClientId == id)) { - DbContext.Set().Remove(clientCorsOrigin); + dbContext.Set().Remove(clientCorsOrigin); } - foreach (var clientProperty in DbContext.Set().Where(x => x.ClientId == id)) + foreach (var clientProperty in dbContext.Set().Where(x => x.ClientId == id)) { - DbContext.Set().Remove(clientProperty); + dbContext.Set().Remove(clientProperty); } await base.DeleteAsync(id, autoSave, cancellationToken); } + [Obsolete("Use WithDetailsAsync method.")] public override IQueryable WithDetails() { return GetQueryable().IncludeDetails(); } + + public override async Task> WithDetailsAsync() + { + return (await GetQueryableAsync()).IncludeDetails(); + } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesRepository.cs index 819c90d402..a6fd6e196b 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesRepository.cs @@ -23,7 +23,7 @@ namespace Volo.Abp.IdentityServer.Devices string userCode, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .Where(d => d.UserCode == userCode) .OrderBy(d => d.Id) .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); @@ -33,7 +33,7 @@ namespace Volo.Abp.IdentityServer.Devices string deviceCode, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .Where(d => d.DeviceCode == deviceCode) .OrderBy(d => d.Id) .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); @@ -42,7 +42,7 @@ namespace Volo.Abp.IdentityServer.Devices public virtual async Task> GetListByExpirationAsync(DateTime maxExpirationDate, int maxResultCount, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .Where(x => x.Expiration != null && x.Expiration < maxExpirationDate) .OrderBy(x => x.ClientId) .Take(maxResultCount) diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Grants/PersistedGrantRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Grants/PersistedGrantRepository.cs index aa7a27804f..2dbdfc1a3b 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Grants/PersistedGrantRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Grants/PersistedGrantRepository.cs @@ -21,7 +21,7 @@ namespace Volo.Abp.IdentityServer.Grants public async Task> GetListAsync(string subjectId, string sessionId, string clientId, string type, bool includeDetails = false, CancellationToken cancellationToken = default) { - return await Filter(subjectId, sessionId, clientId, type) + return await (await FilterAsync(subjectId, sessionId, clientId, type)) .ToListAsync(GetCancellationToken(cancellationToken)); } @@ -29,7 +29,7 @@ namespace Volo.Abp.IdentityServer.Grants string key, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .Where(x => x.Key == key) .OrderBy(x => x.Id) .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); @@ -39,7 +39,7 @@ namespace Volo.Abp.IdentityServer.Grants string subjectId, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .Where(x => x.SubjectId == subjectId) .ToListAsync(GetCancellationToken(cancellationToken)); } @@ -49,7 +49,7 @@ namespace Volo.Abp.IdentityServer.Grants int maxResultCount, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .Where(x => x.Expiration != null && x.Expiration < maxExpirationDate) .OrderBy(x => x.ClientId) .Take(maxResultCount) @@ -63,21 +63,23 @@ namespace Volo.Abp.IdentityServer.Grants string type = null, CancellationToken cancellationToken = default) { - var persistedGrants = await Filter(subjectId, sessionId, clientId, type).ToListAsync(GetCancellationToken(cancellationToken)); + var persistedGrants = await (await FilterAsync(subjectId, sessionId, clientId, type)).ToListAsync(GetCancellationToken(cancellationToken)); + + var dbSet = await GetDbSetAsync(); foreach (var persistedGrant in persistedGrants) { - DbSet.Remove(persistedGrant); + dbSet.Remove(persistedGrant); } } - private IQueryable Filter( + private async Task> FilterAsync( string subjectId, string sessionId, string clientId, string type) { - return DbSet + return (await GetDbSetAsync()) .WhereIf(!subjectId.IsNullOrWhiteSpace(), x => x.SubjectId == subjectId) .WhereIf(!sessionId.IsNullOrWhiteSpace(), x => x.SessionId == sessionId) .WhereIf(!clientId.IsNullOrWhiteSpace(), x => x.ClientId == clientId) diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceRepository.cs index 6ddf38e2db..1b83b46158 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceRepository.cs @@ -24,22 +24,28 @@ namespace Volo.Abp.IdentityServer.IdentityResources bool includeDetails = false, CancellationToken cancellationToken = default) { - var query = from identityResource in DbSet.IncludeDetails(includeDetails) + var query = from identityResource in (await GetDbSetAsync()).IncludeDetails(includeDetails) where scopeNames.Contains(identityResource.Name) select identityResource; return await query.ToListAsync(GetCancellationToken(cancellationToken)); } + [Obsolete("Use WithDetailsAsync method.")] public override IQueryable WithDetails() { return GetQueryable().IncludeDetails(); } + public override async Task> WithDetailsAsync() + { + return (await GetQueryableAsync()).IncludeDetails(); + } + public virtual async Task> GetListAsync(string sorting, int skipCount, int maxResultCount, string filter, bool includeDetails = false, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .IncludeDetails(includeDetails) .WhereIf(!filter.IsNullOrWhiteSpace(), x => x.Name.Contains(filter) || x.Description.Contains(filter) || @@ -54,7 +60,7 @@ namespace Volo.Abp.IdentityServer.IdentityResources bool includeDetails = true, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .IncludeDetails(includeDetails) .Where(x => x.Name == name) .OrderBy(x => x.Id) @@ -63,7 +69,7 @@ namespace Volo.Abp.IdentityServer.IdentityResources public virtual async Task CheckNameExistAsync(string name, Guid? expectedId = null, CancellationToken cancellationToken = default) { - return await DbSet.AnyAsync(ir => ir.Id != expectedId && ir.Name == name, cancellationToken: cancellationToken); + return await (await GetDbSetAsync()).AnyAsync(ir => ir.Id != expectedId && ir.Name == name, cancellationToken: cancellationToken); } } } diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo/Abp/PermissionManagement/EntityFrameworkCore/EfCorePermissionGrantRepository.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo/Abp/PermissionManagement/EntityFrameworkCore/EfCorePermissionGrantRepository.cs index 5a479c348b..bc0ea04cf2 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo/Abp/PermissionManagement/EntityFrameworkCore/EfCorePermissionGrantRepository.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo/Abp/PermissionManagement/EntityFrameworkCore/EfCorePermissionGrantRepository.cs @@ -24,7 +24,7 @@ namespace Volo.Abp.PermissionManagement.EntityFrameworkCore string providerKey, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .OrderBy(x => x.Id) .FirstOrDefaultAsync(s => s.Name == name && @@ -39,7 +39,7 @@ namespace Volo.Abp.PermissionManagement.EntityFrameworkCore string providerKey, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .Where(s => s.ProviderName == providerName && s.ProviderKey == providerKey @@ -49,7 +49,7 @@ namespace Volo.Abp.PermissionManagement.EntityFrameworkCore public virtual async Task> GetListAsync(string[] names, string providerName, string providerKey, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .Where(s => names.Contains(s.Name) && s.ProviderName == providerName && diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/Volo/Abp/PermissionManagement/MongoDb/MongoPermissionGrantRepository.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/Volo/Abp/PermissionManagement/MongoDb/MongoPermissionGrantRepository.cs index a8f95ee6b9..823d5e63a3 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/Volo/Abp/PermissionManagement/MongoDb/MongoPermissionGrantRepository.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/Volo/Abp/PermissionManagement/MongoDb/MongoPermissionGrantRepository.cs @@ -24,13 +24,14 @@ namespace Volo.Abp.PermissionManagement.MongoDB string providerKey, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + cancellationToken = GetCancellationToken(cancellationToken); + return await (await GetMongoQueryableAsync(cancellationToken)) .OrderBy(x => x.Id) .FirstOrDefaultAsync(s => s.Name == name && s.ProviderName == providerName && s.ProviderKey == providerKey, - GetCancellationToken(cancellationToken) + cancellationToken ); } @@ -39,22 +40,24 @@ namespace Volo.Abp.PermissionManagement.MongoDB string providerKey, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + cancellationToken = GetCancellationToken(cancellationToken); + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(s => s.ProviderName == providerName && s.ProviderKey == providerKey - ).ToListAsync(GetCancellationToken(cancellationToken)); + ).ToListAsync(cancellationToken); } public virtual async Task> GetListAsync(string[] names, string providerName, string providerKey, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + cancellationToken = GetCancellationToken(cancellationToken); + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(s => names.Contains(s.Name) && s.ProviderName == providerName && s.ProviderKey == providerKey - ).ToListAsync(GetCancellationToken(cancellationToken)); + ).ToListAsync(cancellationToken); } } } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/Volo/Abp/SettingManagement/EntityFrameworkCore/EfCoreSettingRepository.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/Volo/Abp/SettingManagement/EntityFrameworkCore/EfCoreSettingRepository.cs index c3323f331e..e90d2fc63a 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/Volo/Abp/SettingManagement/EntityFrameworkCore/EfCoreSettingRepository.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/Volo/Abp/SettingManagement/EntityFrameworkCore/EfCoreSettingRepository.cs @@ -17,7 +17,7 @@ namespace Volo.Abp.SettingManagement.EntityFrameworkCore public virtual async Task FindAsync(string name, string providerName, string providerKey) { - return await DbSet + return await (await GetDbSetAsync()) .OrderBy(x => x.Id) .FirstOrDefaultAsync( s => s.Name == name && s.ProviderName == providerName && s.ProviderKey == providerKey @@ -26,7 +26,7 @@ namespace Volo.Abp.SettingManagement.EntityFrameworkCore public virtual async Task> GetListAsync(string providerName, string providerKey) { - return await DbSet + return await (await GetDbSetAsync()) .Where( s => s.ProviderName == providerName && s.ProviderKey == providerKey ).ToListAsync(); @@ -34,7 +34,7 @@ namespace Volo.Abp.SettingManagement.EntityFrameworkCore public virtual async Task> GetListAsync(string[] names, string providerName, string providerKey) { - return await DbSet + return await (await GetDbSetAsync()) .Where( s => names.Contains(s.Name) && s.ProviderName == providerName && s.ProviderKey == providerKey ).ToListAsync(); diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/Volo/Abp/SettingManagement/MongoDB/MongoSettingRepository.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/Volo/Abp/SettingManagement/MongoDB/MongoSettingRepository.cs index 1acaf50d56..e81e76dfcc 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/Volo/Abp/SettingManagement/MongoDB/MongoSettingRepository.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/Volo/Abp/SettingManagement/MongoDB/MongoSettingRepository.cs @@ -19,17 +19,23 @@ namespace Volo.Abp.SettingManagement.MongoDB public virtual async Task FindAsync(string name, string providerName, string providerKey) { - return await GetMongoQueryable().OrderBy(x => x.Id).FirstOrDefaultAsync(s => s.Name == name && s.ProviderName == providerName && s.ProviderKey == providerKey); + return await (await GetMongoQueryableAsync()) + .OrderBy(x => x.Id) + .FirstOrDefaultAsync(s => s.Name == name && s.ProviderName == providerName && s.ProviderKey == providerKey); } public virtual async Task> GetListAsync(string providerName, string providerKey) { - return await GetMongoQueryable().Where(s => s.ProviderName == providerName && s.ProviderKey == providerKey).ToListAsync(); + return await (await GetMongoQueryableAsync()) + .Where(s => s.ProviderName == providerName && s.ProviderKey == providerKey) + .ToListAsync(); } public virtual async Task> GetListAsync(string[] names, string providerName, string providerKey) { - return await GetMongoQueryable().Where(s => names.Contains(s.Name) && s.ProviderName == providerName && s.ProviderKey == providerKey).ToListAsync(); + return await (await GetMongoQueryableAsync()) + .Where(s => names.Contains(s.Name) && s.ProviderName == providerName && s.ProviderKey == providerKey) + .ToListAsync(); } } } diff --git a/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/Volo/Abp/Users/EntityFrameworkCore/EfCoreAbpUserRepositoryBase.cs b/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/Volo/Abp/Users/EntityFrameworkCore/EfCoreAbpUserRepositoryBase.cs index 87a8fbc507..de27a05fbd 100644 --- a/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/Volo/Abp/Users/EntityFrameworkCore/EfCoreAbpUserRepositoryBase.cs +++ b/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/Volo/Abp/Users/EntityFrameworkCore/EfCoreAbpUserRepositoryBase.cs @@ -27,7 +27,9 @@ namespace Volo.Abp.Users.EntityFrameworkCore public virtual async Task> GetListAsync(IEnumerable ids, CancellationToken cancellationToken = default) { - return await DbSet.Where(u => ids.Contains(u.Id)).ToListAsync(GetCancellationToken(cancellationToken)); + return await (await GetDbSetAsync()) + .Where(u => ids.Contains(u.Id)) + .ToListAsync(GetCancellationToken(cancellationToken)); } public async Task> SearchAsync( @@ -37,7 +39,7 @@ namespace Volo.Abp.Users.EntityFrameworkCore string filter = null, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .WhereIf( !filter.IsNullOrWhiteSpace(), u => @@ -55,7 +57,7 @@ namespace Volo.Abp.Users.EntityFrameworkCore string filter = null, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .WhereIf( !filter.IsNullOrWhiteSpace(), u => diff --git a/modules/users/src/Volo.Abp.Users.MongoDB/Volo/Abp/Users/MongoDB/MongoUserRepositoryBase.cs b/modules/users/src/Volo.Abp.Users.MongoDB/Volo/Abp/Users/MongoDB/MongoUserRepositoryBase.cs index cf4d860def..996b6e314c 100644 --- a/modules/users/src/Volo.Abp.Users.MongoDB/Volo/Abp/Users/MongoDB/MongoUserRepositoryBase.cs +++ b/modules/users/src/Volo.Abp.Users.MongoDB/Volo/Abp/Users/MongoDB/MongoUserRepositoryBase.cs @@ -23,12 +23,18 @@ namespace Volo.Abp.Users.MongoDB public virtual async Task FindByUserNameAsync(string userName, CancellationToken cancellationToken = default) { - return await GetMongoQueryable().OrderBy(x => x.Id).FirstOrDefaultAsync(u => u.UserName == userName, GetCancellationToken(cancellationToken)); + cancellationToken = GetCancellationToken(cancellationToken); + return await (await GetMongoQueryableAsync(cancellationToken)) + .OrderBy(x => x.Id) + .FirstOrDefaultAsync(u => u.UserName == userName, cancellationToken); } public virtual async Task> GetListAsync(IEnumerable ids, CancellationToken cancellationToken = default) { - return await GetMongoQueryable().Where(u => ids.Contains(u.Id)).ToListAsync(GetCancellationToken(cancellationToken)); + cancellationToken = GetCancellationToken(cancellationToken); + return await (await GetMongoQueryableAsync(cancellationToken)) + .Where(u => ids.Contains(u.Id)) + .ToListAsync(cancellationToken); } public async Task> SearchAsync( @@ -38,7 +44,8 @@ namespace Volo.Abp.Users.MongoDB string filter = null, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + cancellationToken = GetCancellationToken(cancellationToken); + return await (await GetMongoQueryableAsync(cancellationToken)) .WhereIf>( !filter.IsNullOrWhiteSpace(), u => @@ -50,12 +57,13 @@ namespace Volo.Abp.Users.MongoDB .OrderBy(sorting ?? nameof(IUserData.UserName)) .As>() .PageBy>(skipCount, maxResultCount) - .ToListAsync(GetCancellationToken(cancellationToken)); + .ToListAsync(cancellationToken); } public async Task GetCountAsync(string filter = null, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + cancellationToken = GetCancellationToken(cancellationToken); + return await (await GetMongoQueryableAsync(cancellationToken)) .WhereIf>( !filter.IsNullOrWhiteSpace(), u => @@ -64,7 +72,7 @@ namespace Volo.Abp.Users.MongoDB u.Name.Contains(filter) || u.Surname.Contains(filter) ) - .LongCountAsync(GetCancellationToken(cancellationToken)); + .LongCountAsync(cancellationToken); } } } From 7642a39478486f25ca7c5c7cbd19a5da1355afe7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 21 Dec 2020 20:39:21 +0300 Subject: [PATCH 008/217] Fix EfCoreIdentityUserRepository: Use GetDbSetAsync --- .../EntityFrameworkCore/EfCoreIdentityUserRepository.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserRepository.cs b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserRepository.cs index 853e980f01..8fcce7c35a 100644 --- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserRepository.cs @@ -188,7 +188,8 @@ namespace Volo.Abp.Identity.EntityFrameworkCore string filter = null, CancellationToken cancellationToken = default) { - return await this.WhereIf( + return await (await GetDbSetAsync()) + .WhereIf( !filter.IsNullOrWhiteSpace(), u => u.UserName.Contains(filter) || From 64f9ee3c7cf8b635923ed8dcba6f6349da348bb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 21 Dec 2020 20:39:38 +0300 Subject: [PATCH 009/217] Add warning log. --- .../Volo/Abp/EntityFrameworkCore/IDbContextProvider.cs | 2 ++ .../EntityFrameworkCore/UnitOfWorkDbContextProvider.cs | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IDbContextProvider.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IDbContextProvider.cs index 17af400b97..b35436cfbc 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IDbContextProvider.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/IDbContextProvider.cs @@ -1,3 +1,4 @@ +using System; using System.Threading.Tasks; namespace Volo.Abp.EntityFrameworkCore @@ -5,6 +6,7 @@ namespace Volo.Abp.EntityFrameworkCore public interface IDbContextProvider where TDbContext : IEfCoreDbContext { + [Obsolete("Use GetDbContextAsync method.")] TDbContext GetDbContext(); Task GetDbContextAsync(); diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs index f8cdbb3599..a5e9a311db 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs @@ -3,6 +3,8 @@ using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Storage; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; using Volo.Abp.Data; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.DependencyInjection; @@ -14,6 +16,8 @@ namespace Volo.Abp.Uow.EntityFrameworkCore public class UnitOfWorkDbContextProvider : IDbContextProvider where TDbContext : IEfCoreDbContext { + public ILogger> Logger { get; set; } + private readonly IUnitOfWorkManager _unitOfWorkManager; private readonly IConnectionStringResolver _connectionStringResolver; @@ -23,10 +27,16 @@ namespace Volo.Abp.Uow.EntityFrameworkCore { _unitOfWorkManager = unitOfWorkManager; _connectionStringResolver = connectionStringResolver; + + Logger = NullLogger>.Instance; } + [Obsolete("Use GetDbContextAsync method.")] public TDbContext GetDbContext() { + Logger.LogWarning("UnitOfWorkDbContextProvider.GetDbContext is deprecated. Use GetDbContextAsync instead!"); + Logger.LogWarning(Environment.StackTrace); + var unitOfWork = _unitOfWorkManager.Current; if (unitOfWork == null) { From df4db8f150c52643045062e1181659a6f0587db5 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 22 Dec 2020 11:50:48 +0300 Subject: [PATCH 010/217] Fix MySQL documentation resolves https://github.com/abpframework/abp/issues/6731 --- docs/en/Entity-Framework-Core-MySQL.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/en/Entity-Framework-Core-MySQL.md b/docs/en/Entity-Framework-Core-MySQL.md index a04d6073fc..6c71b7fe85 100644 --- a/docs/en/Entity-Framework-Core-MySQL.md +++ b/docs/en/Entity-Framework-Core-MySQL.md @@ -12,10 +12,10 @@ Find ***YourProjectName*EntityFrameworkCoreModule** class inside the `.EntityFra ## UseMySQL() -Find `UseSqlServer()` calls in your solution, replace with `UseMySQL()`. Check the following files: +Find `UseSqlServer()` calls in your solution. Check the following files: -* *YourProjectName*EntityFrameworkCoreModule.cs inside the `.EntityFrameworkCore` project. -* *YourProjectName*MigrationsDbContextFactory.cs inside the `.EntityFrameworkCore.DbMigrations` project. +* *YourProjectName*EntityFrameworkCoreModule.cs inside the `.EntityFrameworkCore` project. Replace `UseSqlServer()` with `UseMySQL()`. +* *YourProjectName*MigrationsDbContextFactory.cs inside the `.EntityFrameworkCore.DbMigrations` project. Replace `UseSqlServer()` with `UseMySql()`. Then add a new parameter (`ServerVersion`) to `UseMySql()` method. See [this issue](https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/pull/1233) for more information about `ServerVersion`. > Depending on your solution structure, you may find more code files need to be changed. From 9994bbcf5346afcd67d7dadd6913dd2f4c4daa8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 22 Dec 2020 12:09:38 +0300 Subject: [PATCH 011/217] Use reserved UOW also for the UOW interceptor. Also, allow web layer to determine transaction behaviour. --- .../AspNetCore/Mvc/Uow/AbpUowActionFilter.cs | 2 +- .../AspNetCore/Mvc/Uow/AbpUowPageFilter.cs | 2 +- .../AspNetCore/Uow/AbpUnitOfWorkMiddleware.cs | 4 +- ...eUnitOfWorkTransactionBehaviourProvider.cs | 41 +++++++++++++++++++ .../UnitOfWorkDbContextProvider.cs | 2 + ...IUnitOfWorkTransactionBehaviourProvider.cs | 7 ++++ ...lUnitOfWorkTransactionBehaviourProvider.cs | 9 ++++ .../Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs | 4 +- .../Volo/Abp/Uow/UnitOfWorkInterceptor.cs | 21 ++++++++-- 9 files changed, 83 insertions(+), 9 deletions(-) create mode 100644 framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Uow/AspNetCoreUnitOfWorkTransactionBehaviourProvider.cs create mode 100644 framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWorkTransactionBehaviourProvider.cs create mode 100644 framework/src/Volo.Abp.Uow/Volo/Abp/Uow/NullUnitOfWorkTransactionBehaviourProvider.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Uow/AbpUowActionFilter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Uow/AbpUowActionFilter.cs index 552ce7e04e..43dedf916f 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Uow/AbpUowActionFilter.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Uow/AbpUowActionFilter.cs @@ -46,7 +46,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Uow var options = CreateOptions(context, unitOfWorkAttr); //Trying to begin a reserved UOW by AbpUnitOfWorkMiddleware - if (_unitOfWorkManager.TryBeginReserved(AbpUnitOfWorkMiddleware.UnitOfWorkReservationName, options)) + if (_unitOfWorkManager.TryBeginReserved(UnitOfWork.UnitOfWorkReservationName, options)) { var result = await next(); if (!Succeed(result)) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Uow/AbpUowPageFilter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Uow/AbpUowPageFilter.cs index bcef10ecd4..960c47b591 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Uow/AbpUowPageFilter.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Uow/AbpUowPageFilter.cs @@ -50,7 +50,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Uow var options = CreateOptions(context, unitOfWorkAttr); //Trying to begin a reserved UOW by AbpUnitOfWorkMiddleware - if (_unitOfWorkManager.TryBeginReserved(AbpUnitOfWorkMiddleware.UnitOfWorkReservationName, options)) + if (_unitOfWorkManager.TryBeginReserved(UnitOfWork.UnitOfWorkReservationName, options)) { var result = await next(); if (!Succeed(result)) diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Uow/AbpUnitOfWorkMiddleware.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Uow/AbpUnitOfWorkMiddleware.cs index c9ac1be509..aeb6f8a8c0 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Uow/AbpUnitOfWorkMiddleware.cs +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Uow/AbpUnitOfWorkMiddleware.cs @@ -7,8 +7,6 @@ namespace Volo.Abp.AspNetCore.Uow { public class AbpUnitOfWorkMiddleware : IMiddleware, ITransientDependency { - public const string UnitOfWorkReservationName = "_AbpActionUnitOfWork"; - private readonly IUnitOfWorkManager _unitOfWorkManager; public AbpUnitOfWorkMiddleware(IUnitOfWorkManager unitOfWorkManager) @@ -18,7 +16,7 @@ namespace Volo.Abp.AspNetCore.Uow public async Task InvokeAsync(HttpContext context, RequestDelegate next) { - using (var uow = _unitOfWorkManager.Reserve(UnitOfWorkReservationName)) + using (var uow = _unitOfWorkManager.Reserve(UnitOfWork.UnitOfWorkReservationName)) { await next(context); await uow.CompleteAsync(context.RequestAborted); diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Uow/AspNetCoreUnitOfWorkTransactionBehaviourProvider.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Uow/AspNetCoreUnitOfWorkTransactionBehaviourProvider.cs new file mode 100644 index 0000000000..061bc62018 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Uow/AspNetCoreUnitOfWorkTransactionBehaviourProvider.cs @@ -0,0 +1,41 @@ +using System; +using System.Net.Http; +using Microsoft.AspNetCore.Http; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Uow; + +namespace Volo.Abp.AspNetCore.Uow +{ + public class AspNetCoreUnitOfWorkTransactionBehaviourProvider : IUnitOfWorkTransactionBehaviourProvider, ITransientDependency + { + private readonly IHttpContextAccessor _httpContextAccessor; + + public virtual bool? IsTransactional + { + get + { + var httpContext = _httpContextAccessor.HttpContext; + if (httpContext == null) + { + return null; + } + + //IdentityServer endpoint (TODO: Better to move to the IDS module) + if (httpContext.Request.Path.Value?.StartsWith("/connect/", StringComparison.OrdinalIgnoreCase) == true) + { + return false; + } + + return !string.Equals( + httpContext.Request.Method, + HttpMethod.Get.Method, StringComparison.OrdinalIgnoreCase + ); + } + } + + public AspNetCoreUnitOfWorkTransactionBehaviourProvider(IHttpContextAccessor httpContextAccessor) + { + _httpContextAccessor = httpContextAccessor; + } + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs index a5e9a311db..22df5fddf5 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs @@ -133,6 +133,8 @@ namespace Volo.Abp.Uow.EntityFrameworkCore private async Task CreateDbContextAsync(IUnitOfWork unitOfWork) { + Logger.LogDebug($"Creating a new DbContext of type {typeof(TDbContext).FullName}"); + return unitOfWork.Options.IsTransactional ? await CreateDbContextWithTransactionAsync(unitOfWork) : unitOfWork.ServiceProvider.GetRequiredService(); diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWorkTransactionBehaviourProvider.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWorkTransactionBehaviourProvider.cs new file mode 100644 index 0000000000..1db7dac938 --- /dev/null +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWorkTransactionBehaviourProvider.cs @@ -0,0 +1,7 @@ +namespace Volo.Abp.Uow +{ + public interface IUnitOfWorkTransactionBehaviourProvider + { + bool? IsTransactional { get; } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/NullUnitOfWorkTransactionBehaviourProvider.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/NullUnitOfWorkTransactionBehaviourProvider.cs new file mode 100644 index 0000000000..2b302d303a --- /dev/null +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/NullUnitOfWorkTransactionBehaviourProvider.cs @@ -0,0 +1,9 @@ +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.Uow +{ + public class NullUnitOfWorkTransactionBehaviourProvider : IUnitOfWorkTransactionBehaviourProvider, ISingletonDependency + { + public bool? IsTransactional => null; + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs index b4158229fe..d53acc8f66 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs @@ -11,6 +11,8 @@ namespace Volo.Abp.Uow { public class UnitOfWork : IUnitOfWork, ITransientDependency { + public const string UnitOfWorkReservationName = "_AbpActionUnitOfWork"; + public Guid Id { get; } = Guid.NewGuid(); public IAbpUnitOfWorkOptions Options { get; private set; } @@ -302,7 +304,7 @@ namespace Volo.Abp.Uow } } } - + protected virtual async Task CommitTransactionsAsync() { foreach (var transaction in GetAllActiveTransactionApis()) diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkInterceptor.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkInterceptor.cs index f5afcea494..f2ed948eb1 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkInterceptor.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkInterceptor.cs @@ -10,11 +10,16 @@ namespace Volo.Abp.Uow public class UnitOfWorkInterceptor : AbpInterceptor, ITransientDependency { private readonly IUnitOfWorkManager _unitOfWorkManager; + private readonly IUnitOfWorkTransactionBehaviourProvider _transactionBehaviourProvider; private readonly AbpUnitOfWorkDefaultOptions _defaultOptions; - public UnitOfWorkInterceptor(IUnitOfWorkManager unitOfWorkManager, IOptions options) + public UnitOfWorkInterceptor( + IUnitOfWorkManager unitOfWorkManager, + IOptions options, + IUnitOfWorkTransactionBehaviourProvider transactionBehaviourProvider) { _unitOfWorkManager = unitOfWorkManager; + _transactionBehaviourProvider = transactionBehaviourProvider; _defaultOptions = options.Value; } @@ -26,7 +31,16 @@ namespace Volo.Abp.Uow return; } - using (var uow = _unitOfWorkManager.Begin(CreateOptions(invocation, unitOfWorkAttribute))) + var options = CreateOptions(invocation, unitOfWorkAttribute); + + //Trying to begin a reserved UOW by AbpUnitOfWorkMiddleware + if (_unitOfWorkManager.TryBeginReserved(UnitOfWork.UnitOfWorkReservationName, options)) + { + await invocation.ProceedAsync(); + return; + } + + using (var uow = _unitOfWorkManager.Begin(options)) { await invocation.ProceedAsync(); await uow.CompleteAsync(); @@ -42,7 +56,8 @@ namespace Volo.Abp.Uow if (unitOfWorkAttribute?.IsTransactional == null) { options.IsTransactional = _defaultOptions.CalculateIsTransactional( - autoValue: !invocation.Method.Name.StartsWith("Get", StringComparison.InvariantCultureIgnoreCase) + autoValue: _transactionBehaviourProvider.IsTransactional + ?? !invocation.Method.Name.StartsWith("Get", StringComparison.InvariantCultureIgnoreCase) ); } From 0393730eb83f2d2703a8001ac07a1a69c40370ca Mon Sep 17 00:00:00 2001 From: enisn Date: Tue, 22 Dec 2020 14:15:13 +0300 Subject: [PATCH 012/217] Add Asp.Net Core environments to .gitignore --- modules/cms-kit/.gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/cms-kit/.gitignore b/modules/cms-kit/.gitignore index e9589dd2d6..aee8bda8bf 100644 --- a/modules/cms-kit/.gitignore +++ b/modules/cms-kit/.gitignore @@ -251,6 +251,9 @@ paket-files/ .idea/ *.sln.iml +# Asp.NET Core Environments +appsettings.*.json + # CmsKit host/Volo.CmsKit.IdentityServer/Logs/logs.txt host/Volo.CmsKit.HttpApi.Host/Logs/logs.txt From 2ef3635ac57694841e10025475639b78cb4bd83f Mon Sep 17 00:00:00 2001 From: enisn Date: Tue, 22 Dec 2020 14:28:31 +0300 Subject: [PATCH 013/217] Draft Content for CmsKit --- .../Volo/CmsKit/Contents/IContentRenderer.cs | 14 ++++++++++++++ .../Contents/IContentRendererProvider.cs | 15 +++++++++++++++ .../Volo/CmsKit/Contents/PlainTextRenderer.cs | 19 +++++++++++++++++++ .../Volo/CmsKit/Contents/IContent.cs | 7 +++++++ .../Volo/CmsKit/Contents/IEntityContent.cs | 8 ++++++++ .../Volo/CmsKit/Contents/Content.cs | 17 +++++++++++++++++ 6 files changed, 80 insertions(+) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentRenderer.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentRendererProvider.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/PlainTextRenderer.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Contents/IContent.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Contents/IEntityContent.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/Content.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentRenderer.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentRenderer.cs new file mode 100644 index 0000000000..79efa468d7 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentRenderer.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.CmsKit.Domain.Shared.Volo.CmsKit.Contents; + +namespace Volo.CmsKit.Common.Application.Contracts.Volo.CmsKit.Contents +{ + public interface IContentRenderer + { + Task RenderAsync(string content); + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentRendererProvider.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentRendererProvider.cs new file mode 100644 index 0000000000..5a1f2077e7 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentRendererProvider.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.CmsKit.Domain.Shared.Volo.CmsKit.Contents; + +namespace Volo.CmsKit.Common.Application.Contracts.Volo.CmsKit.Contents +{ + public interface IContentRendererProvider + { + Task GetContentRendererAsync(IEntityContent content); + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/PlainTextRenderer.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/PlainTextRenderer.cs new file mode 100644 index 0000000000..4745954037 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/PlainTextRenderer.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.CmsKit.Common.Application.Contracts.Volo.CmsKit.Contents; +using Volo.CmsKit.Domain.Shared.Volo.CmsKit.Contents; + +namespace Volo.CmsKit.Common.Application.Volo.CmsKit.Contents +{ + public class PlainTextRenderer : IContentRenderer, ITransientDependency + { + public Task RenderAsync(IContent content) + { + return Task.FromResult(content?.Value); + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Contents/IContent.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Contents/IContent.cs new file mode 100644 index 0000000000..e3fce8c01f --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Contents/IContent.cs @@ -0,0 +1,7 @@ +namespace Volo.CmsKit.Domain.Shared.Volo.CmsKit.Contents +{ + public interface IContent + { + string Value { get; set; } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Contents/IEntityContent.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Contents/IEntityContent.cs new file mode 100644 index 0000000000..31f5a3299b --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Contents/IEntityContent.cs @@ -0,0 +1,8 @@ +namespace Volo.CmsKit.Domain.Shared.Volo.CmsKit.Contents +{ + public interface IEntityContent : IContent + { + string EntityType { get; set; } + string EntityId { get; set; } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/Content.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/Content.cs new file mode 100644 index 0000000000..48ed1bfc34 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/Content.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Domain.Entities.Auditing; +using Volo.CmsKit.Domain.Shared.Volo.CmsKit.Contents; + +namespace Volo.CmsKit.Domain.Volo.CmsKit.Contents +{ + public class Content : FullAuditedAggregateRoot + { + public string Value { get; set; } + public string EntityType { get; set; } + public string EntityId { get; set; } + } +} From 0c54b19085041f93ecf77a0d879a9693776c5aaa Mon Sep 17 00:00:00 2001 From: Ahmet Date: Tue, 22 Dec 2020 14:59:53 +0300 Subject: [PATCH 014/217] refactor content entity and added content renderer --- .../Volo/CmsKit/Contents/IContentRenderer.cs | 14 ----------- .../Contents/IContentRendererProvider.cs | 15 ------------ .../Volo/CmsKit/Contents/PlainTextRenderer.cs | 19 --------------- .../Contents/IContentRenderer.cs | 9 +++++++ .../Contents/PlainTextContentRenderer.cs | 13 ++++++++++ .../Volo/CmsKit/Contents/ContentConsts.cs | 15 ++++++++++++ .../Volo/CmsKit/Contents/IContent.cs | 7 ------ .../Volo/CmsKit/Contents/IEntityContent.cs | 8 ------- .../Volo/CmsKit/Contents/Content.cs | 24 +++++++++++++------ .../CmsKit/Contents/IContentRepository.cs | 10 ++++++++ .../Contents/EfCoreContentRepository.cs | 14 +++++++++++ .../Contents/MongoContentRepository.cs | 14 +++++++++++ 12 files changed, 92 insertions(+), 70 deletions(-) delete mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentRenderer.cs delete mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentRendererProvider.cs delete mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/PlainTextRenderer.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/IContentRenderer.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/PlainTextContentRenderer.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Contents/ContentConsts.cs delete mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Contents/IContent.cs delete mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Contents/IEntityContent.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/IContentRepository.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Contents/EfCoreContentRepository.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Contents/MongoContentRepository.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentRenderer.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentRenderer.cs deleted file mode 100644 index 79efa468d7..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentRenderer.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Volo.CmsKit.Domain.Shared.Volo.CmsKit.Contents; - -namespace Volo.CmsKit.Common.Application.Contracts.Volo.CmsKit.Contents -{ - public interface IContentRenderer - { - Task RenderAsync(string content); - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentRendererProvider.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentRendererProvider.cs deleted file mode 100644 index 5a1f2077e7..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentRendererProvider.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Volo.CmsKit.Domain.Shared.Volo.CmsKit.Contents; - -namespace Volo.CmsKit.Common.Application.Contracts.Volo.CmsKit.Contents -{ - public interface IContentRendererProvider - { - Task GetContentRendererAsync(IEntityContent content); - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/PlainTextRenderer.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/PlainTextRenderer.cs deleted file mode 100644 index 4745954037..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/PlainTextRenderer.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.CmsKit.Common.Application.Contracts.Volo.CmsKit.Contents; -using Volo.CmsKit.Domain.Shared.Volo.CmsKit.Contents; - -namespace Volo.CmsKit.Common.Application.Volo.CmsKit.Contents -{ - public class PlainTextRenderer : IContentRenderer, ITransientDependency - { - public Task RenderAsync(IContent content) - { - return Task.FromResult(content?.Value); - } - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/IContentRenderer.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/IContentRenderer.cs new file mode 100644 index 0000000000..af600d0382 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/IContentRenderer.cs @@ -0,0 +1,9 @@ +using System.Threading.Tasks; + +namespace Volo.CmsKit.Web.Contents +{ + public interface IContentRenderer + { + Task RenderAsync(string value); + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/PlainTextContentRenderer.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/PlainTextContentRenderer.cs new file mode 100644 index 0000000000..3f839947e3 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/PlainTextContentRenderer.cs @@ -0,0 +1,13 @@ +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; + +namespace Volo.CmsKit.Web.Contents +{ + public class PlainTextContentRenderer : IContentRenderer, ITransientDependency + { + public Task RenderAsync(string value) + { + return Task.FromResult(value); + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Contents/ContentConsts.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Contents/ContentConsts.cs new file mode 100644 index 0000000000..758a29e81f --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Contents/ContentConsts.cs @@ -0,0 +1,15 @@ +using System; +using Volo.CmsKit.Entities; + +namespace Volo.CmsKit.Contents +{ + public static class ContentConsts + { + public static int MaxEntityTypeLength { get; set; } = CmsEntityConsts.MaxEntityTypeLength; + + public static int MaxEntityIdLength { get; set; } = CmsEntityConsts.MaxEntityIdLength; + + // TODO: consider + public static int MaxValueLength = int.MaxValue; + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Contents/IContent.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Contents/IContent.cs deleted file mode 100644 index e3fce8c01f..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Contents/IContent.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Volo.CmsKit.Domain.Shared.Volo.CmsKit.Contents -{ - public interface IContent - { - string Value { get; set; } - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Contents/IEntityContent.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Contents/IEntityContent.cs deleted file mode 100644 index 31f5a3299b..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Contents/IEntityContent.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Volo.CmsKit.Domain.Shared.Volo.CmsKit.Contents -{ - public interface IEntityContent : IContent - { - string EntityType { get; set; } - string EntityId { get; set; } - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/Content.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/Content.cs index 48ed1bfc34..34546f6111 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/Content.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/Content.cs @@ -1,17 +1,27 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using JetBrains.Annotations; +using Volo.Abp; using Volo.Abp.Domain.Entities.Auditing; -using Volo.CmsKit.Domain.Shared.Volo.CmsKit.Contents; -namespace Volo.CmsKit.Domain.Volo.CmsKit.Contents +namespace Volo.CmsKit.Contents { public class Content : FullAuditedAggregateRoot { - public string Value { get; set; } public string EntityType { get; set; } + public string EntityId { get; set; } + + public string Value { get; set; } + + protected Content() + { + + } + public Content(Guid id, [NotNull] string entityType, [NotNull] string entityId, [NotNull] string value) : base(id) + { + EntityType = Check.NotNullOrWhiteSpace(entityType, nameof(entityType), ContentConsts.MaxEntityTypeLength); + EntityId = Check.NotNullOrWhiteSpace(entityId, nameof(entityId), ContentConsts.MaxEntityIdLength); + Value = Check.NotNullOrWhiteSpace(value, nameof(value), ContentConsts.MaxValueLength); + } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/IContentRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/IContentRepository.cs new file mode 100644 index 0000000000..994d2bd4ab --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/IContentRepository.cs @@ -0,0 +1,10 @@ +using System; +using Volo.Abp.Domain.Repositories; + +namespace Volo.CmsKit.Contents +{ + public interface IContentRepository : IBasicRepository + { + + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Contents/EfCoreContentRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Contents/EfCoreContentRepository.cs new file mode 100644 index 0000000000..592fccb883 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Contents/EfCoreContentRepository.cs @@ -0,0 +1,14 @@ +using System; +using Volo.Abp.Domain.Repositories.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; +using Volo.CmsKit.EntityFrameworkCore; + +namespace Volo.CmsKit.Contents +{ + public class EfCoreContentRepository : EfCoreRepository, IContentRepository + { + public EfCoreContentRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) + { + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Contents/MongoContentRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Contents/MongoContentRepository.cs new file mode 100644 index 0000000000..e29b53d417 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Contents/MongoContentRepository.cs @@ -0,0 +1,14 @@ +using System; +using Volo.Abp.Domain.Repositories.MongoDB; +using Volo.Abp.MongoDB; +using Volo.CmsKit.Contents; + +namespace Volo.CmsKit.MongoDB.Contents +{ + public class MongoContentRepository : MongoDbRepository, IContentRepository + { + public MongoContentRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) + { + } + } +} \ No newline at end of file From ed34a5faa13642c3ed84a0cd050ae72107765a75 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Tue, 22 Dec 2020 15:43:08 +0300 Subject: [PATCH 015/217] Revert "Add Asp.Net Core environments to .gitignore" This reverts commit 0393730eb83f2d2703a8001ac07a1a69c40370ca. --- modules/cms-kit/.gitignore | 3 --- 1 file changed, 3 deletions(-) diff --git a/modules/cms-kit/.gitignore b/modules/cms-kit/.gitignore index aee8bda8bf..e9589dd2d6 100644 --- a/modules/cms-kit/.gitignore +++ b/modules/cms-kit/.gitignore @@ -251,9 +251,6 @@ paket-files/ .idea/ *.sln.iml -# Asp.NET Core Environments -appsettings.*.json - # CmsKit host/Volo.CmsKit.IdentityServer/Logs/logs.txt host/Volo.CmsKit.HttpApi.Host/Logs/logs.txt From 482f51bb19af637bfa151a2a0304103810cc5242 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 22 Dec 2020 20:46:11 +0300 Subject: [PATCH 016/217] Switch to local ABP and disable transactions --- .../AbpPerfTest.WithAbp/AbpPerfTest.WithAbp.csproj | 6 +++--- test/AbpPerfTest/AbpPerfTest.WithAbp/AppModule.cs | 2 +- test/AbpPerfTest/_jmeter/SimpleTestPlan.jmx | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/test/AbpPerfTest/AbpPerfTest.WithAbp/AbpPerfTest.WithAbp.csproj b/test/AbpPerfTest/AbpPerfTest.WithAbp/AbpPerfTest.WithAbp.csproj index b270d019a4..3c738143b7 100644 --- a/test/AbpPerfTest/AbpPerfTest.WithAbp/AbpPerfTest.WithAbp.csproj +++ b/test/AbpPerfTest/AbpPerfTest.WithAbp/AbpPerfTest.WithAbp.csproj @@ -5,9 +5,9 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/test/AbpPerfTest/AbpPerfTest.WithAbp/AppModule.cs b/test/AbpPerfTest/AbpPerfTest.WithAbp/AppModule.cs index 3846cdd3de..1cd88989e6 100644 --- a/test/AbpPerfTest/AbpPerfTest.WithAbp/AppModule.cs +++ b/test/AbpPerfTest/AbpPerfTest.WithAbp/AppModule.cs @@ -33,7 +33,7 @@ namespace AbpPerfTest.WithAbp Configure(options => { - options.TransactionBehavior = UnitOfWorkTransactionBehavior.Auto; + options.TransactionBehavior = UnitOfWorkTransactionBehavior.Disabled; }); } diff --git a/test/AbpPerfTest/_jmeter/SimpleTestPlan.jmx b/test/AbpPerfTest/_jmeter/SimpleTestPlan.jmx index e532423147..70897c49da 100644 --- a/test/AbpPerfTest/_jmeter/SimpleTestPlan.jmx +++ b/test/AbpPerfTest/_jmeter/SimpleTestPlan.jmx @@ -18,7 +18,7 @@ false 100 - 100 + 1000 10 false From 49d3052258263100f28bdc583549c6a0d0e9ab8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 22 Dec 2020 20:53:35 +0300 Subject: [PATCH 017/217] Enable transaction --- test/AbpPerfTest/AbpPerfTest.WithAbp/AppModule.cs | 2 +- test/AbpPerfTest/_jmeter/SimpleTestPlan.jmx | 4 ++-- test/AbpPerfTest/_jmeter/SimpleTestPlanWithoutAbp.jmx | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/test/AbpPerfTest/AbpPerfTest.WithAbp/AppModule.cs b/test/AbpPerfTest/AbpPerfTest.WithAbp/AppModule.cs index 1cd88989e6..3846cdd3de 100644 --- a/test/AbpPerfTest/AbpPerfTest.WithAbp/AppModule.cs +++ b/test/AbpPerfTest/AbpPerfTest.WithAbp/AppModule.cs @@ -33,7 +33,7 @@ namespace AbpPerfTest.WithAbp Configure(options => { - options.TransactionBehavior = UnitOfWorkTransactionBehavior.Disabled; + options.TransactionBehavior = UnitOfWorkTransactionBehavior.Auto; }); } diff --git a/test/AbpPerfTest/_jmeter/SimpleTestPlan.jmx b/test/AbpPerfTest/_jmeter/SimpleTestPlan.jmx index 70897c49da..947feb54f7 100644 --- a/test/AbpPerfTest/_jmeter/SimpleTestPlan.jmx +++ b/test/AbpPerfTest/_jmeter/SimpleTestPlan.jmx @@ -16,9 +16,9 @@ continue false - 100 + 20 - 1000 + 2000 10 false diff --git a/test/AbpPerfTest/_jmeter/SimpleTestPlanWithoutAbp.jmx b/test/AbpPerfTest/_jmeter/SimpleTestPlanWithoutAbp.jmx index 05dbaeacf8..832d8e05d0 100644 --- a/test/AbpPerfTest/_jmeter/SimpleTestPlanWithoutAbp.jmx +++ b/test/AbpPerfTest/_jmeter/SimpleTestPlanWithoutAbp.jmx @@ -16,9 +16,9 @@ continue false - 100 + 20 - 100 + 1000 10 false From cfaef4c05e5d624e0fa8326e2a39bc53e6b5cfc2 Mon Sep 17 00:00:00 2001 From: enisn Date: Wed, 23 Dec 2020 10:28:27 +0300 Subject: [PATCH 018/217] Template design of Tags in CmsKit --- .../Volo/CmsKit/Tags/TagConsts.cs | 9 +++++ .../Volo/CmsKit/EntityTags/EntityTag.cs | 35 +++++++++++++++++ .../CmsKit/EntityTags/EntityTagManager.cs | 39 +++++++++++++++++++ .../CmsKit/EntityTags/IEntityTagManager.cs | 15 +++++++ .../CmsKit/EntityTags/IEntityTagRepository.cs | 14 +++++++ .../Volo/CmsKit/Tags/ITagRepository.cs | 14 +++++++ .../Volo/CmsKit/Tags/Tag.cs | 31 +++++++++++++++ .../EntityTags/EfCoreEntityTagRepository.cs | 14 +++++++ .../Volo/CmsKit/Tags/EfCoreTagRepository.cs | 14 +++++++ .../EntityTags/MongoEntityTagRepository.cs | 14 +++++++ .../CmsKit/MongoDB/Tags/MongoTagRepository.cs | 15 +++++++ 11 files changed, 214 insertions(+) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Tags/TagConsts.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/EntityTag.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/EntityTagManager.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/IEntityTagManager.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/IEntityTagRepository.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/Tag.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityTags/EfCoreEntityTagRepository.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/EntityTags/MongoEntityTagRepository.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Tags/TagConsts.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Tags/TagConsts.cs new file mode 100644 index 0000000000..96b6b3f8e1 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Tags/TagConsts.cs @@ -0,0 +1,9 @@ +namespace Volo.CmsKit.Tags +{ + public static class TagConsts + { + public static int MaxNameLength { get; set; } = 32; + + public static int MaxColorHexLength { get; set; } = 6; + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/EntityTag.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/EntityTag.cs new file mode 100644 index 0000000000..62bbd2877d --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/EntityTag.cs @@ -0,0 +1,35 @@ +using System; +using Volo.Abp.Domain.Entities; + +namespace Volo.CmsKit.Tags +{ + public class EntityTag : AggregateRoot + { + protected EntityTag() + { + } + + public EntityTag(string entityType, string entityId, Guid tagId) + { + EntityType = entityType; + EntityId = entityId; + TagId = tagId; + } + + public virtual string EntityType { get; protected set; } + + public virtual string EntityId { get; protected set; } + + public virtual Guid TagId { get; set; } + + public override object[] GetKeys() + { + return new object[] + { + EntityType, + EntityId, + TagId + }; + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/EntityTagManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/EntityTagManager.cs new file mode 100644 index 0000000000..42f2b9e6d7 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/EntityTagManager.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.CmsKit.EntityTags; +using Volo.CmsKit.Tags; + +namespace Volo.CmsKit.EntityTags +{ + public class EntityTagManager : IEntityTagManager + { + private readonly ITagRepository tagRepository; + private readonly IEntityTagRepository entityTagRepository; + + public EntityTagManager( + ITagRepository tagRepository, + IEntityTagRepository entityTagRepository) + { + this.tagRepository = tagRepository; + this.entityTagRepository = entityTagRepository; + } + + public Task AddTagToEntityAsync(Guid tagId, string entityType, string entityId) + { + throw new NotImplementedException(); + } + + public Task> GetEntityTagsAsync(string entityType, string entityId) + { + throw new NotImplementedException(); + } + + public Task RemoveTagFromEntityAsync(Guid tagId, string entityType, string entityId) + { + throw new NotImplementedException(); + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/IEntityTagManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/IEntityTagManager.cs new file mode 100644 index 0000000000..296136fb2d --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/IEntityTagManager.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.CmsKit.Tags; + +namespace Volo.CmsKit.EntityTags +{ + public interface IEntityTagManager + { + Task AddTagToEntityAsync(Guid tagId, string entityType, string entityId); + Task RemoveTagFromEntityAsync(Guid tagId, string entityType, string entityId); + Task> GetEntityTagsAsync(string entityType, string entityId); + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/IEntityTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/IEntityTagRepository.cs new file mode 100644 index 0000000000..127b417bc9 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/IEntityTagRepository.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Domain.Repositories; +using Volo.CmsKit.Tags; + +namespace Volo.CmsKit.EntityTags +{ + public interface IEntityTagRepository : IBasicRepository + { + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs new file mode 100644 index 0000000000..9874fc6e71 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Domain.Repositories; +using Volo.CmsKit.Tags; + +namespace Volo.CmsKit.Tags +{ + public interface ITagRepository : IBasicRepository + { + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/Tag.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/Tag.cs new file mode 100644 index 0000000000..3ebe06aa58 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/Tag.cs @@ -0,0 +1,31 @@ +using JetBrains.Annotations; +using System; +using Volo.Abp; +using Volo.Abp.Auditing; +using Volo.Abp.Domain.Entities; +using Volo.Abp.MultiTenancy; + +namespace Volo.CmsKit.Tags +{ + public class Tag : BasicAggregateRoot, IMultiTenant, IHasCreationTime + { + protected Tag() + { + } + + public Tag( + [NotNull] string name, + [CanBeNull] string colorHex, + [NotNull] Guid? tenantId = null) + { + Name = Check.NotNullOrWhiteSpace(name, nameof(name), TagConsts.MaxNameLength); + ColorHex = Check.Length(colorHex, nameof(colorHex), TagConsts.MaxColorHexLength); + TenantId = tenantId; + } + + public virtual string Name { get; set; } + public virtual string ColorHex { get; set; } + public Guid? TenantId { get; } + public DateTime CreationTime { get; } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityTags/EfCoreEntityTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityTags/EfCoreEntityTagRepository.cs new file mode 100644 index 0000000000..31663f8d31 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityTags/EfCoreEntityTagRepository.cs @@ -0,0 +1,14 @@ +using Volo.Abp.Domain.Repositories.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; +using Volo.CmsKit.EntityFrameworkCore; +using Volo.CmsKit.Tags; + +namespace Volo.CmsKit.EntityTags +{ + public class EfCoreEntityTagRepository : EfCoreRepository, IEntityTagRepository + { + public EfCoreEntityTagRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) + { + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs new file mode 100644 index 0000000000..0021281fa5 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs @@ -0,0 +1,14 @@ +using System; +using Volo.Abp.Domain.Repositories.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; +using Volo.CmsKit.EntityFrameworkCore; + +namespace Volo.CmsKit.Tags +{ + public class EfCoreTagRepository : EfCoreRepository, ITagRepository + { + public EfCoreTagRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) + { + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/EntityTags/MongoEntityTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/EntityTags/MongoEntityTagRepository.cs new file mode 100644 index 0000000000..23723a86df --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/EntityTags/MongoEntityTagRepository.cs @@ -0,0 +1,14 @@ +using Volo.Abp.Domain.Repositories.MongoDB; +using Volo.Abp.MongoDB; +using Volo.CmsKit.EntityTags; +using Volo.CmsKit.Tags; + +namespace Volo.CmsKit.MongoDB.EntityTags +{ + public class MongoEntityTagRepository : MongoDbRepository, IEntityTagRepository + { + public MongoEntityTagRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) + { + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs new file mode 100644 index 0000000000..6eaa507ee4 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs @@ -0,0 +1,15 @@ +using System; +using Volo.Abp.Domain.Repositories.MongoDB; +using Volo.Abp.MongoDB; +using Volo.CmsKit.MongoDB; +using Volo.CmsKit.Tags; + +namespace CmsKit.MongoDB.Tags +{ + public class MongoTagRepository : MongoDbRepository, ITagRepository + { + public MongoTagRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) + { + } + } +} From e686d3d788db14c05f5fc9190cb8ece72f3684ab Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Wed, 23 Dec 2020 12:21:13 +0300 Subject: [PATCH 019/217] Mysql added example for ServerVersion --- docs/en/Entity-Framework-Core-MySQL.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/Entity-Framework-Core-MySQL.md b/docs/en/Entity-Framework-Core-MySQL.md index 6c71b7fe85..14f419557e 100644 --- a/docs/en/Entity-Framework-Core-MySQL.md +++ b/docs/en/Entity-Framework-Core-MySQL.md @@ -15,7 +15,7 @@ Find ***YourProjectName*EntityFrameworkCoreModule** class inside the `.EntityFra Find `UseSqlServer()` calls in your solution. Check the following files: * *YourProjectName*EntityFrameworkCoreModule.cs inside the `.EntityFrameworkCore` project. Replace `UseSqlServer()` with `UseMySQL()`. -* *YourProjectName*MigrationsDbContextFactory.cs inside the `.EntityFrameworkCore.DbMigrations` project. Replace `UseSqlServer()` with `UseMySql()`. Then add a new parameter (`ServerVersion`) to `UseMySql()` method. See [this issue](https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/pull/1233) for more information about `ServerVersion`. +* *YourProjectName*MigrationsDbContextFactory.cs inside the `.EntityFrameworkCore.DbMigrations` project. Replace `UseSqlServer()` with `UseMySql()`. Then add a new parameter (`ServerVersion`) to `UseMySql()` method. Example: `.UseMySql(configuration.GetConnectionString("Default"), ServerVersion.FromString("8.0.21-mysql"))`. See [this issue](https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/pull/1233) for more information about `ServerVersion`) > Depending on your solution structure, you may find more code files need to be changed. @@ -38,4 +38,4 @@ Run the `.DbMigrator` project to create the database and seed the initial data. ## Run the Application -It is ready. Just run the application and enjoy coding. \ No newline at end of file +It is ready. Just run the application and enjoy coding. From a4fab14dd636c262fa6b9bb066fbe721cea2ff1f Mon Sep 17 00:00:00 2001 From: Ahmet Date: Wed, 23 Dec 2020 13:35:21 +0300 Subject: [PATCH 020/217] refactoring tag and adding mongodb configurations for content --- .../Volo/CmsKit/Contents/Content.cs | 17 ++++++++++++----- .../Volo.CmsKit.Domain/Volo/CmsKit/Tags/Tag.cs | 18 +++++++++--------- .../CmsKit/MongoDB/CmsKitMongoDbContext.cs | 3 +++ .../MongoDB/CmsKitMongoDbContextExtensions.cs | 6 ++++++ .../Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs | 3 +++ .../CmsKit/MongoDB/ICmsKitMongoDbContext.cs | 3 +++ 6 files changed, 36 insertions(+), 14 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/Content.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/Content.cs index 34546f6111..229ad037b0 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/Content.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/Content.cs @@ -2,26 +2,33 @@ using JetBrains.Annotations; using Volo.Abp; using Volo.Abp.Domain.Entities.Auditing; +using Volo.Abp.MultiTenancy; namespace Volo.CmsKit.Contents { - public class Content : FullAuditedAggregateRoot + public class Content : FullAuditedAggregateRoot, IMultiTenant { - public string EntityType { get; set; } + public virtual Guid? TenantId { get; } - public string EntityId { get; set; } + public virtual string EntityType { get; set; } - public string Value { get; set; } + public virtual string EntityId { get; set; } + + public virtual string Value { get; set; } protected Content() { } - public Content(Guid id, [NotNull] string entityType, [NotNull] string entityId, [NotNull] string value) : base(id) + + public Content(Guid id, [NotNull] string entityType, [NotNull] string entityId, [NotNull] string value, Guid? tenantId = null) : base(id) { EntityType = Check.NotNullOrWhiteSpace(entityType, nameof(entityType), ContentConsts.MaxEntityTypeLength); EntityId = Check.NotNullOrWhiteSpace(entityId, nameof(entityId), ContentConsts.MaxEntityIdLength); Value = Check.NotNullOrWhiteSpace(value, nameof(value), ContentConsts.MaxValueLength); + + TenantId = tenantId; } + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/Tag.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/Tag.cs index 3ebe06aa58..5f6ac203c0 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/Tag.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/Tag.cs @@ -9,23 +9,23 @@ namespace Volo.CmsKit.Tags { public class Tag : BasicAggregateRoot, IMultiTenant, IHasCreationTime { + public string Name { get; set; } + + public string ColorHex { get; set; } + + public Guid? TenantId { get; } + + public DateTime CreationTime { get; } + protected Tag() { } - public Tag( - [NotNull] string name, - [CanBeNull] string colorHex, - [NotNull] Guid? tenantId = null) + public Tag([NotNull] string name, [CanBeNull] string colorHex, Guid? tenantId = null) { Name = Check.NotNullOrWhiteSpace(name, nameof(name), TagConsts.MaxNameLength); ColorHex = Check.Length(colorHex, nameof(colorHex), TagConsts.MaxColorHexLength); TenantId = tenantId; } - - public virtual string Name { get; set; } - public virtual string ColorHex { get; set; } - public Guid? TenantId { get; } - public DateTime CreationTime { get; } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs index 09053167f9..dfd6a4e9a7 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs @@ -2,6 +2,7 @@ using Volo.Abp.Data; using Volo.Abp.MongoDB; using Volo.CmsKit.Comments; +using Volo.CmsKit.Contents; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; using Volo.CmsKit.Users; @@ -19,6 +20,8 @@ namespace Volo.CmsKit.MongoDB public IMongoCollection Ratings => Collection(); + public IMongoCollection Contents => Collection(); + protected override void CreateModel(IMongoModelBuilder modelBuilder) { base.CreateModel(modelBuilder); diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs index 2dc4c55a71..c996dd9017 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs @@ -2,6 +2,7 @@ using Volo.Abp; using Volo.Abp.MongoDB; using Volo.CmsKit.Comments; +using Volo.CmsKit.Contents; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; using Volo.CmsKit.Users; @@ -41,6 +42,11 @@ namespace Volo.CmsKit.MongoDB { x.CollectionName = CmsKitDbProperties.DbTablePrefix + "Ratings"; }); + + builder.Entity(x => + { + x.CollectionName = CmsKitDbProperties.DbTablePrefix + "Contents"; + }); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs index d479821b38..d6b7ce62e1 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs @@ -3,7 +3,9 @@ using Volo.Abp.Modularity; using Volo.Abp.MongoDB; using Volo.Abp.Users.MongoDB; using Volo.CmsKit.Comments; +using Volo.CmsKit.Contents; using Volo.CmsKit.MongoDB.Comments; +using Volo.CmsKit.MongoDB.Contents; using Volo.CmsKit.MongoDB.Ratings; using Volo.CmsKit.MongoDB.Reactions; using Volo.CmsKit.MongoDB.Users; @@ -28,6 +30,7 @@ namespace Volo.CmsKit.MongoDB options.AddRepository(); options.AddRepository(); options.AddRepository(); + options.AddRepository(); }); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs index 40914a9720..d86c4ababf 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs @@ -2,6 +2,7 @@ using Volo.Abp.Data; using Volo.Abp.MongoDB; using Volo.CmsKit.Comments; +using Volo.CmsKit.Contents; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; using Volo.CmsKit.Users; @@ -18,5 +19,7 @@ namespace Volo.CmsKit.MongoDB IMongoCollection CmsUsers { get; } IMongoCollection Ratings { get; } + + IMongoCollection Contents { get; } } } From c7ccf32a79cd1cdfe3390b63d762f05a81b5a70d Mon Sep 17 00:00:00 2001 From: Ahmet Date: Wed, 23 Dec 2020 14:39:48 +0300 Subject: [PATCH 021/217] added content ef core configurations --- .../CmsKitDbContextModelCreatingExtensions.cs | 14 ++++++++++++++ .../CmsKitEntityFrameworkCoreModule.cs | 2 ++ 2 files changed, 16 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs index b81704034a..ed3f8df710 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs @@ -8,6 +8,7 @@ using Volo.CmsKit.Comments; using Volo.CmsKit.Reactions; using Volo.CmsKit.Users; using Volo.Abp.Users.EntityFrameworkCore; +using Volo.CmsKit.Contents; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Ratings; @@ -93,6 +94,19 @@ namespace Volo.CmsKit.EntityFrameworkCore r.HasIndex(x => new {x.TenantId, x.EntityType, x.EntityId, x.CreatorId}); }); } + + builder.Entity(b => + { + b.ToTable(options.TablePrefix + "Contents", options.Schema); + + b.ConfigureByConvention(); + + b.Property(x => x.EntityType).IsRequired().HasMaxLength(ContentConsts.MaxEntityTypeLength); + b.Property(x => x.EntityId).IsRequired().HasMaxLength(ContentConsts.MaxEntityIdLength); + b.Property(x => x.Value).IsRequired().HasMaxLength(ContentConsts.MaxValueLength); + + b.HasIndex(x => new { x.TenantId, x.EntityType, x.EntityId }); + }); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitEntityFrameworkCoreModule.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitEntityFrameworkCoreModule.cs index 33e57cab37..52ec478882 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitEntityFrameworkCoreModule.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitEntityFrameworkCoreModule.cs @@ -3,6 +3,7 @@ using Volo.Abp.EntityFrameworkCore; using Volo.Abp.Modularity; using Volo.Abp.Users.EntityFrameworkCore; using Volo.CmsKit.Comments; +using Volo.CmsKit.Contents; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; using Volo.CmsKit.Users; @@ -24,6 +25,7 @@ namespace Volo.CmsKit.EntityFrameworkCore options.AddRepository(); options.AddRepository(); options.AddRepository(); + options.AddRepository(); }); } } From 322577ef6fc4dfe29f01db138daf04b9983d196f Mon Sep 17 00:00:00 2001 From: Ahmet Date: Wed, 23 Dec 2020 14:49:29 +0300 Subject: [PATCH 022/217] added tag and entity tag with repositories --- .../Volo/CmsKit/Tags/TagConsts.cs | 6 ++- .../Volo/CmsKit/EntityTags/EntityTag.cs | 35 ----------------- .../CmsKit/EntityTags/EntityTagManager.cs | 39 ------------------- .../CmsKit/EntityTags/IEntityTagManager.cs | 15 ------- .../CmsKit/EntityTags/IEntityTagRepository.cs | 14 ------- .../Volo/CmsKit/Tags/EntityTag.cs | 32 +++++++++++++++ .../Volo/CmsKit/Tags/IEntityTagRepository.cs | 9 +++++ .../Volo/CmsKit/Tags/ITagRepository.cs | 5 --- .../Volo/CmsKit/Tags/Tag.cs | 12 +++--- .../CmsKitDbContextModelCreatingExtensions.cs | 26 +++++++++++++ .../CmsKitEntityFrameworkCoreModule.cs | 3 ++ .../EfCoreEntityTagRepository.cs | 7 ++-- .../CmsKit/MongoDB/CmsKitMongoDbContext.cs | 6 +++ .../MongoDB/CmsKitMongoDbContextExtensions.cs | 11 ++++++ .../CmsKit/MongoDB/CmsKitMongoDbModule.cs | 4 ++ .../CmsKit/MongoDB/ICmsKitMongoDbContext.cs | 6 +++ .../MongoEntityTagRepository.cs | 7 ++-- .../CmsKit/MongoDB/Tags/MongoTagRepository.cs | 3 +- 18 files changed, 115 insertions(+), 125 deletions(-) delete mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/EntityTag.cs delete mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/EntityTagManager.cs delete mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/IEntityTagManager.cs delete mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/IEntityTagRepository.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/EntityTag.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/IEntityTagRepository.cs rename modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/{EntityTags => Tags}/EfCoreEntityTagRepository.cs (62%) rename modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/{EntityTags => Tags}/MongoEntityTagRepository.cs (57%) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Tags/TagConsts.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Tags/TagConsts.cs index 96b6b3f8e1..5affee9c15 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Tags/TagConsts.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Tags/TagConsts.cs @@ -1,7 +1,11 @@ -namespace Volo.CmsKit.Tags +using Volo.CmsKit.Entities; + +namespace Volo.CmsKit.Tags { public static class TagConsts { + public static int MaxEntityTypeLength { get; set; } = CmsEntityConsts.MaxEntityTypeLength; + public static int MaxNameLength { get; set; } = 32; public static int MaxColorHexLength { get; set; } = 6; diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/EntityTag.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/EntityTag.cs deleted file mode 100644 index 62bbd2877d..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/EntityTag.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using Volo.Abp.Domain.Entities; - -namespace Volo.CmsKit.Tags -{ - public class EntityTag : AggregateRoot - { - protected EntityTag() - { - } - - public EntityTag(string entityType, string entityId, Guid tagId) - { - EntityType = entityType; - EntityId = entityId; - TagId = tagId; - } - - public virtual string EntityType { get; protected set; } - - public virtual string EntityId { get; protected set; } - - public virtual Guid TagId { get; set; } - - public override object[] GetKeys() - { - return new object[] - { - EntityType, - EntityId, - TagId - }; - } - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/EntityTagManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/EntityTagManager.cs deleted file mode 100644 index 42f2b9e6d7..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/EntityTagManager.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Volo.CmsKit.EntityTags; -using Volo.CmsKit.Tags; - -namespace Volo.CmsKit.EntityTags -{ - public class EntityTagManager : IEntityTagManager - { - private readonly ITagRepository tagRepository; - private readonly IEntityTagRepository entityTagRepository; - - public EntityTagManager( - ITagRepository tagRepository, - IEntityTagRepository entityTagRepository) - { - this.tagRepository = tagRepository; - this.entityTagRepository = entityTagRepository; - } - - public Task AddTagToEntityAsync(Guid tagId, string entityType, string entityId) - { - throw new NotImplementedException(); - } - - public Task> GetEntityTagsAsync(string entityType, string entityId) - { - throw new NotImplementedException(); - } - - public Task RemoveTagFromEntityAsync(Guid tagId, string entityType, string entityId) - { - throw new NotImplementedException(); - } - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/IEntityTagManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/IEntityTagManager.cs deleted file mode 100644 index 296136fb2d..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/IEntityTagManager.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Threading.Tasks; -using Volo.CmsKit.Tags; - -namespace Volo.CmsKit.EntityTags -{ - public interface IEntityTagManager - { - Task AddTagToEntityAsync(Guid tagId, string entityType, string entityId); - Task RemoveTagFromEntityAsync(Guid tagId, string entityType, string entityId); - Task> GetEntityTagsAsync(string entityType, string entityId); - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/IEntityTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/IEntityTagRepository.cs deleted file mode 100644 index 127b417bc9..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/EntityTags/IEntityTagRepository.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Volo.Abp.Domain.Repositories; -using Volo.CmsKit.Tags; - -namespace Volo.CmsKit.EntityTags -{ - public interface IEntityTagRepository : IBasicRepository - { - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/EntityTag.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/EntityTag.cs new file mode 100644 index 0000000000..5825f32936 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/EntityTag.cs @@ -0,0 +1,32 @@ +using System; +using Volo.Abp.Domain.Entities; +using Volo.Abp.MultiTenancy; + +namespace Volo.CmsKit.Tags +{ + public class EntityTag : Entity, IMultiTenant + { + public virtual Guid TagId { get; set; } + + public virtual Guid EntityId { get; set; } + + public virtual Guid? TenantId { get; } + + protected EntityTag() + { + } + + public EntityTag(Guid tagId, Guid entityId, Guid? tenantId = null) + { + TagId = tagId; + EntityId = entityId; + TenantId = tenantId; + } + + public override object[] GetKeys() + { + return new object[] { TagId, EntityId, TenantId }; + } + + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/IEntityTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/IEntityTagRepository.cs new file mode 100644 index 0000000000..6ec0fd4b44 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/IEntityTagRepository.cs @@ -0,0 +1,9 @@ +using Volo.Abp.Domain.Repositories; + +namespace Volo.CmsKit.Tags +{ + public interface IEntityTagRepository : IBasicRepository + { + + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs index 9874fc6e71..2a619887c1 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs @@ -1,10 +1,5 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using Volo.Abp.Domain.Repositories; -using Volo.CmsKit.Tags; namespace Volo.CmsKit.Tags { diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/Tag.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/Tag.cs index 5f6ac203c0..80e267264c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/Tag.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/Tag.cs @@ -1,28 +1,28 @@ using JetBrains.Annotations; using System; using Volo.Abp; -using Volo.Abp.Auditing; -using Volo.Abp.Domain.Entities; +using Volo.Abp.Domain.Entities.Auditing; using Volo.Abp.MultiTenancy; namespace Volo.CmsKit.Tags { - public class Tag : BasicAggregateRoot, IMultiTenant, IHasCreationTime + public class Tag : FullAuditedAggregateRoot, IMultiTenant { + public string EntityType { get; set; } + public string Name { get; set; } public string ColorHex { get; set; } public Guid? TenantId { get; } - public DateTime CreationTime { get; } - protected Tag() { } - public Tag([NotNull] string name, [CanBeNull] string colorHex, Guid? tenantId = null) + public Tag([NotNull] string entityType, [NotNull] string name, [CanBeNull] string colorHex, Guid? tenantId = null) { + EntityType = Check.NotNullOrWhiteSpace(entityType, nameof(entityType), TagConsts.MaxEntityTypeLength); Name = Check.NotNullOrWhiteSpace(name, nameof(name), TagConsts.MaxNameLength); ColorHex = Check.Length(colorHex, nameof(colorHex), TagConsts.MaxColorHexLength); TenantId = tenantId; diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs index ed3f8df710..fe67914dc9 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs @@ -11,6 +11,7 @@ using Volo.Abp.Users.EntityFrameworkCore; using Volo.CmsKit.Contents; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Ratings; +using Volo.CmsKit.Tags; namespace Volo.CmsKit.EntityFrameworkCore { @@ -107,6 +108,31 @@ namespace Volo.CmsKit.EntityFrameworkCore b.HasIndex(x => new { x.TenantId, x.EntityType, x.EntityId }); }); + + builder.Entity(b => + { + b.ToTable(options.TablePrefix + "Tags", options.Schema); + + b.ConfigureByConvention(); + + b.Property(x => x.EntityType).IsRequired().HasMaxLength(TagConsts.MaxEntityTypeLength); + b.Property(x => x.Name).IsRequired().HasMaxLength(TagConsts.MaxNameLength); + b.Property(x => x.ColorHex).IsRequired().HasMaxLength(TagConsts.MaxColorHexLength); + + b.HasIndex(x => new { x.TenantId, x.Name }); + }); + + builder.Entity(b => + { + b.ToTable(options.TablePrefix + "EntityTags", options.Schema); + + b.ConfigureByConvention(); + + b.Property(x => x.EntityId).IsRequired(); + b.Property(x => x.TagId).IsRequired(); + + b.HasIndex(x => new { x.TenantId, x.EntityId, x.TagId }); + }); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitEntityFrameworkCoreModule.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitEntityFrameworkCoreModule.cs index 52ec478882..7e2057c6f0 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitEntityFrameworkCoreModule.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitEntityFrameworkCoreModule.cs @@ -6,6 +6,7 @@ using Volo.CmsKit.Comments; using Volo.CmsKit.Contents; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; +using Volo.CmsKit.Tags; using Volo.CmsKit.Users; namespace Volo.CmsKit.EntityFrameworkCore @@ -26,6 +27,8 @@ namespace Volo.CmsKit.EntityFrameworkCore options.AddRepository(); options.AddRepository(); options.AddRepository(); + options.AddRepository(); + options.AddRepository(); }); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityTags/EfCoreEntityTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreEntityTagRepository.cs similarity index 62% rename from modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityTags/EfCoreEntityTagRepository.cs rename to modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreEntityTagRepository.cs index 31663f8d31..cca61b802b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityTags/EfCoreEntityTagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreEntityTagRepository.cs @@ -1,14 +1,13 @@ using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; using Volo.CmsKit.EntityFrameworkCore; -using Volo.CmsKit.Tags; -namespace Volo.CmsKit.EntityTags +namespace Volo.CmsKit.Tags { - public class EfCoreEntityTagRepository : EfCoreRepository, IEntityTagRepository + public class EfCoreEntityTagRepository: EfCoreRepository, IEntityTagRepository { public EfCoreEntityTagRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) { } } -} +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs index dfd6a4e9a7..965cf917ec 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs @@ -5,7 +5,9 @@ using Volo.CmsKit.Comments; using Volo.CmsKit.Contents; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; +using Volo.CmsKit.Tags; using Volo.CmsKit.Users; +using Tag = MongoDB.Driver.Tag; namespace Volo.CmsKit.MongoDB { @@ -21,6 +23,10 @@ namespace Volo.CmsKit.MongoDB public IMongoCollection Ratings => Collection(); public IMongoCollection Contents => Collection(); + + public IMongoCollection Tags => Collection(); + + public IMongoCollection EntityTags => Collection(); protected override void CreateModel(IMongoModelBuilder modelBuilder) { diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs index c996dd9017..f208e5644c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs @@ -5,6 +5,7 @@ using Volo.CmsKit.Comments; using Volo.CmsKit.Contents; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; +using Volo.CmsKit.Tags; using Volo.CmsKit.Users; namespace Volo.CmsKit.MongoDB @@ -47,6 +48,16 @@ namespace Volo.CmsKit.MongoDB { x.CollectionName = CmsKitDbProperties.DbTablePrefix + "Contents"; }); + + builder.Entity(x => + { + x.CollectionName = CmsKitDbProperties.DbTablePrefix + "Tags"; + }); + + builder.Entity(x => + { + x.CollectionName = CmsKitDbProperties.DbTablePrefix + "EntityTags"; + }); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs index d6b7ce62e1..d86e727a09 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs @@ -8,9 +8,11 @@ using Volo.CmsKit.MongoDB.Comments; using Volo.CmsKit.MongoDB.Contents; using Volo.CmsKit.MongoDB.Ratings; using Volo.CmsKit.MongoDB.Reactions; +using Volo.CmsKit.MongoDB.Tags; using Volo.CmsKit.MongoDB.Users; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; +using Volo.CmsKit.Tags; using Volo.CmsKit.Users; namespace Volo.CmsKit.MongoDB @@ -31,6 +33,8 @@ namespace Volo.CmsKit.MongoDB options.AddRepository(); options.AddRepository(); options.AddRepository(); + options.AddRepository(); + options.AddRepository(); }); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs index d86c4ababf..5d16305567 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs @@ -5,7 +5,9 @@ using Volo.CmsKit.Comments; using Volo.CmsKit.Contents; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; +using Volo.CmsKit.Tags; using Volo.CmsKit.Users; +using Tag = MongoDB.Driver.Tag; namespace Volo.CmsKit.MongoDB { @@ -21,5 +23,9 @@ namespace Volo.CmsKit.MongoDB IMongoCollection Ratings { get; } IMongoCollection Contents { get; } + + IMongoCollection Tags { get; } + + IMongoCollection EntityTags { get; } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/EntityTags/MongoEntityTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoEntityTagRepository.cs similarity index 57% rename from modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/EntityTags/MongoEntityTagRepository.cs rename to modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoEntityTagRepository.cs index 23723a86df..5ac1a4b69c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/EntityTags/MongoEntityTagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoEntityTagRepository.cs @@ -1,14 +1,13 @@ using Volo.Abp.Domain.Repositories.MongoDB; using Volo.Abp.MongoDB; -using Volo.CmsKit.EntityTags; using Volo.CmsKit.Tags; -namespace Volo.CmsKit.MongoDB.EntityTags +namespace Volo.CmsKit.MongoDB.Tags { - public class MongoEntityTagRepository : MongoDbRepository, IEntityTagRepository + public class MongoEntityTagRepository: MongoDbRepository, IEntityTagRepository { public MongoEntityTagRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) { } } -} +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs index 6eaa507ee4..64118c78c9 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs @@ -1,10 +1,9 @@ using System; using Volo.Abp.Domain.Repositories.MongoDB; using Volo.Abp.MongoDB; -using Volo.CmsKit.MongoDB; using Volo.CmsKit.Tags; -namespace CmsKit.MongoDB.Tags +namespace Volo.CmsKit.MongoDB.Tags { public class MongoTagRepository : MongoDbRepository, ITagRepository { From b38084f0715752888b28b987a356645efe065236 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 23 Dec 2020 15:24:12 +0300 Subject: [PATCH 023/217] Resolve warnings. --- .../AuthorizationOptionsExtensions.cs | 6 ++-- .../Permissions/PermissionDefinition.cs | 16 ++++----- .../Permissions/PermissionGroupDefinition.cs | 10 +++--- .../Abp/BackgroundJobs/IAsyncBackgroundJob.cs | 4 +-- .../Volo/Abp/BackgroundJobs/IBackgroundJob.cs | 4 +-- .../BlobContainerFactoryExtensions.cs | 3 +- .../System/AbpStringExtensions.cs | 2 +- .../Generic/AbpCollectionExtensions.cs | 2 +- .../Volo/Abp/Reflection/TypeFinder.cs | 4 +-- .../FormattedStringValueExtracter.cs | 6 ++-- .../Volo/Abp/Data/DataSeedContext.cs | 6 ++-- ...mmonDbContextRegistrationOptionsBuilder.cs | 6 ++-- .../Volo/Abp/EventBus/IEventBus.cs | 4 +-- .../Abp/EventBus/IEventDataMayHaveTenantId.cs | 4 +-- .../Volo/Abp/Features/FeatureDefinition.cs | 4 +-- .../Abp/Features/FeatureGroupDefinition.cs | 8 ++--- .../Volo/Abp/Uow/UnitOfWorkFailedEventArgs.cs | 4 +-- .../AbpAutoMapperModule_Basic_Tests.cs | 4 +-- .../Volo/Abp/Uow/UnitOfWork_Events_Tests.cs | 34 +++++++++++++++---- 19 files changed, 75 insertions(+), 56 deletions(-) diff --git a/framework/src/Volo.Abp.Authorization/Microsoft/AspNetCore/Authorization/AuthorizationOptionsExtensions.cs b/framework/src/Volo.Abp.Authorization/Microsoft/AspNetCore/Authorization/AuthorizationOptionsExtensions.cs index 499c2431c5..516e842563 100644 --- a/framework/src/Volo.Abp.Authorization/Microsoft/AspNetCore/Authorization/AuthorizationOptionsExtensions.cs +++ b/framework/src/Volo.Abp.Authorization/Microsoft/AspNetCore/Authorization/AuthorizationOptionsExtensions.cs @@ -11,9 +11,9 @@ namespace Microsoft.AspNetCore.Authorization /// /// Gets all policies. - /// + /// /// IMPORTANT NOTE: Use this method carefully. - /// It relies on reflection to get all policies from a private field of the . + /// It relies on reflection to get all policies from a private field of the . /// This method may be removed in the future if internals of changes. /// /// @@ -23,4 +23,4 @@ namespace Microsoft.AspNetCore.Authorization return ((IDictionary) PolicyMapProperty.GetValue(options)).Keys.ToList(); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinition.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinition.cs index 602fdd9c50..38873fe1b8 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinition.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinition.cs @@ -54,7 +54,7 @@ namespace Volo.Abp.Authorization.Permissions /// /// Disabling a permission would be helpful to hide a related application /// functionality from users/clients. - /// + /// /// Default: true. /// public bool IsEnabled { get; set; } @@ -64,8 +64,8 @@ namespace Volo.Abp.Authorization.Permissions /// /// Name of the property /// - /// Returns the value in the dictionary by given . - /// Returns null if given is not present in the dictionary. + /// Returns the value in the dictionary by given . + /// Returns null if given is not present in the dictionary. /// public object this[string name] { @@ -74,7 +74,7 @@ namespace Volo.Abp.Authorization.Permissions } protected internal PermissionDefinition( - [NotNull] string name, + [NotNull] string name, ILocalizableString displayName = null, MultiTenancySides multiTenancySide = MultiTenancySides.Both, bool isEnabled = true) @@ -90,14 +90,14 @@ namespace Volo.Abp.Authorization.Permissions } public virtual PermissionDefinition AddChild( - [NotNull] string name, + [NotNull] string name, ILocalizableString displayName = null, MultiTenancySides multiTenancySide = MultiTenancySides.Both, bool isEnabled = true) { var child = new PermissionDefinition( - name, - displayName, + name, + displayName, multiTenancySide, isEnabled) { @@ -138,4 +138,4 @@ namespace Volo.Abp.Authorization.Permissions return $"[{nameof(PermissionDefinition)} {Name}]"; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionGroupDefinition.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionGroupDefinition.cs index 5038e8e064..6d3a937a94 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionGroupDefinition.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionGroupDefinition.cs @@ -36,8 +36,8 @@ namespace Volo.Abp.Authorization.Permissions /// /// Name of the property /// - /// Returns the value in the dictionary by given . - /// Returns null if given is not present in the dictionary. + /// Returns the value in the dictionary by given . + /// Returns null if given is not present in the dictionary. /// public object this[string name] { @@ -46,7 +46,7 @@ namespace Volo.Abp.Authorization.Permissions } protected internal PermissionGroupDefinition( - string name, + string name, ILocalizableString displayName = null, MultiTenancySides multiTenancySide = MultiTenancySides.Both) { @@ -59,7 +59,7 @@ namespace Volo.Abp.Authorization.Permissions } public virtual PermissionDefinition AddPermission( - string name, + string name, ILocalizableString displayName = null, MultiTenancySides multiTenancySide = MultiTenancySides.Both, bool isEnabled = true) @@ -131,4 +131,4 @@ namespace Volo.Abp.Authorization.Permissions return null; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/IAsyncBackgroundJob.cs b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/IAsyncBackgroundJob.cs index 262d95d35b..18f38128db 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/IAsyncBackgroundJob.cs +++ b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/IAsyncBackgroundJob.cs @@ -8,9 +8,9 @@ namespace Volo.Abp.BackgroundJobs public interface IAsyncBackgroundJob { /// - /// Executes the job with the . + /// Executes the job with the . /// /// Job arguments. Task ExecuteAsync(TArgs args); } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/IBackgroundJob.cs b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/IBackgroundJob.cs index e7c942ec4c..94b75f4c91 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/IBackgroundJob.cs +++ b/framework/src/Volo.Abp.BackgroundJobs.Abstractions/Volo/Abp/BackgroundJobs/IBackgroundJob.cs @@ -6,9 +6,9 @@ public interface IBackgroundJob { /// - /// Executes the job with the . + /// Executes the job with the . /// /// Job arguments. void Execute(TArgs args); } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerFactoryExtensions.cs b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerFactoryExtensions.cs index 1dc51a2a72..e2d5ff25e9 100644 --- a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerFactoryExtensions.cs +++ b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerFactoryExtensions.cs @@ -6,7 +6,6 @@ /// Gets a named container. /// /// The blob container manager - /// Cancellation token /// /// The container object. /// @@ -19,4 +18,4 @@ ); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Core/System/AbpStringExtensions.cs b/framework/src/Volo.Abp.Core/System/AbpStringExtensions.cs index 76ae06a5e0..f272484611 100644 --- a/framework/src/Volo.Abp.Core/System/AbpStringExtensions.cs +++ b/framework/src/Volo.Abp.Core/System/AbpStringExtensions.cs @@ -88,7 +88,7 @@ namespace System /// Gets index of nth occurrence of a char in a string. /// /// source string to be searched - /// Char to search in + /// Char to search in /// Count of the occurrence public static int NthIndexOf(this string str, char c, int n) { diff --git a/framework/src/Volo.Abp.Core/System/Collections/Generic/AbpCollectionExtensions.cs b/framework/src/Volo.Abp.Core/System/Collections/Generic/AbpCollectionExtensions.cs index e014ee9e21..f55bdd3bc8 100644 --- a/framework/src/Volo.Abp.Core/System/Collections/Generic/AbpCollectionExtensions.cs +++ b/framework/src/Volo.Abp.Core/System/Collections/Generic/AbpCollectionExtensions.cs @@ -107,7 +107,7 @@ namespace System.Collections.Generic } /// - /// Removes all items from the collection those satisfy the given . + /// Removes all items from the collection. /// /// Type of the items in the collection /// The collection diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Reflection/TypeFinder.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Reflection/TypeFinder.cs index 6576f08318..71ea895fd2 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Reflection/TypeFinder.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Reflection/TypeFinder.cs @@ -37,7 +37,7 @@ namespace Volo.Abp.Reflection allTypes.AddRange(typesInThisAssembly.Where(type => type != null)); } - catch (Exception ex) + catch { //TODO: Trigger a global event? } @@ -46,4 +46,4 @@ namespace Volo.Abp.Reflection return allTypes; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Text/Formatting/FormattedStringValueExtracter.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Text/Formatting/FormattedStringValueExtracter.cs index 6d21fc2a73..00d25681e4 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Text/Formatting/FormattedStringValueExtracter.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Text/Formatting/FormattedStringValueExtracter.cs @@ -11,7 +11,7 @@ namespace Volo.Abp.Text.Formatting /// /// /// Say that str is "My name is Neo." and format is "My name is {name}.". - /// Then Extract method gets "Neo" as "name". + /// Then Extract method gets "Neo" as "name". /// public class FormattedStringValueExtracter { @@ -84,7 +84,7 @@ namespace Volo.Abp.Text.Formatting } /// - /// Checks if given fits to given . + /// Checks if given fits to given . /// Also gets extracted values. /// /// String including dynamic values @@ -127,4 +127,4 @@ namespace Volo.Abp.Text.Formatting } } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Data/Volo/Abp/Data/DataSeedContext.cs b/framework/src/Volo.Abp.Data/Volo/Abp/Data/DataSeedContext.cs index 6cda2f6e39..6c470312d8 100644 --- a/framework/src/Volo.Abp.Data/Volo/Abp/Data/DataSeedContext.cs +++ b/framework/src/Volo.Abp.Data/Volo/Abp/Data/DataSeedContext.cs @@ -13,8 +13,8 @@ namespace Volo.Abp.Data /// /// Name of the property /// - /// Returns the value in the dictionary by given . - /// Returns null if given is not present in the dictionary. + /// Returns the value in the dictionary by given . + /// Returns null if given is not present in the dictionary. /// [CanBeNull] public object this[string name] @@ -45,4 +45,4 @@ namespace Volo.Abp.Data return this; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/DependencyInjection/IAbpCommonDbContextRegistrationOptionsBuilder.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/DependencyInjection/IAbpCommonDbContextRegistrationOptionsBuilder.cs index 368fa2dc96..53d2f142cd 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/DependencyInjection/IAbpCommonDbContextRegistrationOptionsBuilder.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/DependencyInjection/IAbpCommonDbContextRegistrationOptionsBuilder.cs @@ -9,11 +9,11 @@ namespace Volo.Abp.DependencyInjection IServiceCollection Services { get; } /// - /// Registers default repositories for this DbContext. + /// Registers default repositories for this DbContext. /// /// /// Registers repositories only for aggregate root entities by default. - /// set to true to include all entities. + /// set to true to include all entities. /// IAbpCommonDbContextRegistrationOptionsBuilder AddDefaultRepositories(bool includeAllEntities = false); @@ -67,4 +67,4 @@ namespace Volo.Abp.DependencyInjection /// The DbContext type to be replaced IAbpCommonDbContextRegistrationOptionsBuilder ReplaceDbContext(Type otherDbContextType); } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/IEventBus.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/IEventBus.cs index 1d93c05580..d28b3ab2a4 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/IEventBus.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/IEventBus.cs @@ -33,7 +33,7 @@ namespace Volo.Abp.EventBus /// /// Registers to an event. - /// A new instance of object is created for every event occurrence. + /// A new instance of object is created for every event occurrence. /// /// Event type /// Type of the event handler @@ -116,4 +116,4 @@ namespace Volo.Abp.EventBus /// Event type void UnsubscribeAll(Type eventType); } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/IEventDataMayHaveTenantId.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/IEventDataMayHaveTenantId.cs index 72a8c753cd..9ff8b89cd8 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/IEventDataMayHaveTenantId.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/IEventDataMayHaveTenantId.cs @@ -16,8 +16,8 @@ namespace Volo.Abp.EventBus { /// /// Returns true if this event data has a Tenant Id information. - /// If so, it should set the our parameter. - /// Otherwise, the our parameter value should not be informative + /// If so, it should set the our parameter. + /// Otherwise, the our parameter value should not be informative /// (it will be null as expected, but doesn't indicate a tenant with null tenant id). /// /// diff --git a/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureDefinition.cs b/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureDefinition.cs index b2b11f0a18..609f42acd2 100644 --- a/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureDefinition.cs +++ b/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureDefinition.cs @@ -69,8 +69,8 @@ namespace Volo.Abp.Features /// /// Name of the property /// - /// Returns the value in the dictionary by given . - /// Returns null if given is not present in the dictionary. + /// Returns the value in the dictionary by given . + /// Returns null if given is not present in the dictionary. /// [CanBeNull] public object this[string name] diff --git a/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureGroupDefinition.cs b/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureGroupDefinition.cs index cba38070a7..b4dd98eb5b 100644 --- a/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureGroupDefinition.cs +++ b/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureGroupDefinition.cs @@ -29,8 +29,8 @@ namespace Volo.Abp.Features /// /// Name of the property /// - /// Returns the value in the dictionary by given . - /// Returns null if given is not present in the dictionary. + /// Returns the value in the dictionary by given . + /// Returns null if given is not present in the dictionary. /// public object this[string name] { @@ -39,7 +39,7 @@ namespace Volo.Abp.Features } protected internal FeatureGroupDefinition( - string name, + string name, ILocalizableString displayName = null) { Name = name; @@ -108,4 +108,4 @@ namespace Volo.Abp.Features return $"[{nameof(FeatureGroupDefinition)} {Name}]"; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkFailedEventArgs.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkFailedEventArgs.cs index df867c2320..ed225ccc58 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkFailedEventArgs.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkFailedEventArgs.cs @@ -9,8 +9,8 @@ namespace Volo.Abp.Uow public class UnitOfWorkFailedEventArgs : UnitOfWorkEventArgs { /// - /// Exception that caused failure. This is set only if an error occurred during . - /// Can be null if there is no exception, but is not called. + /// Exception that caused failure. This is set only if an error occurred during . + /// Can be null if there is no exception, but is not called. /// Can be null if another exception occurred during the UOW. /// [CanBeNull] diff --git a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AbpAutoMapperModule_Basic_Tests.cs b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AbpAutoMapperModule_Basic_Tests.cs index 3ac2246dcc..ea70649350 100644 --- a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AbpAutoMapperModule_Basic_Tests.cs +++ b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AbpAutoMapperModule_Basic_Tests.cs @@ -38,12 +38,12 @@ namespace Volo.Abp.AutoMapper } //[Fact] TODO: Disabled because of https://github.com/AutoMapper/AutoMapper/pull/2379#issuecomment-355899664 - public void Should_Not_Map_Objects_With_AutoMap_Attributes() + /*public void Should_Not_Map_Objects_With_AutoMap_Attributes() { Assert.ThrowsAny(() => { _objectMapper.Map(new MyEntity {Number = 42}); }); - } + }*/ } } diff --git a/framework/test/Volo.Abp.Uow.Tests/Volo/Abp/Uow/UnitOfWork_Events_Tests.cs b/framework/test/Volo.Abp.Uow.Tests/Volo/Abp/Uow/UnitOfWork_Events_Tests.cs index bf120d2e33..8fd3d68b18 100644 --- a/framework/test/Volo.Abp.Uow.Tests/Volo/Abp/Uow/UnitOfWork_Events_Tests.cs +++ b/framework/test/Volo.Abp.Uow.Tests/Volo/Abp/Uow/UnitOfWork_Events_Tests.cs @@ -26,7 +26,7 @@ namespace Volo.Abp.Uow { uow.OnCompleted(() => { - completed = true; + completed = true; return Task.CompletedTask; }); @@ -50,7 +50,12 @@ namespace Volo.Abp.Uow { using (var childUow = _unitOfWorkManager.Begin()) { - childUow.OnCompleted(async () => completed = true); + childUow.OnCompleted(() => + { + completed = true; + return Task.CompletedTask; + }); + uow.Disposed += (sender, args) => disposed = true; await childUow.CompleteAsync(); @@ -80,9 +85,14 @@ namespace Volo.Abp.Uow using (var uow = _unitOfWorkManager.Begin()) { - uow.OnCompleted(async () => completed = true); - uow.Failed += (sender, args) => failed = true; - uow.Disposed += (sender, args) => disposed = true; + uow.OnCompleted(() => + { + completed = true; + return Task.CompletedTask; + }); + + uow.Failed += (_, _) => failed = true; + uow.Disposed += (_, _) => disposed = true; } completed.ShouldBeFalse(); @@ -101,7 +111,12 @@ namespace Volo.Abp.Uow { using (var uow = _unitOfWorkManager.Begin()) { - uow.OnCompleted(async () => completed = true); + uow.OnCompleted(() => + { + completed = true; + return Task.CompletedTask; + }); + uow.Failed += (sender, args) => failed = true; uow.Disposed += (sender, args) => disposed = true; @@ -125,7 +140,12 @@ namespace Volo.Abp.Uow using (var uow = _unitOfWorkManager.Begin()) { - uow.OnCompleted(async () => completed = true); + uow.OnCompleted(() => + { + completed = true; + return Task.CompletedTask; + }); + uow.Failed += (sender, args) => { failed = true; args.IsRolledback.ShouldBeTrue(); }; uow.Disposed += (sender, args) => disposed = true; From 15c48109028fb8536f41e82b6cc91f345ae44410 Mon Sep 17 00:00:00 2001 From: enisn Date: Wed, 23 Dec 2020 15:57:42 +0300 Subject: [PATCH 024/217] Add domain & repositories of Tags --- .../Volo/CmsKit/Contents/Content.cs | 1 - .../Volo/CmsKit/Tags/ITagManager.cs | 32 ++++++++ .../Volo/CmsKit/Tags/ITagRepository.cs | 22 ++++- .../Volo/CmsKit/Tags/Tag.cs | 32 +++++--- .../Volo/CmsKit/Tags/TagManager.cs | 80 +++++++++++++++++++ .../CmsKitDbContextModelCreatingExtensions.cs | 2 +- .../Volo/CmsKit/Tags/EfCoreTagRepository.cs | 46 ++++++++++- .../CmsKit/MongoDB/Tags/MongoTagRepository.cs | 46 ++++++++++- 8 files changed, 247 insertions(+), 14 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagManager.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/Content.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/Content.cs index 229ad037b0..2c3cd28593 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/Content.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/Content.cs @@ -29,6 +29,5 @@ namespace Volo.CmsKit.Contents TenantId = tenantId; } - } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagManager.cs new file mode 100644 index 0000000000..25fccfb474 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagManager.cs @@ -0,0 +1,32 @@ +using JetBrains.Annotations; +using System; +using System.Threading; +using System.Threading.Tasks; +using Volo.Abp.Domain.Services; +using Volo.CmsKit.Tags; + +namespace Volo.CmsKit.Domain.Volo.CmsKit.Tags +{ + public interface ITagManager : IDomainService + { + Task InsertAsync( + [NotNull] string entityType, + [NotNull] string name, + [CanBeNull] string hexColor, + Guid? tenantId = null, + CancellationToken cancellationToken = default); + + Task UpdateAsync( + Guid id, + [NotNull] string name, + [CanBeNull] string hexColor, + CancellationToken cancellationToken = default); + + Task GetOrAddAsync( + [NotNull] string entityType, + [NotNull] string name, + [CanBeNull] string hexColor = null, + Guid? tenantId = null, + CancellationToken cancellationToken = default); + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs index 2a619887c1..8cfeee9551 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs @@ -1,9 +1,29 @@ -using System; +using JetBrains.Annotations; +using System; +using System.Threading; +using System.Threading.Tasks; using Volo.Abp.Domain.Repositories; namespace Volo.CmsKit.Tags { public interface ITagRepository : IBasicRepository { + Task GetAsync( + [NotNull] string entityType, + [NotNull] string name, + Guid? tenantId, + CancellationToken cancellationToken = default); + + Task AnyAsync( + [NotNull] string entityType, + [NotNull] string name, + Guid? tenantId = null, + CancellationToken cancellationToken = default); + + Task FindAsync( + [NotNull] string entityType, + [NotNull] string name, + Guid? tenantId, + CancellationToken cancellationToken = default); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/Tag.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/Tag.cs index 80e267264c..a13ea70ba0 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/Tag.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/Tag.cs @@ -9,23 +9,37 @@ namespace Volo.CmsKit.Tags public class Tag : FullAuditedAggregateRoot, IMultiTenant { public string EntityType { get; set; } - - public string Name { get; set; } - - public string ColorHex { get; set; } - + + public string Name { get; protected set; } + + public string HexColor { get; protected set; } + public Guid? TenantId { get; } - + protected Tag() { } - public Tag([NotNull] string entityType, [NotNull] string name, [CanBeNull] string colorHex, Guid? tenantId = null) + public Tag( + [NotNull] string entityType, + [NotNull] string name, + [CanBeNull] string hexColor, + Guid? tenantId = null) { EntityType = Check.NotNullOrWhiteSpace(entityType, nameof(entityType), TagConsts.MaxEntityTypeLength); - Name = Check.NotNullOrWhiteSpace(name, nameof(name), TagConsts.MaxNameLength); - ColorHex = Check.Length(colorHex, nameof(colorHex), TagConsts.MaxColorHexLength); + SetName(name); + SetHexColor(hexColor); TenantId = tenantId; } + + public void SetName(string name) + { + Name = Check.NotNullOrWhiteSpace(name, nameof(name), TagConsts.MaxNameLength); + } + + public void SetHexColor(string hexColor) + { + HexColor = Check.Length(hexColor, nameof(hexColor), TagConsts.MaxColorHexLength); + } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs new file mode 100644 index 0000000000..0abdbeb969 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs @@ -0,0 +1,80 @@ +using JetBrains.Annotations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Domain.Services; +using Volo.CmsKit.Tags; + +namespace Volo.CmsKit.Domain.Volo.CmsKit.Tags +{ + public class TagManager : DomainService, ITagManager + { + private readonly ITagRepository _tagRepository; + + public TagManager(ITagRepository tagRepository) + { + _tagRepository = tagRepository; + } + + public async Task GetOrAddAsync( + [NotNull] string entityType, + [NotNull] string name, + [CanBeNull] string hexColor = null, + Guid? tenantId = null, + CancellationToken cancellationToken = default) + { + var entity = await _tagRepository.FindAsync(entityType, name, tenantId, cancellationToken); + + if (entity == null) + { + entity = await InsertAsync(entityType, name, hexColor, tenantId, cancellationToken); + } + + return entity; + } + + public async Task InsertAsync( + [NotNull] string entityType, + [NotNull] string name, + [CanBeNull] string hexColor, + Guid? tenantId = null, + CancellationToken cancellationToken = default) + { + if (await _tagRepository.AnyAsync(entityType, name, tenantId, cancellationToken)) + { + throw new BusinessException(message: "Tag already exist!"); // Already Exist + } + + return await _tagRepository.InsertAsync( + new Tag( + entityType, + name, + hexColor, + tenantId), + cancellationToken: cancellationToken); + } + + public async Task UpdateAsync( + Guid id, + [NotNull] string name, + [CanBeNull] string hexColor, + CancellationToken cancellationToken = default) + { + var entity = await _tagRepository.GetAsync(id, cancellationToken: cancellationToken); + + entity.SetName(name); + entity.SetHexColor(hexColor); + + if (await _tagRepository.AnyAsync(entity.EntityType, name, entity.TenantId, cancellationToken)) + { + throw new BusinessException(message: "Tag already exist!"); // Already Exist + } + + return await _tagRepository.UpdateAsync(entity); + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs index fe67914dc9..c9c6bbca44 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs @@ -117,7 +117,7 @@ namespace Volo.CmsKit.EntityFrameworkCore b.Property(x => x.EntityType).IsRequired().HasMaxLength(TagConsts.MaxEntityTypeLength); b.Property(x => x.Name).IsRequired().HasMaxLength(TagConsts.MaxNameLength); - b.Property(x => x.ColorHex).IsRequired().HasMaxLength(TagConsts.MaxColorHexLength); + b.Property(x => x.HexColor).IsRequired().HasMaxLength(TagConsts.MaxColorHexLength); b.HasIndex(x => new { x.TenantId, x.Name }); }); diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs index 0021281fa5..8a530ba705 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs @@ -1,4 +1,9 @@ -using System; +using JetBrains.Annotations; +using Microsoft.EntityFrameworkCore; +using System; +using System.Threading; +using System.Threading.Tasks; +using Volo.Abp.Domain.Repositories; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; using Volo.CmsKit.EntityFrameworkCore; @@ -10,5 +15,44 @@ namespace Volo.CmsKit.Tags public EfCoreTagRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) { } + + public Task AnyAsync( + [NotNull] string entityType, + [NotNull] string name, + Guid? tenantId, + CancellationToken cancellationToken = default) + { + return DbSet.AnyAsync(x => + x.EntityType == entityType && + x.Name == name && + x.TenantId == tenantId, + cancellationToken); + } + + public Task GetAsync( + [NotNull] string entityType, + [NotNull] string name, + Guid? tenantId, + CancellationToken cancellationToken = default) + { + return GetAsync(x => + x.EntityType == entityType && + x.Name == name && + x.TenantId == tenantId, + cancellationToken: cancellationToken); + } + + public Task FindAsync( + [NotNull] string entityType, + [NotNull] string name, + Guid? tenantId, + CancellationToken cancellationToken = default) + { + return FindAsync(x => + x.EntityType == entityType && + x.Name == name && + x.TenantId == tenantId, + cancellationToken: cancellationToken); + } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs index 64118c78c9..9d4644e47b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs @@ -1,4 +1,8 @@ -using System; +using JetBrains.Annotations; +using MongoDB.Driver.Linq; +using System; +using System.Threading; +using System.Threading.Tasks; using Volo.Abp.Domain.Repositories.MongoDB; using Volo.Abp.MongoDB; using Volo.CmsKit.Tags; @@ -10,5 +14,45 @@ namespace Volo.CmsKit.MongoDB.Tags public MongoTagRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) { } + + public Task AnyAsync( + [NotNull] string entityType, + [NotNull] string name, + Guid? tenantId, + CancellationToken cancellationToken = default) + { + return GetMongoQueryable() + .AnyAsync(x => + x.EntityType == entityType && + x.Name == name && + x.TenantId == tenantId, + cancellationToken); + } + + public Task GetAsync( + [NotNull] string entityType, + [NotNull] string name, + Guid? tenantId, + CancellationToken cancellationToken = default) + { + return GetAsync(x => + x.EntityType == entityType && + x.Name == name && + x.TenantId == tenantId, + cancellationToken: cancellationToken); + } + + public Task FindAsync( + [NotNull] string entityType, + [NotNull] string name, + Guid? tenantId, + CancellationToken cancellationToken = default) + { + return FindAsync(x => + x.EntityType == entityType && + x.Name == name && + x.TenantId == tenantId, + cancellationToken: cancellationToken); + } } } From 1f586bc9694d460981b5d24a3618a586dfa62fc2 Mon Sep 17 00:00:00 2001 From: enisn Date: Wed, 23 Dec 2020 17:59:44 +0300 Subject: [PATCH 025/217] Fix namespaces for CmsKit Tags --- .../src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagManager.cs | 2 +- .../src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagManager.cs index 25fccfb474..b1562a341d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagManager.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagManager.cs @@ -5,7 +5,7 @@ using System.Threading.Tasks; using Volo.Abp.Domain.Services; using Volo.CmsKit.Tags; -namespace Volo.CmsKit.Domain.Volo.CmsKit.Tags +namespace Volo.CmsKit.Tags { public interface ITagManager : IDomainService { diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs index 0abdbeb969..c62317cd64 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs @@ -1,15 +1,11 @@ using JetBrains.Annotations; using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using System.Threading; using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.Domain.Services; -using Volo.CmsKit.Tags; -namespace Volo.CmsKit.Domain.Volo.CmsKit.Tags +namespace Volo.CmsKit.Tags { public class TagManager : DomainService, ITagManager { From a407b312e25e73af7d5d8177bd5fa97ec6bd3422 Mon Sep 17 00:00:00 2001 From: enisn Date: Wed, 23 Dec 2020 18:18:27 +0300 Subject: [PATCH 026/217] Add missing key to EntityTag for CmsKit --- .../CmsKitDbContextModelCreatingExtensions.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs index c9c6bbca44..f7cdb5b59e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs @@ -127,6 +127,8 @@ namespace Volo.CmsKit.EntityFrameworkCore b.ToTable(options.TablePrefix + "EntityTags", options.Schema); b.ConfigureByConvention(); + + b.HasKey(x => new { x.TenantId, x.EntityId, x.TagId }); b.Property(x => x.EntityId).IsRequired(); b.Property(x => x.TagId).IsRequired(); From 8f3c527126e6c5e89bf9c96a65910807bac8f6bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 23 Dec 2020 20:14:13 +0300 Subject: [PATCH 027/217] Use async methods in the mongo repo. --- .../Repositories/MongoDB/MongoDbRepository.cs | 86 +++++++++++-------- .../MongoDbCoreRepositoryExtensions.cs | 24 +++++- 2 files changed, 74 insertions(+), 36 deletions(-) diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs index 52b78eb7a3..ab0c063191 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs @@ -114,28 +114,33 @@ namespace Volo.Abp.Domain.Repositories.MongoDB public override async Task InsertManyAsync(IEnumerable entities, bool autoSave = false, CancellationToken cancellationToken = default) { - foreach (var entity in entities) + var entityArray = entities.ToArray(); + + foreach (var entity in entityArray) { await ApplyAbpConceptsForAddedEntityAsync(entity); } + var dbContext = await GetDbContextAsync(GetCancellationToken(cancellationToken)); + var collection = dbContext.Collection(); + if (BulkOperationProvider != null) { - await BulkOperationProvider.InsertManyAsync(this, entities, SessionHandle, autoSave, cancellationToken); + await BulkOperationProvider.InsertManyAsync(this, entityArray, dbContext.SessionHandle, autoSave, cancellationToken); return; } - if (SessionHandle != null) + if (dbContext.SessionHandle != null) { - await Collection.InsertManyAsync( - SessionHandle, - entities, + await collection.InsertManyAsync( + dbContext.SessionHandle, + entityArray, cancellationToken: cancellationToken); } else { - await Collection.InsertManyAsync( - entities, + await collection.InsertManyAsync( + entityArray, cancellationToken: cancellationToken); } } @@ -193,12 +198,13 @@ namespace Volo.Abp.Domain.Repositories.MongoDB public override async Task UpdateManyAsync(IEnumerable entities, bool autoSave = false, CancellationToken cancellationToken = default) { - var isSoftDeleteEntity = typeof(ISoftDelete).IsAssignableFrom(typeof(TEntity)); + var entityArray = entities.ToArray(); - foreach (var entity in entities) + foreach (var entity in entityArray) { SetModificationAuditProperties(entity); + var isSoftDeleteEntity = typeof(ISoftDelete).IsAssignableFrom(typeof(TEntity)); if (isSoftDeleteEntity) { SetDeletionAuditProperties(entity); @@ -214,31 +220,34 @@ namespace Volo.Abp.Domain.Repositories.MongoDB SetNewConcurrencyStamp(entity); } + cancellationToken = GetCancellationToken(cancellationToken); + var dbContext = await GetDbContextAsync(cancellationToken); + if (BulkOperationProvider != null) { - await BulkOperationProvider.UpdateManyAsync(this, entities, SessionHandle, autoSave, cancellationToken); + await BulkOperationProvider.UpdateManyAsync(this, entityArray, dbContext.SessionHandle, autoSave, cancellationToken); return; } - var entitiesCount = entities.Count(); BulkWriteResult result; List> replaceRequests = new List>(); - foreach (var entity in entities) + foreach (var entity in entityArray) { replaceRequests.Add(new ReplaceOneModel(CreateEntityFilter(entity), entity)); } - if (SessionHandle != null) + var collection = dbContext.Collection(); + if (dbContext.SessionHandle != null) { - result = await Collection.BulkWriteAsync(SessionHandle, replaceRequests); + result = await collection.BulkWriteAsync(dbContext.SessionHandle, replaceRequests, cancellationToken: cancellationToken); } else { - result = await Collection.BulkWriteAsync(replaceRequests); + result = await collection.BulkWriteAsync(replaceRequests, cancellationToken: cancellationToken); } - if (result.MatchedCount < entitiesCount) + if (result.MatchedCount < entityArray.Length) { ThrowOptimisticConcurrencyException(); } @@ -315,35 +324,40 @@ namespace Volo.Abp.Domain.Repositories.MongoDB bool autoSave = false, CancellationToken cancellationToken = default) { - foreach (var entity in entities) + var entityArray = entities.ToArray(); + + foreach (var entity in entityArray) { await ApplyAbpConceptsForDeletedEntityAsync(entity); - var oldConcurrencyStamp = SetNewConcurrencyStamp(entity); + SetNewConcurrencyStamp(entity); } + var dbContext = await GetDbContextAsync(GetCancellationToken(cancellationToken)); + var collection = dbContext.Collection(); + if (BulkOperationProvider != null) { - await BulkOperationProvider.DeleteManyAsync(this, entities, SessionHandle, autoSave, cancellationToken); + await BulkOperationProvider.DeleteManyAsync(this, entityArray, dbContext.SessionHandle, autoSave, cancellationToken); return; } - var entitiesCount = entities.Count(); + var entitiesCount = entityArray.Count(); if (typeof(ISoftDelete).IsAssignableFrom(typeof(TEntity))) { UpdateResult updateResult; - if (SessionHandle != null) + if (dbContext.SessionHandle != null) { - updateResult = await Collection.UpdateManyAsync( - SessionHandle, - CreateEntitiesFilter(entities), + updateResult = await collection.UpdateManyAsync( + dbContext.SessionHandle, + CreateEntitiesFilter(entityArray), Builders.Update.Set(x => ((ISoftDelete)x).IsDeleted, true) ); } else { - updateResult = await Collection.UpdateManyAsync( - CreateEntitiesFilter(entities), + updateResult = await collection.UpdateManyAsync( + CreateEntitiesFilter(entityArray), Builders.Update.Set(x => ((ISoftDelete)x).IsDeleted, true) ); } @@ -356,17 +370,17 @@ namespace Volo.Abp.Domain.Repositories.MongoDB else { DeleteResult deleteResult; - if (SessionHandle != null) + if (dbContext.SessionHandle != null) { - deleteResult = await Collection.DeleteManyAsync( - SessionHandle, - CreateEntitiesFilter(entities) + deleteResult = await collection.DeleteManyAsync( + dbContext.SessionHandle, + CreateEntitiesFilter(entityArray) ); } else { - deleteResult = await Collection.DeleteManyAsync( - CreateEntitiesFilter(entities) + deleteResult = await collection.DeleteManyAsync( + CreateEntitiesFilter(entityArray) ); } @@ -689,9 +703,11 @@ namespace Volo.Abp.Domain.Repositories.MongoDB public virtual async Task DeleteManyAsync([NotNull] IEnumerable ids, bool autoSave = false, CancellationToken cancellationToken = default) { - var entities = await GetMongoQueryable() + cancellationToken = GetCancellationToken(cancellationToken); + + var entities = await (await GetMongoQueryableAsync(cancellationToken)) .Where(x => ids.Contains(x.Id)) - .ToListAsync(GetCancellationToken(cancellationToken)); + .ToListAsync(cancellationToken); await DeleteManyAsync(entities, autoSave, cancellationToken); } diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDbCoreRepositoryExtensions.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDbCoreRepositoryExtensions.cs index 12da0afaa2..ff367dc554 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDbCoreRepositoryExtensions.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDbCoreRepositoryExtensions.cs @@ -1,4 +1,5 @@ using System; +using System.Threading.Tasks; using MongoDB.Driver; using MongoDB.Driver.Linq; using Volo.Abp.Domain.Entities; @@ -8,24 +9,45 @@ namespace Volo.Abp.Domain.Repositories { public static class MongoDbCoreRepositoryExtensions { + [Obsolete("Use GetDatabaseAsync method.")] public static IMongoDatabase GetDatabase(this IBasicRepository repository) where TEntity : class, IEntity { return repository.ToMongoDbRepository().Database; } + public static Task GetDatabaseAsync(this IBasicRepository repository) + where TEntity : class, IEntity + { + return repository.ToMongoDbRepository().GetDatabaseAsync(); + } + + [Obsolete("Use GetCollection method.")] public static IMongoCollection GetCollection(this IBasicRepository repository) where TEntity : class, IEntity { return repository.ToMongoDbRepository().Collection; } + public static Task> GetCollectionAsync(this IBasicRepository repository) + where TEntity : class, IEntity + { + return repository.ToMongoDbRepository().GetCollectionAsync(); + } + + [Obsolete("Use GetMongoQueryableAsync method.")] public static IMongoQueryable GetMongoQueryable(this IBasicRepository repository) where TEntity : class, IEntity { return repository.ToMongoDbRepository().GetMongoQueryable(); } + public static Task> GetMongoQueryableAsync(this IBasicRepository repository) + where TEntity : class, IEntity + { + return repository.ToMongoDbRepository().GetMongoQueryableAsync(); + } + public static IMongoDbRepository ToMongoDbRepository(this IBasicRepository repository) where TEntity : class, IEntity { @@ -38,4 +60,4 @@ namespace Volo.Abp.Domain.Repositories return mongoDbRepository; } } -} \ No newline at end of file +} From ac652f2a1f03e09c59d24a740c3a00675cd585e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 23 Dec 2020 20:20:12 +0300 Subject: [PATCH 028/217] Fix sync usages. --- .../Abp/Application/Services/ReadOnlyAppService.cs | 4 ++-- .../Abp/TestApp/EntityFrameworkCore/CityRepository.cs | 4 ++-- .../TestApp/EntityFrameworkCore/PersonRepository.cs | 4 ++-- .../MongoDbAsyncQueryableProvider_Tests.cs | 4 ++-- .../Volo/Abp/TestApp/MongoDb/CityRepository.cs | 4 ++-- .../Abp/TestApp/Testing/Repository_Queryable_Tests.cs | 10 ++++------ 6 files changed, 14 insertions(+), 16 deletions(-) diff --git a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ReadOnlyAppService.cs b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ReadOnlyAppService.cs index c585b2ac38..da3f386fd9 100644 --- a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ReadOnlyAppService.cs +++ b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ReadOnlyAppService.cs @@ -38,7 +38,7 @@ namespace Volo.Abp.Application.Services where TGetOutputDto : IEntityDto where TGetListOutputDto : IEntityDto { - protected new IReadOnlyRepository Repository { get; } + protected IReadOnlyRepository Repository { get; } protected ReadOnlyAppService(IReadOnlyRepository repository) : base(repository) @@ -46,7 +46,7 @@ namespace Volo.Abp.Application.Services Repository = repository; } - protected async override Task GetEntityByIdAsync(TKey id) + protected override async Task GetEntityByIdAsync(TKey id) { return await Repository.GetAsync(id); } diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/CityRepository.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/CityRepository.cs index 027f54a03a..cd85cbcb5a 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/CityRepository.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/CityRepository.cs @@ -11,7 +11,7 @@ namespace Volo.Abp.TestApp.EntityFrameworkCore { public class CityRepository : EfCoreRepository, ICityRepository { - public CityRepository(IDbContextProvider dbContextProvider) + public CityRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) { } @@ -24,7 +24,7 @@ namespace Volo.Abp.TestApp.EntityFrameworkCore public async Task> GetPeopleInTheCityAsync(string cityName) { var city = await FindByNameAsync(cityName); - return await DbContext.People.Where(p => p.CityId == city.Id).ToListAsync(); + return await (await GetDbContextAsync()).People.Where(p => p.CityId == city.Id).ToListAsync(); } } } diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/PersonRepository.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/PersonRepository.cs index ab8c1920a7..6413140bf1 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/PersonRepository.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/PersonRepository.cs @@ -18,7 +18,7 @@ namespace Volo.Abp.TestApp.EntityFrameworkCore public async Task GetViewAsync(string name) { - return await DbContext.PersonView.Where(x => x.Name == name).FirstOrDefaultAsync(); + return await (await GetDbContextAsync()).PersonView.Where(x => x.Name == name).FirstOrDefaultAsync(); } } -} \ No newline at end of file +} diff --git a/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/MongoDbAsyncQueryableProvider_Tests.cs b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/MongoDbAsyncQueryableProvider_Tests.cs index ae9be03d57..5335aa11be 100644 --- a/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/MongoDbAsyncQueryableProvider_Tests.cs +++ b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/MongoDbAsyncQueryableProvider_Tests.cs @@ -25,10 +25,10 @@ namespace Volo.Abp.MongoDB.Repositories } [Fact] - public void CanExecute() + public async Task CanExecuteAsync() { _mongoDbAsyncQueryableProvider.CanExecute(_personRepository).ShouldBeTrue(); - _mongoDbAsyncQueryableProvider.CanExecute(_personRepository.WithDetails()).ShouldBeTrue(); + _mongoDbAsyncQueryableProvider.CanExecute(await _personRepository.WithDetailsAsync()).ShouldBeTrue(); } [Fact] diff --git a/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/TestApp/MongoDb/CityRepository.cs b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/TestApp/MongoDb/CityRepository.cs index bb31883010..df6eed85cc 100644 --- a/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/TestApp/MongoDb/CityRepository.cs +++ b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/TestApp/MongoDb/CityRepository.cs @@ -19,13 +19,13 @@ namespace Volo.Abp.TestApp.MongoDB public async Task FindByNameAsync(string name) { - return await (await Collection.FindAsync(c => c.Name == name)).FirstOrDefaultAsync(); + return await (await (await GetCollectionAsync()).FindAsync(c => c.Name == name)).FirstOrDefaultAsync(); } public async Task> GetPeopleInTheCityAsync(string cityName) { var city = await FindByNameAsync(cityName); - return await DbContext.People.AsQueryable().Where(p => p.CityId == city.Id).ToListAsync(); + return await (await GetDbContextAsync()).People.AsQueryable().Where(p => p.CityId == city.Id).ToListAsync(); } } } diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Queryable_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Queryable_Tests.cs index 6078236380..3ca511a7ea 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Queryable_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Queryable_Tests.cs @@ -44,24 +44,22 @@ namespace Volo.Abp.TestApp.Testing [Fact] public async Task WithDetails() { - await WithUnitOfWorkAsync(() => + await WithUnitOfWorkAsync(async () => { - var person = PersonRepository.WithDetails().Single(p => p.Id == TestDataBuilder.UserDouglasId); + var person = (await PersonRepository.WithDetailsAsync()).Single(p => p.Id == TestDataBuilder.UserDouglasId); person.Name.ShouldBe("Douglas"); person.Phones.Count.ShouldBe(2); - return Task.CompletedTask; }); } [Fact] public async Task WithDetails_Explicit() { - await WithUnitOfWorkAsync(() => + await WithUnitOfWorkAsync(async () => { - var person = PersonRepository.WithDetails(p => p.Phones).Single(p => p.Id == TestDataBuilder.UserDouglasId); + var person = (await PersonRepository.WithDetailsAsync(p => p.Phones)).Single(p => p.Id == TestDataBuilder.UserDouglasId); person.Name.ShouldBe("Douglas"); person.Phones.Count.ShouldBe(2); - return Task.CompletedTask; }); } } From d57c468e09178dfd8f305a97f570f58d68e527ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 23 Dec 2020 20:25:27 +0300 Subject: [PATCH 029/217] fix summaries. --- .../TagHelpers/Pagination/PagerModel.cs | 2 +- framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs | 4 ++-- .../Application/Services/AbstractKeyCrudAppService.cs | 10 +++++----- .../Services/AbstractKeyReadOnlyAppService.cs | 10 +++++----- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Pagination/PagerModel.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Pagination/PagerModel.cs index 980aacee8a..3c4eb1b88e 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Pagination/PagerModel.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Pagination/PagerModel.cs @@ -69,7 +69,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Pagination } /// - /// Gets first two, previous & current & next, last two pages + /// Gets first two, previous, current, next, last two pages /// private List GetPagesWithGaps() { diff --git a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs index 612034af19..9a820600bd 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs @@ -439,10 +439,10 @@ namespace Volo.Abp.BlazoriseUI } /// - /// Calls IAuthorizationService.CheckAsync for the given . + /// Calls IAuthorizationService.CheckAsync for the given . /// Throws if given policy was not granted for the current user. /// - /// Does nothing if is null or empty. + /// Does nothing if is null or empty. /// /// A policy name to check protected virtual async Task CheckPolicyAsync([CanBeNull] string policyName) diff --git a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyCrudAppService.cs b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyCrudAppService.cs index 91879f030e..ea0ca508d5 100644 --- a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyCrudAppService.cs +++ b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyCrudAppService.cs @@ -132,7 +132,7 @@ namespace Volo.Abp.Application.Services } /// - /// Maps to to create a new entity. + /// Maps to to create a new entity. /// It uses by default. /// It can be overriden for custom mapping. /// Overriding this has higher priority than overriding the @@ -143,7 +143,7 @@ namespace Volo.Abp.Application.Services } /// - /// Maps to to create a new entity. + /// Maps to to create a new entity. /// It uses by default. /// It can be overriden for custom mapping. /// @@ -155,7 +155,7 @@ namespace Volo.Abp.Application.Services } /// - /// Sets Id value for the entity if is . + /// Sets Id value for the entity if is . /// It's used while creating a new entity. /// protected virtual void SetIdForGuids(TEntity entity) @@ -171,7 +171,7 @@ namespace Volo.Abp.Application.Services } /// - /// Maps to to update the entity. + /// Maps to to update the entity. /// It uses by default. /// It can be overriden for custom mapping. /// Overriding this has higher priority than overriding the @@ -183,7 +183,7 @@ namespace Volo.Abp.Application.Services } /// - /// Maps to to update the entity. + /// Maps to to update the entity. /// It uses by default. /// It can be overriden for custom mapping. /// diff --git a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyReadOnlyAppService.cs b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyReadOnlyAppService.cs index b9ffe3359b..54c6bd7918 100644 --- a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyReadOnlyAppService.cs +++ b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyReadOnlyAppService.cs @@ -166,7 +166,7 @@ namespace Volo.Abp.Application.Services } /// - /// Maps to . + /// Maps to . /// It internally calls the by default. /// It can be overriden for custom mapping. /// Overriding this has higher priority than overriding the @@ -177,7 +177,7 @@ namespace Volo.Abp.Application.Services } /// - /// Maps to . + /// Maps to . /// It uses by default. /// It can be overriden for custom mapping. /// @@ -187,7 +187,7 @@ namespace Volo.Abp.Application.Services } /// - /// Maps a list of to objects. + /// Maps a list of to objects. /// It uses method for each item in the list. /// protected virtual async Task> MapToGetListOutputDtosAsync(List entities) @@ -203,7 +203,7 @@ namespace Volo.Abp.Application.Services } /// - /// Maps to . + /// Maps to . /// It internally calls the by default. /// It can be overriden for custom mapping. /// Overriding this has higher priority than overriding the @@ -214,7 +214,7 @@ namespace Volo.Abp.Application.Services } /// - /// Maps to . + /// Maps to . /// It uses by default. /// It can be overriden for custom mapping. /// From b28553706156f16efe338de0e46e368faa04d7dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 23 Dec 2020 20:36:37 +0300 Subject: [PATCH 030/217] Fix typeparamref. --- .../Application/Services/AbstractKeyCrudAppService.cs | 10 +++++----- .../Services/AbstractKeyReadOnlyAppService.cs | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyCrudAppService.cs b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyCrudAppService.cs index ea0ca508d5..0cfb8ceb24 100644 --- a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyCrudAppService.cs +++ b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyCrudAppService.cs @@ -132,7 +132,7 @@ namespace Volo.Abp.Application.Services } /// - /// Maps to to create a new entity. + /// Maps to to create a new entity. /// It uses by default. /// It can be overriden for custom mapping. /// Overriding this has higher priority than overriding the @@ -143,7 +143,7 @@ namespace Volo.Abp.Application.Services } /// - /// Maps to to create a new entity. + /// Maps to to create a new entity. /// It uses by default. /// It can be overriden for custom mapping. /// @@ -155,7 +155,7 @@ namespace Volo.Abp.Application.Services } /// - /// Sets Id value for the entity if is . + /// Sets Id value for the entity if is . /// It's used while creating a new entity. /// protected virtual void SetIdForGuids(TEntity entity) @@ -171,7 +171,7 @@ namespace Volo.Abp.Application.Services } /// - /// Maps to to update the entity. + /// Maps to to update the entity. /// It uses by default. /// It can be overriden for custom mapping. /// Overriding this has higher priority than overriding the @@ -183,7 +183,7 @@ namespace Volo.Abp.Application.Services } /// - /// Maps to to update the entity. + /// Maps to to update the entity. /// It uses by default. /// It can be overriden for custom mapping. /// diff --git a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyReadOnlyAppService.cs b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyReadOnlyAppService.cs index 54c6bd7918..b2e11678f8 100644 --- a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyReadOnlyAppService.cs +++ b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyReadOnlyAppService.cs @@ -166,7 +166,7 @@ namespace Volo.Abp.Application.Services } /// - /// Maps to . + /// Maps to . /// It internally calls the by default. /// It can be overriden for custom mapping. /// Overriding this has higher priority than overriding the @@ -177,7 +177,7 @@ namespace Volo.Abp.Application.Services } /// - /// Maps to . + /// Maps to . /// It uses by default. /// It can be overriden for custom mapping. /// @@ -187,7 +187,7 @@ namespace Volo.Abp.Application.Services } /// - /// Maps a list of to objects. + /// Maps a list of to objects. /// It uses method for each item in the list. /// protected virtual async Task> MapToGetListOutputDtosAsync(List entities) @@ -203,7 +203,7 @@ namespace Volo.Abp.Application.Services } /// - /// Maps to . + /// Maps to . /// It internally calls the by default. /// It can be overriden for custom mapping. /// Overriding this has higher priority than overriding the @@ -214,7 +214,7 @@ namespace Volo.Abp.Application.Services } /// - /// Maps to . + /// Maps to . /// It uses by default. /// It can be overriden for custom mapping. /// From e5df75c7706f0cb04bdce3786d908b1393445afa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 23 Dec 2020 20:53:01 +0300 Subject: [PATCH 031/217] Use async methods for audit logging module. --- .../EfCoreAuditLogRepository.cs | 52 +++++++++++-------- .../MongoDB/MongoAuditLogRepository.cs | 25 +++++---- 2 files changed, 43 insertions(+), 34 deletions(-) diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs index 6677f2d4a2..edb1f3f599 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs @@ -39,7 +39,7 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore bool includeDetails = false, CancellationToken cancellationToken = default) { - var query = GetListQuery( + var query = await GetListQueryAsync( startTime, endTime, httpMethod, @@ -75,7 +75,7 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore HttpStatusCode? httpStatusCode = null, CancellationToken cancellationToken = default) { - var query = GetListQuery( + var query = await GetListQueryAsync( startTime, endTime, httpMethod, @@ -94,7 +94,7 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore return totalCount; } - protected virtual IQueryable GetListQuery( + protected virtual async Task> GetListQueryAsync( DateTime? startTime = null, DateTime? endTime = null, string httpMethod = null, @@ -109,7 +109,7 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore bool includeDetails = false) { var nHttpStatusCode = (int?) httpStatusCode; - return DbSet.AsNoTracking() + return (await GetDbSetAsync()).AsNoTracking() .IncludeDetails(includeDetails) .WhereIf(startTime.HasValue, auditLog => auditLog.ExecutionTime >= startTime) .WhereIf(endTime.HasValue, auditLog => auditLog.ExecutionTime <= endTime) @@ -127,7 +127,7 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore public virtual async Task> GetAverageExecutionDurationPerDayAsync(DateTime startDate, DateTime endDate) { - var result = await DbSet.AsNoTracking() + var result = await (await GetDbSetAsync()).AsNoTracking() .Where(a => a.ExecutionTime < endDate.AddDays(1) && a.ExecutionTime > startDate) .OrderBy(t => t.ExecutionTime) .GroupBy(t => new { t.ExecutionTime.Date }) @@ -137,14 +137,20 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore return result.ToDictionary(element => element.Day.ClearTime(), element => element.avgExecutionTime); } + [Obsolete("Use WithDetailsAsync method.")] public override IQueryable WithDetails() { return GetQueryable().IncludeDetails(); } + public override async Task> WithDetailsAsync() + { + return (await GetQueryableAsync()).IncludeDetails(); + } + public virtual async Task GetEntityChange(Guid entityChangeId) { - var entityChange = await DbContext.Set() + var entityChange = await (await GetDbContextAsync()).Set() .AsNoTracking() .IncludeDetails() .Where(x => x.Id == entityChangeId) @@ -172,7 +178,7 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore bool includeDetails = false, CancellationToken cancellationToken = default) { - var query = GetEntityChangeListQuery(auditLogId, startTime, endTime, changeType, entityId, entityTypeFullName, includeDetails); + var query = await GetEntityChangeListQueryAsync(auditLogId, startTime, endTime, changeType, entityId, entityTypeFullName, includeDetails); return await query.OrderBy(sorting ?? "changeTime desc") .PageBy(skipCount, maxResultCount) @@ -188,7 +194,7 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore string entityTypeFullName = null, CancellationToken cancellationToken = default) { - var query = GetEntityChangeListQuery(auditLogId, startTime, endTime, changeType, entityId, entityTypeFullName); + var query = await GetEntityChangeListQueryAsync(auditLogId, startTime, endTime, changeType, entityId, entityTypeFullName); var totalCount = await query.LongCountAsync(GetCancellationToken(cancellationToken)); @@ -197,7 +203,7 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore public virtual async Task GetEntityChangeWithUsernameAsync(Guid entityChangeId) { - var auditLog = await DbSet.AsNoTracking().IncludeDetails() + var auditLog = await (await GetDbSetAsync()).AsNoTracking().IncludeDetails() .Where(x => x.EntityChanges.Any(y => y.Id == entityChangeId)).FirstAsync(); return new EntityChangeWithUsername() @@ -209,18 +215,20 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore public virtual async Task> GetEntityChangesWithUsernameAsync(string entityId, string entityTypeFullName) { - var query = DbContext.Set() + var dbContext = await GetDbContextAsync(); + + var query = dbContext.Set() .AsNoTracking() .IncludeDetails() .Where(x => x.EntityId == entityId && x.EntityTypeFullName == entityTypeFullName); return await (from e in query - join auditLog in DbSet on e.AuditLogId equals auditLog.Id - select new EntityChangeWithUsername() {EntityChange = e, UserName = auditLog.UserName}) + join auditLog in dbContext.AuditLogs on e.AuditLogId equals auditLog.Id + select new EntityChangeWithUsername {EntityChange = e, UserName = auditLog.UserName}) .OrderByDescending(x => x.EntityChange.ChangeTime).ToListAsync(); } - protected virtual IQueryable GetEntityChangeListQuery( + protected virtual async Task> GetEntityChangeListQueryAsync( Guid? auditLogId = null, DateTime? startTime = null, DateTime? endTime = null, @@ -229,14 +237,16 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore string entityTypeFullName = null, bool includeDetails = false) { - return DbContext.Set().AsNoTracking().IncludeDetails(includeDetails) - .WhereIf(auditLogId.HasValue, e => e.AuditLogId == auditLogId) - .WhereIf(startTime.HasValue, e => e.ChangeTime >= startTime) - .WhereIf(endTime.HasValue, e => e.ChangeTime <= endTime) - .WhereIf(changeType.HasValue, e => e.ChangeType == changeType) - .WhereIf(!string.IsNullOrWhiteSpace(entityId), e => e.EntityId == entityId) - .WhereIf(!string.IsNullOrWhiteSpace(entityTypeFullName), - e => e.EntityTypeFullName.Contains(entityTypeFullName)); + return (await GetDbContextAsync()) + .Set() + .AsNoTracking() + .IncludeDetails(includeDetails) + .WhereIf(auditLogId.HasValue, e => e.AuditLogId == auditLogId) + .WhereIf(startTime.HasValue, e => e.ChangeTime >= startTime) + .WhereIf(endTime.HasValue, e => e.ChangeTime <= endTime) + .WhereIf(changeType.HasValue, e => e.ChangeType == changeType) + .WhereIf(!string.IsNullOrWhiteSpace(entityId), e => e.EntityId == entityId) + .WhereIf(!string.IsNullOrWhiteSpace(entityTypeFullName), e => e.EntityTypeFullName.Contains(entityTypeFullName)); } } } diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs index 14e4dd39c7..95981d6355 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs @@ -40,7 +40,7 @@ namespace Volo.Abp.AuditLogging.MongoDB bool includeDetails = false, CancellationToken cancellationToken = default) { - var query = GetListQuery( + var query = await GetListQueryAsync( startTime, endTime, httpMethod, @@ -74,7 +74,7 @@ namespace Volo.Abp.AuditLogging.MongoDB HttpStatusCode? httpStatusCode = null, CancellationToken cancellationToken = default) { - var query = GetListQuery( + var query = await GetListQueryAsync( startTime, endTime, httpMethod, @@ -94,7 +94,7 @@ namespace Volo.Abp.AuditLogging.MongoDB return count; } - protected virtual IQueryable GetListQuery( + protected virtual async Task> GetListQueryAsync( DateTime? startTime = null, DateTime? endTime = null, string httpMethod = null, @@ -108,7 +108,7 @@ namespace Volo.Abp.AuditLogging.MongoDB HttpStatusCode? httpStatusCode = null, bool includeDetails = false) { - return GetMongoQueryable() + return (await GetMongoQueryableAsync()) .WhereIf(startTime.HasValue, auditLog => auditLog.ExecutionTime >= startTime) .WhereIf(endTime.HasValue, auditLog => auditLog.ExecutionTime <= endTime) .WhereIf(hasException.HasValue && hasException.Value, auditLog => auditLog.Exceptions != null && auditLog.Exceptions != "") @@ -126,7 +126,7 @@ namespace Volo.Abp.AuditLogging.MongoDB public virtual async Task> GetAverageExecutionDurationPerDayAsync(DateTime startDate, DateTime endDate) { - var result = await GetMongoQueryable() + var result = await (await GetMongoQueryableAsync()) .Where(a => a.ExecutionTime < endDate.AddDays(1) && a.ExecutionTime > startDate) .OrderBy(t => t.ExecutionTime) .GroupBy(t => new @@ -143,12 +143,11 @@ namespace Volo.Abp.AuditLogging.MongoDB public virtual async Task GetEntityChange(Guid entityChangeId) { - var entityChange = (await GetMongoQueryable() + var entityChange = (await (await GetMongoQueryableAsync()) .Where(x => x.EntityChanges.Any(y => y.Id == entityChangeId)) .OrderBy(x => x.Id) .FirstAsync()).EntityChanges.FirstOrDefault(x => x.Id == entityChangeId); - if (entityChange == null) { throw new EntityNotFoundException(typeof(EntityChange)); @@ -170,7 +169,7 @@ namespace Volo.Abp.AuditLogging.MongoDB bool includeDetails = false, CancellationToken cancellationToken = default) { - var query = GetEntityChangeListQuery(auditLogId, startTime, endTime, changeType, entityId, entityTypeFullName); + var query = await GetEntityChangeListQueryAsync(auditLogId, startTime, endTime, changeType, entityId, entityTypeFullName); var auditLogs = await query.As>() .PageBy>(skipCount, maxResultCount) @@ -188,7 +187,7 @@ namespace Volo.Abp.AuditLogging.MongoDB string entityTypeFullName = null, CancellationToken cancellationToken = default) { - var query = GetEntityChangeListQuery(auditLogId, startTime, endTime, changeType, entityId, entityTypeFullName); + var query = await GetEntityChangeListQueryAsync(auditLogId, startTime, endTime, changeType, entityId, entityTypeFullName); var count = await query.As>().LongCountAsync(GetCancellationToken(cancellationToken)); @@ -197,7 +196,7 @@ namespace Volo.Abp.AuditLogging.MongoDB public virtual async Task GetEntityChangeWithUsernameAsync(Guid entityChangeId) { - var auditLog = (await GetMongoQueryable() + var auditLog = (await (await GetMongoQueryableAsync()) .Where(x => x.EntityChanges.Any(y => y.Id == entityChangeId)) .FirstAsync()); @@ -210,7 +209,7 @@ namespace Volo.Abp.AuditLogging.MongoDB public virtual async Task> GetEntityChangesWithUsernameAsync(string entityId, string entityTypeFullName) { - var auditLogs = await GetMongoQueryable() + var auditLogs = await (await GetMongoQueryableAsync()) .Where(x => x.EntityChanges.Any(y => y.EntityId == entityId && y.EntityTypeFullName == entityTypeFullName)) .As>() .OrderByDescending(x => x.ExecutionTime) @@ -224,7 +223,7 @@ namespace Volo.Abp.AuditLogging.MongoDB {EntityChange = x, UserName = auditLogs.First(y => y.Id == x.AuditLogId).UserName}).ToList(); } - protected virtual IQueryable GetEntityChangeListQuery( + protected virtual async Task> GetEntityChangeListQueryAsync( Guid? auditLogId = null, DateTime? startTime = null, DateTime? endTime = null, @@ -232,7 +231,7 @@ namespace Volo.Abp.AuditLogging.MongoDB string entityId = null, string entityTypeFullName = null) { - return GetMongoQueryable() + return (await GetMongoQueryableAsync()) .SelectMany(x => x.EntityChanges) .WhereIf(auditLogId.HasValue, e => e.Id == auditLogId) .WhereIf(startTime.HasValue, e => e.ChangeTime >= startTime) From 1525246a4dfe4aafe8815b9b6d3b1b15f9fa27a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 23 Dec 2020 20:57:59 +0300 Subject: [PATCH 032/217] Use async in background jobs module. --- .../EfCoreBackgroundJobRepository.cs | 9 ++++----- .../MongoDB/MongoBackgroundJobRepository.cs | 11 +++++------ 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo/Abp/BackgroundJobs/EntityFrameworkCore/EfCoreBackgroundJobRepository.cs b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo/Abp/BackgroundJobs/EntityFrameworkCore/EfCoreBackgroundJobRepository.cs index 29d2bb0170..1971faf380 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo/Abp/BackgroundJobs/EntityFrameworkCore/EfCoreBackgroundJobRepository.cs +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo/Abp/BackgroundJobs/EntityFrameworkCore/EfCoreBackgroundJobRepository.cs @@ -15,7 +15,7 @@ namespace Volo.Abp.BackgroundJobs.EntityFrameworkCore public EfCoreBackgroundJobRepository( IDbContextProvider dbContextProvider, - IClock clock) + IClock clock) : base(dbContextProvider) { Clock = clock; @@ -23,14 +23,13 @@ namespace Volo.Abp.BackgroundJobs.EntityFrameworkCore public virtual async Task> GetWaitingListAsync(int maxResultCount) { - return await GetWaitingListQuery(maxResultCount) - .ToListAsync(); + return await (await GetWaitingListQueryAsync(maxResultCount)).ToListAsync(); } - protected virtual IQueryable GetWaitingListQuery(int maxResultCount) + protected virtual async Task> GetWaitingListQueryAsync(int maxResultCount) { var now = Clock.Now; - return DbSet + return (await GetDbSetAsync()) .Where(t => !t.IsAbandoned && t.NextTryTime <= now) .OrderByDescending(t => t.Priority) .ThenBy(t => t.TryCount) diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo/Abp/BackgroundJobs/MongoDB/MongoBackgroundJobRepository.cs b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo/Abp/BackgroundJobs/MongoDB/MongoBackgroundJobRepository.cs index 4399e15a98..258c9310e2 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo/Abp/BackgroundJobs/MongoDB/MongoBackgroundJobRepository.cs +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo/Abp/BackgroundJobs/MongoDB/MongoBackgroundJobRepository.cs @@ -14,8 +14,8 @@ namespace Volo.Abp.BackgroundJobs.MongoDB protected IClock Clock { get; } public MongoBackgroundJobRepository( - IMongoDbContextProvider dbContextProvider, - IClock clock) + IMongoDbContextProvider dbContextProvider, + IClock clock) : base(dbContextProvider) { Clock = clock; @@ -23,14 +23,13 @@ namespace Volo.Abp.BackgroundJobs.MongoDB public virtual async Task> GetWaitingListAsync(int maxResultCount) { - return await GetWaitingListQuery(maxResultCount) - .ToListAsync(); + return await (await GetWaitingListQuery(maxResultCount)).ToListAsync(); } - protected virtual IMongoQueryable GetWaitingListQuery(int maxResultCount) + protected virtual async Task> GetWaitingListQuery(int maxResultCount) { var now = Clock.Now; - return GetMongoQueryable() + return (await GetMongoQueryableAsync()) .Where(t => !t.IsAbandoned && t.NextTryTime <= now) .OrderByDescending(t => t.Priority) .ThenBy(t => t.TryCount) From 4d4121a3130ee3bbd463224287e94201611ffc5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 23 Dec 2020 21:06:59 +0300 Subject: [PATCH 033/217] Use async methods in the blob repo. --- .../EfCoreDatabaseBlobContainerRepository.cs | 7 +++-- .../EfCoreDatabaseBlobRepository.cs | 13 ++++---- .../MongoDB/MongoDbDatabaseBlobRepository.cs | 30 +++++++++++-------- 3 files changed, 30 insertions(+), 20 deletions(-) diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/EfCoreDatabaseBlobContainerRepository.cs b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/EfCoreDatabaseBlobContainerRepository.cs index e1d0764807..64b7e3e40a 100644 --- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/EfCoreDatabaseBlobContainerRepository.cs +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/EfCoreDatabaseBlobContainerRepository.cs @@ -10,14 +10,15 @@ namespace Volo.Abp.BlobStoring.Database.EntityFrameworkCore { public class EfCoreDatabaseBlobContainerRepository : EfCoreRepository, IDatabaseBlobContainerRepository { - public EfCoreDatabaseBlobContainerRepository(IDbContextProvider dbContextProvider) + public EfCoreDatabaseBlobContainerRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) { } public virtual async Task FindAsync(string name, CancellationToken cancellationToken = default) { - return await DbSet.FirstOrDefaultAsync(x => x.Name == name, GetCancellationToken(cancellationToken)); + return await (await GetDbSetAsync()) + .FirstOrDefaultAsync(x => x.Name == name, GetCancellationToken(cancellationToken)); } } -} \ No newline at end of file +} diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/EfCoreDatabaseBlobRepository.cs b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/EfCoreDatabaseBlobRepository.cs index 098f6095e4..2ae9331def 100644 --- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/EfCoreDatabaseBlobRepository.cs +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/EfCoreDatabaseBlobRepository.cs @@ -20,7 +20,8 @@ namespace Volo.Abp.BlobStoring.Database.EntityFrameworkCore string name, CancellationToken cancellationToken = default) { - return await DbSet.FirstOrDefaultAsync( + return await (await GetDbSetAsync()) + .FirstOrDefaultAsync( x => x.ContainerId == containerId && x.Name == name, GetCancellationToken(cancellationToken) ); @@ -31,9 +32,11 @@ namespace Volo.Abp.BlobStoring.Database.EntityFrameworkCore string name, CancellationToken cancellationToken = default) { - return await DbSet.AnyAsync( - x => x.ContainerId == containerId && x.Name == name, - GetCancellationToken(cancellationToken)); + return await (await GetDbSetAsync()) + .AnyAsync( + x => x.ContainerId == containerId && x.Name == name, + GetCancellationToken(cancellationToken) + ); } public virtual async Task DeleteAsync( @@ -54,4 +57,4 @@ namespace Volo.Abp.BlobStoring.Database.EntityFrameworkCore return true; } } -} \ No newline at end of file +} diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo/Abp/BlobStoring/Database/MongoDB/MongoDbDatabaseBlobRepository.cs b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo/Abp/BlobStoring/Database/MongoDB/MongoDbDatabaseBlobRepository.cs index 6c5b034fc1..17945a87db 100644 --- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo/Abp/BlobStoring/Database/MongoDB/MongoDbDatabaseBlobRepository.cs +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo/Abp/BlobStoring/Database/MongoDB/MongoDbDatabaseBlobRepository.cs @@ -15,35 +15,41 @@ namespace Volo.Abp.BlobStoring.Database.MongoDB public virtual async Task FindAsync(Guid containerId, string name, CancellationToken cancellationToken = default) { - return await GetMongoQueryable().FirstOrDefaultAsync( - x => x.ContainerId == containerId && - x.Name == name, - GetCancellationToken(cancellationToken)); + cancellationToken = GetCancellationToken(cancellationToken); + + return await (await GetMongoQueryableAsync(cancellationToken)) + .FirstOrDefaultAsync( + x => x.ContainerId == containerId && x.Name == name, + cancellationToken + ); } public virtual async Task ExistsAsync(Guid containerId, string name, CancellationToken cancellationToken = default) { - return await GetMongoQueryable().AnyAsync( - x => x.ContainerId == containerId && - x.Name == name, - GetCancellationToken(cancellationToken)); + cancellationToken = GetCancellationToken(cancellationToken); + + return await (await GetMongoQueryableAsync(cancellationToken)) + .AnyAsync( + x => x.ContainerId == containerId && x.Name == name, + cancellationToken + ); } public virtual async Task DeleteAsync( - Guid containerId, + Guid containerId, string name, bool autoSave = false, CancellationToken cancellationToken = default) { var blob = await FindAsync(containerId, name, cancellationToken); - if (blob == null) { return false; } - await base.DeleteAsync(blob, autoSave, cancellationToken: GetCancellationToken(cancellationToken)); + await base.DeleteAsync(blob, autoSave, cancellationToken); + return true; } } -} \ No newline at end of file +} From 7d9013fd511baae36d93212c21a8c4dd9fb028f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 23 Dec 2020 21:09:55 +0300 Subject: [PATCH 034/217] Add missing param --- .../Volo/Abp/Identity/OrganizationUnit.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/OrganizationUnit.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/OrganizationUnit.cs index 981a0f8fae..53411c1849 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/OrganizationUnit.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/OrganizationUnit.cs @@ -49,12 +49,13 @@ namespace Volo.Abp.Identity /// /// Initializes a new instance of the class. /// - /// Tenant's Id or null for host. + /// id /// Display name. /// Parent's Id or null if OU is a root. + /// Tenant's Id or null for host. public OrganizationUnit(Guid id, string displayName, Guid? parentId = null, Guid? tenantId = null) + : base(id) { - Id = id; TenantId = tenantId; DisplayName = displayName; ParentId = parentId; From b1d8411881a362a56e00111667a301c52407da86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 23 Dec 2020 21:21:51 +0300 Subject: [PATCH 035/217] Use async for identity mongodb repos. --- .../MongoIdentityClaimTypeRepository.cs | 8 +-- .../MongoIdentityLinkUserRepository.cs | 4 +- .../MongoDB/MongoIdentityRoleRepository.cs | 12 ++-- .../MongoIdentitySecurityLogRepository.cs | 10 +-- .../MongoDB/MongoIdentityUserRepository.cs | 65 +++++++++++-------- 5 files changed, 57 insertions(+), 42 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityClaimTypeRepository.cs b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityClaimTypeRepository.cs index a123868799..6795735793 100644 --- a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityClaimTypeRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityClaimTypeRepository.cs @@ -24,13 +24,13 @@ namespace Volo.Abp.Identity.MongoDB { if (ignoredId == null) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(ct => ct.Name == name) .AnyAsync(GetCancellationToken(cancellationToken)); } else { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(ct => ct.Id != ignoredId && ct.Name == name) .AnyAsync(GetCancellationToken(cancellationToken)); } @@ -43,7 +43,7 @@ namespace Volo.Abp.Identity.MongoDB string filter, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .WhereIf>( !filter.IsNullOrWhiteSpace(), u => @@ -59,7 +59,7 @@ namespace Volo.Abp.Identity.MongoDB string filter = null, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .WhereIf>( !filter.IsNullOrWhiteSpace(), u => diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityLinkUserRepository.cs b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityLinkUserRepository.cs index 6e8d53821b..43bad94271 100644 --- a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityLinkUserRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityLinkUserRepository.cs @@ -19,7 +19,7 @@ namespace Volo.Abp.Identity.MongoDB public async Task FindAsync(IdentityLinkUserInfo sourceLinkUserInfo, IdentityLinkUserInfo targetLinkUserInfo, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .OrderBy(x => x.Id).FirstOrDefaultAsync(x => x.SourceUserId == sourceLinkUserInfo.UserId && x.SourceTenantId == sourceLinkUserInfo.TenantId && x.TargetUserId == targetLinkUserInfo.UserId && x.TargetTenantId == targetLinkUserInfo.TenantId || @@ -30,7 +30,7 @@ namespace Volo.Abp.Identity.MongoDB public async Task> GetListAsync(IdentityLinkUserInfo linkUserInfo, CancellationToken cancellationToken = default) { - return await GetMongoQueryable().Where(x => + return await (await GetMongoQueryableAsync(cancellationToken)).Where(x => x.SourceUserId == linkUserInfo.UserId && x.SourceTenantId == linkUserInfo.TenantId || x.TargetUserId == linkUserInfo.UserId && x.TargetTenantId == linkUserInfo.TenantId) .ToListAsync(cancellationToken: GetCancellationToken(cancellationToken)); diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityRoleRepository.cs b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityRoleRepository.cs index 9c6bccf74f..0731008f57 100644 --- a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityRoleRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityRoleRepository.cs @@ -23,7 +23,7 @@ namespace Volo.Abp.Identity.MongoDB bool includeDetails = true, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .OrderBy(x => x.Id) .FirstOrDefaultAsync(r => r.NormalizedName == normalizedRoleName, GetCancellationToken(cancellationToken)); } @@ -36,7 +36,7 @@ namespace Volo.Abp.Identity.MongoDB bool includeDetails = false, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .WhereIf(!filter.IsNullOrWhiteSpace(), x => x.Name.Contains(filter) || x.NormalizedName.Contains(filter)) @@ -50,7 +50,7 @@ namespace Volo.Abp.Identity.MongoDB IEnumerable ids, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(t => ids.Contains(t.Id)) .ToListAsync(GetCancellationToken(cancellationToken)); } @@ -59,14 +59,16 @@ namespace Volo.Abp.Identity.MongoDB bool includeDetails = false, CancellationToken cancellationToken = default) { - return await GetMongoQueryable().Where(r => r.IsDefault).ToListAsync(cancellationToken: GetCancellationToken(cancellationToken)); + return await (await GetMongoQueryableAsync(cancellationToken)) + .Where(r => r.IsDefault) + .ToListAsync(GetCancellationToken(cancellationToken)); } public async Task GetCountAsync( string filter = null, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .WhereIf(!filter.IsNullOrWhiteSpace(), x => x.Name.Contains(filter) || x.NormalizedName.Contains(filter)) diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentitySecurityLogRepository.cs b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentitySecurityLogRepository.cs index b63a6001f9..a0a8b9b103 100644 --- a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentitySecurityLogRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentitySecurityLogRepository.cs @@ -35,7 +35,7 @@ namespace Volo.Abp.Identity.MongoDB bool includeDetails = false, CancellationToken cancellationToken = default) { - var query = GetListQuery( + var query = await GetListQueryAsync( startTime, endTime, applicationName, @@ -65,7 +65,7 @@ namespace Volo.Abp.Identity.MongoDB string correlationId = null, CancellationToken cancellationToken = default) { - var query = GetListQuery( + var query = await GetListQueryAsync( startTime, endTime, applicationName, @@ -85,11 +85,11 @@ namespace Volo.Abp.Identity.MongoDB public async Task GetByUserIdAsync(Guid id, Guid userId, bool includeDetails = false, CancellationToken cancellationToken = default) { - return await GetMongoQueryable().OrderBy(x => x.Id).FirstOrDefaultAsync(x => x.Id == id && x.UserId == userId, + return await (await GetMongoQueryableAsync(cancellationToken)).OrderBy(x => x.Id).FirstOrDefaultAsync(x => x.Id == id && x.UserId == userId, GetCancellationToken(cancellationToken)); } - protected virtual IQueryable GetListQuery( + protected virtual async Task> GetListQueryAsync( DateTime? startTime = null, DateTime? endTime = null, string applicationName = null, @@ -100,7 +100,7 @@ namespace Volo.Abp.Identity.MongoDB string clientId = null, string correlationId = null) { - return GetMongoQueryable() + return (await GetMongoQueryableAsync()) .WhereIf(startTime.HasValue, securityLog => securityLog.CreationTime >= startTime.Value) .WhereIf(endTime.HasValue, securityLog => securityLog.CreationTime < endTime.Value.AddDays(1).Date) .WhereIf(!applicationName.IsNullOrWhiteSpace(), diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityUserRepository.cs b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityUserRepository.cs index 692e5d5016..0864f7b01c 100644 --- a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityUserRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityUserRepository.cs @@ -24,7 +24,7 @@ namespace Volo.Abp.Identity.MongoDB bool includeDetails = true, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .OrderBy(x => x.Id) .FirstOrDefaultAsync( u => u.NormalizedUserName == normalizedUserName, @@ -40,14 +40,17 @@ namespace Volo.Abp.Identity.MongoDB var organizationUnitIds = user.OrganizationUnits .Select(r => r.OrganizationUnitId) .ToArray(); - var organizationUnits = DbContext.OrganizationUnits + + var dbContext = await GetDbContextAsync(cancellationToken); + + var organizationUnits = dbContext.OrganizationUnits .AsQueryable() .Where(ou => organizationUnitIds.Contains(ou.Id)) .ToArray(); var orgUnitRoleIds = organizationUnits.SelectMany(x => x.Roles.Select(r => r.RoleId)).ToArray(); var roleIds = user.Roles.Select(r => r.RoleId).ToArray(); var allRoleIds = orgUnitRoleIds.Union(roleIds); - return await DbContext.Roles.AsQueryable().Where(r => allRoleIds.Contains(r.Id)).Select(r => r.Name).ToListAsync(GetCancellationToken(cancellationToken)); + return await dbContext.Roles.AsQueryable().Where(r => allRoleIds.Contains(r.Id)).Select(r => r.Name).ToListAsync(GetCancellationToken(cancellationToken)); } public async Task> GetRoleNamesInOrganizationUnitAsync( @@ -60,14 +63,16 @@ namespace Volo.Abp.Identity.MongoDB .Select(r => r.OrganizationUnitId) .ToArray(); - var organizationUnits = DbContext.OrganizationUnits + var dbContext = await GetDbContextAsync(cancellationToken); + + var organizationUnits = dbContext.OrganizationUnits .AsQueryable() .Where(ou => organizationUnitIds.Contains(ou.Id)) .ToArray(); var roleIds = organizationUnits.SelectMany(x => x.Roles.Select(r => r.RoleId)).ToArray(); - return await DbContext.Roles //TODO: Such usage suppress filters! + return await dbContext.Roles //TODO: Such usage suppress filters! .AsQueryable() .Where(r => roleIds.Contains(r.Id)) .Select(r => r.Name) @@ -80,7 +85,7 @@ namespace Volo.Abp.Identity.MongoDB bool includeDetails = true, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(u => u.Logins.Any(login => login.LoginProvider == loginProvider && login.ProviderKey == providerKey)) .OrderBy(x => x.Id) .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); @@ -91,7 +96,7 @@ namespace Volo.Abp.Identity.MongoDB bool includeDetails = true, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .OrderBy(x => x.Id).FirstOrDefaultAsync(u => u.NormalizedEmail == normalizedEmail, GetCancellationToken(cancellationToken)); } @@ -100,7 +105,7 @@ namespace Volo.Abp.Identity.MongoDB bool includeDetails = false, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(u => u.Claims.Any(c => c.ClaimType == claim.Type && c.ClaimValue == claim.Value)) .ToListAsync(GetCancellationToken(cancellationToken)); } @@ -110,19 +115,21 @@ namespace Volo.Abp.Identity.MongoDB bool includeDetails = false, CancellationToken cancellationToken = default) { - var role = await DbContext.Roles.AsQueryable() + cancellationToken = GetCancellationToken(cancellationToken); + + var role = await (await GetDbContextAsync(cancellationToken)).Roles.AsQueryable() //TODO: Such usages breaks data filters .Where(x => x.NormalizedName == normalizedRoleName) .OrderBy(x => x.Id) - .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); + .FirstOrDefaultAsync(cancellationToken); if (role == null) { return new List(); } - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(u => u.Roles.Any(r => r.RoleId == role.Id)) - .ToListAsync(GetCancellationToken(cancellationToken)); + .ToListAsync(cancellationToken); } public virtual async Task> GetListAsync( @@ -133,7 +140,7 @@ namespace Volo.Abp.Identity.MongoDB bool includeDetails = false, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .WhereIf>( !filter.IsNullOrWhiteSpace(), u => @@ -158,14 +165,17 @@ namespace Volo.Abp.Identity.MongoDB var organizationUnitIds = user.OrganizationUnits .Select(r => r.OrganizationUnitId) .ToArray(); - var organizationUnits = DbContext.OrganizationUnits + + var dbContext = await GetDbContextAsync(cancellationToken); + + var organizationUnits = dbContext.OrganizationUnits .AsQueryable() .Where(ou => organizationUnitIds.Contains(ou.Id)) .ToArray(); var orgUnitRoleIds = organizationUnits.SelectMany(x => x.Roles.Select(r => r.RoleId)).ToArray(); var roleIds = user.Roles.Select(r => r.RoleId).ToArray(); var allRoleIds = orgUnitRoleIds.Union(roleIds); - return await DbContext.Roles.AsQueryable().Where(r => allRoleIds.Contains(r.Id)).ToListAsync(GetCancellationToken(cancellationToken)); + return await dbContext.Roles.AsQueryable().Where(r => allRoleIds.Contains(r.Id)).ToListAsync(GetCancellationToken(cancellationToken)); } public async Task> GetOrganizationUnitsAsync( @@ -175,17 +185,19 @@ namespace Volo.Abp.Identity.MongoDB { var user = await GetAsync(id, cancellationToken: GetCancellationToken(cancellationToken)); var organizationUnitIds = user.OrganizationUnits.Select(r => r.OrganizationUnitId); - return await DbContext.OrganizationUnits.AsQueryable() + + var dbContext = await GetDbContextAsync(cancellationToken); + + return await dbContext.OrganizationUnits.AsQueryable() .Where(ou => organizationUnitIds.Contains(ou.Id)) - .ToListAsync(GetCancellationToken(cancellationToken)) - ; + .ToListAsync(GetCancellationToken(cancellationToken)); } public virtual async Task GetCountAsync( string filter = null, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .WhereIf>( !filter.IsNullOrWhiteSpace(), u => @@ -202,7 +214,7 @@ namespace Volo.Abp.Identity.MongoDB Guid organizationUnitId, CancellationToken cancellationToken = default) { - var result = await GetMongoQueryable() + var result = await (await GetMongoQueryableAsync(cancellationToken)) .Where(u => u.OrganizationUnits.Any(uou => uou.OrganizationUnitId == organizationUnitId)) .ToListAsync(GetCancellationToken(cancellationToken)) ; @@ -213,7 +225,7 @@ namespace Volo.Abp.Identity.MongoDB List organizationUnitIds, CancellationToken cancellationToken = default) { - var result = await GetMongoQueryable() + var result = await (await GetMongoQueryableAsync(cancellationToken)) .Where(u => u.OrganizationUnits.Any(uou => organizationUnitIds.Contains(uou.OrganizationUnitId))) .ToListAsync(GetCancellationToken(cancellationToken)) ; @@ -224,16 +236,17 @@ namespace Volo.Abp.Identity.MongoDB string code, CancellationToken cancellationToken = default) { - var organizationUnitIds = await DbContext.OrganizationUnits.AsQueryable() + cancellationToken = GetCancellationToken(cancellationToken); + + var organizationUnitIds = await (await GetDbContextAsync(cancellationToken)).OrganizationUnits.AsQueryable() .Where(ou => ou.Code.StartsWith(code)) .Select(ou => ou.Id) - .ToListAsync(GetCancellationToken(cancellationToken)) + .ToListAsync(cancellationToken) ; - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(u => u.OrganizationUnits.Any(uou => organizationUnitIds.Contains(uou.OrganizationUnitId))) - .ToListAsync(GetCancellationToken(cancellationToken)) - ; + .ToListAsync(cancellationToken); } } } From 1a03098c781deddc1a41400e2182a2382c0e8f86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 23 Dec 2020 21:36:22 +0300 Subject: [PATCH 036/217] use async in ids4 repos. --- .../MongoDB/MongoApiResourceRepository.cs | 17 ++++++----------- .../MongoDB/MongoApiScopeRepository.cs | 9 +++++---- .../MongoDB/MongoClientRepository.cs | 14 +++++--------- .../MongoDB/MongoDeviceFlowCodesRepository.cs | 6 +++--- .../MongoDB/MongoIdentityResourceRepository.cs | 14 +++++--------- .../MongoDB/MongoPersistedGrantRepository.cs | 14 +++++++------- 6 files changed, 31 insertions(+), 43 deletions(-) diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoApiResourceRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoApiResourceRepository.cs index 599fa913b5..7db1bba8da 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoApiResourceRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoApiResourceRepository.cs @@ -6,7 +6,6 @@ using System.Threading.Tasks; using MongoDB.Driver; using MongoDB.Driver.Linq; using Volo.Abp.Domain.Repositories.MongoDB; -using Volo.Abp.IdentityServer.ApiScopes; using System.Linq.Dynamic.Core; using Volo.Abp.IdentityServer.ApiResources; using Volo.Abp.MongoDB; @@ -21,7 +20,7 @@ namespace Volo.Abp.IdentityServer.MongoDB public async Task FindByNameAsync(string apiResourceName, bool includeDetails = true, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(ar => ar.Name == apiResourceName) .OrderBy(ar => ar.Id) .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); @@ -30,7 +29,7 @@ namespace Volo.Abp.IdentityServer.MongoDB public async Task> FindByNameAsync(string[] apiResourceNames, bool includeDetails = true, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(ar => apiResourceNames.Contains(ar.Name)) .ToListAsync(GetCancellationToken(cancellationToken)); } @@ -38,7 +37,7 @@ namespace Volo.Abp.IdentityServer.MongoDB public virtual async Task> GetListByScopesAsync(string[] scopeNames, bool includeDetails = false, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(ar => ar.Scopes.Any(x => scopeNames.Contains(x.Scope))) .ToListAsync(GetCancellationToken(cancellationToken)); } @@ -46,7 +45,7 @@ namespace Volo.Abp.IdentityServer.MongoDB public virtual async Task> GetListAsync(string sorting, int skipCount, int maxResultCount, string filter, bool includeDetails = false, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .WhereIf(!filter.IsNullOrWhiteSpace(), x => x.Name.Contains(filter) || x.Description.Contains(filter) || @@ -57,14 +56,10 @@ namespace Volo.Abp.IdentityServer.MongoDB .ToListAsync(GetCancellationToken(cancellationToken)); } - public virtual async Task GetTotalCount() - { - return await GetCountAsync(); - } - public virtual async Task CheckNameExistAsync(string name, Guid? expectedId = null, CancellationToken cancellationToken = default) { - return await GetMongoQueryable().AnyAsync(ar => ar.Id != expectedId && ar.Name == name, GetCancellationToken(cancellationToken)); + return await (await GetMongoQueryableAsync(cancellationToken)) + .AnyAsync(ar => ar.Id != expectedId && ar.Name == name, GetCancellationToken(cancellationToken)); } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoApiScopeRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoApiScopeRepository.cs index 91a408392f..69faed9dc3 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoApiScopeRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoApiScopeRepository.cs @@ -22,7 +22,7 @@ namespace Volo.Abp.IdentityServer.MongoDB public async Task GetByNameAsync(string scopeName, bool includeDetails = true, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(x => x.Name == scopeName) .OrderBy(x => x.Id) .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); @@ -31,7 +31,7 @@ namespace Volo.Abp.IdentityServer.MongoDB public async Task> GetListByNameAsync(string[] scopeNames, bool includeDetails = false, CancellationToken cancellationToken = default) { - var query = from scope in GetMongoQueryable() + var query = from scope in (await GetMongoQueryableAsync(cancellationToken)) where scopeNames.Contains(scope.Name) orderby scope.Id select scope; @@ -42,7 +42,7 @@ namespace Volo.Abp.IdentityServer.MongoDB public async Task> GetListAsync(string sorting, int skipCount, int maxResultCount, string filter = null, bool includeDetails = false, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .WhereIf(!filter.IsNullOrWhiteSpace(), x => x.Name.Contains(filter) || x.Description.Contains(filter) || @@ -55,7 +55,8 @@ namespace Volo.Abp.IdentityServer.MongoDB public async Task CheckNameExistAsync(string name, Guid? expectedId = null, CancellationToken cancellationToken = default) { - return await GetMongoQueryable().AnyAsync(x => x.Id != expectedId && x.Name == name, GetCancellationToken(cancellationToken)); + return await (await GetMongoQueryableAsync(cancellationToken)) + .AnyAsync(x => x.Id != expectedId && x.Name == name, GetCancellationToken(cancellationToken)); } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoClientRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoClientRepository.cs index a68f5738d0..bd99461997 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoClientRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoClientRepository.cs @@ -26,7 +26,7 @@ namespace Volo.Abp.IdentityServer.MongoDB bool includeDetails = true, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(x => x.ClientId == clientId) .OrderBy(x => x.Id) .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); @@ -40,7 +40,7 @@ namespace Volo.Abp.IdentityServer.MongoDB bool includeDetails = false, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .WhereIf(!filter.IsNullOrWhiteSpace(), x=>x.ClientId.Contains(filter)) .OrderBy(sorting ?? nameof(Client.ClientName)) .As>() @@ -51,7 +51,7 @@ namespace Volo.Abp.IdentityServer.MongoDB public virtual async Task> GetAllDistinctAllowedCorsOriginsAsync( CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .SelectMany(x => x.AllowedCorsOrigins) .Select(y => y.Origin) .Distinct() @@ -60,12 +60,8 @@ namespace Volo.Abp.IdentityServer.MongoDB public virtual async Task CheckClientIdExistAsync(string clientId, Guid? expectedId = null, CancellationToken cancellationToken = default) { - return await GetMongoQueryable().AnyAsync(c => c.Id != expectedId && c.ClientId == clientId, cancellationToken: cancellationToken); - } - - public virtual async Task GetTotalCount() - { - return await GetCountAsync(); + return await (await GetMongoQueryableAsync(cancellationToken)) + .AnyAsync(c => c.Id != expectedId && c.ClientId == clientId, cancellationToken: cancellationToken); } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoDeviceFlowCodesRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoDeviceFlowCodesRepository.cs index fc6dc0100a..83e87c0a58 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoDeviceFlowCodesRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoDeviceFlowCodesRepository.cs @@ -23,7 +23,7 @@ namespace Volo.Abp.IdentityServer.MongoDB string userCode, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(d => d.UserCode == userCode) .OrderBy(x => x.Id) .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); @@ -31,7 +31,7 @@ namespace Volo.Abp.IdentityServer.MongoDB public virtual async Task FindByDeviceCodeAsync(string deviceCode, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(d => d.DeviceCode == deviceCode) .OrderBy(x => x.Id) .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); @@ -42,7 +42,7 @@ namespace Volo.Abp.IdentityServer.MongoDB int maxResultCount, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(x => x.Expiration != null && x.Expiration < maxExpirationDate) .OrderBy(x => x.ClientId) .Take(maxResultCount) diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoIdentityResourceRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoIdentityResourceRepository.cs index 15fdf5b00c..84cc5cca0f 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoIdentityResourceRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoIdentityResourceRepository.cs @@ -20,7 +20,7 @@ namespace Volo.Abp.IdentityServer.MongoDB public virtual async Task> GetListAsync(string sorting, int skipCount, int maxResultCount, string filter, bool includeDetails = false, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .WhereIf(!filter.IsNullOrWhiteSpace(), x => x.Name.Contains(filter) || x.Description.Contains(filter) || x.DisplayName.Contains(filter)) @@ -35,7 +35,7 @@ namespace Volo.Abp.IdentityServer.MongoDB bool includeDetails = true, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(x => x.Name == name) .OrderBy(x => x.Id) .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); @@ -44,19 +44,15 @@ namespace Volo.Abp.IdentityServer.MongoDB public virtual async Task> GetListByScopeNameAsync(string[] scopeNames, bool includeDetails = false, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(ar => scopeNames.Contains(ar.Name)) .ToListAsync(GetCancellationToken(cancellationToken)); } - public virtual async Task GetTotalCountAsync() - { - return await GetCountAsync(); - } - public virtual async Task CheckNameExistAsync(string name, Guid? expectedId = null, CancellationToken cancellationToken = default) { - return await GetMongoQueryable().AnyAsync(ir => ir.Id != expectedId && ir.Name == name, cancellationToken: cancellationToken); + return await (await GetMongoQueryableAsync(cancellationToken)) + .AnyAsync(ir => ir.Id != expectedId && ir.Name == name, cancellationToken: cancellationToken); } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoPersistedGrantRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoPersistedGrantRepository.cs index 6265bcd019..2d4728a7e1 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoPersistedGrantRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoPersistedGrantRepository.cs @@ -21,13 +21,13 @@ namespace Volo.Abp.IdentityServer.MongoDB public async Task> GetListAsync(string subjectId, string sessionId, string clientId, string type, bool includeDetails = false, CancellationToken cancellationToken = default) { - return await Filter(subjectId, sessionId, clientId, type) + return await (await FilterAsync(subjectId, sessionId, clientId, type)) .ToListAsync(GetCancellationToken(cancellationToken)); } public virtual async Task FindByKeyAsync(string key, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(x => x.Key == key) .OrderBy(x => x.Id) .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); @@ -35,7 +35,7 @@ namespace Volo.Abp.IdentityServer.MongoDB public virtual async Task> GetListBySubjectIdAsync(string subjectId, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(x => x.SubjectId == subjectId) .ToListAsync(GetCancellationToken(cancellationToken)); } @@ -43,7 +43,7 @@ namespace Volo.Abp.IdentityServer.MongoDB public virtual async Task> GetListByExpirationAsync(DateTime maxExpirationDate, int maxResultCount, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(x => x.Expiration != null && x.Expiration < maxExpirationDate) .OrderBy(x => x.ClientId) .Take(maxResultCount) @@ -57,7 +57,7 @@ namespace Volo.Abp.IdentityServer.MongoDB string type = null, CancellationToken cancellationToken = default) { - var persistedGrants = await Filter(subjectId, sessionId, clientId, type) + var persistedGrants = await (await FilterAsync(subjectId, sessionId, clientId, type)) .ToListAsync(GetCancellationToken(cancellationToken)); foreach (var persistedGrant in persistedGrants) @@ -82,13 +82,13 @@ namespace Volo.Abp.IdentityServer.MongoDB ); } - private IMongoQueryable Filter( + private async Task> FilterAsync( string subjectId, string sessionId, string clientId, string type) { - return GetMongoQueryable() + return (await GetMongoQueryableAsync()) .WhereIf>(!subjectId.IsNullOrWhiteSpace(), x => x.SubjectId == subjectId) .WhereIf>(!sessionId.IsNullOrWhiteSpace(), x => x.SessionId == sessionId) .WhereIf>(!clientId.IsNullOrWhiteSpace(), x => x.ClientId == clientId) From 4296d82981ef84bcfb20b270c82532403c215400 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 23 Dec 2020 21:52:27 +0300 Subject: [PATCH 037/217] implement async in tenant management repo. --- .../EfCoreTenantRepository.cs | 10 +++++++-- .../MongoDb/MongoTenantRepository.cs | 22 +++++++++---------- .../TenantConnectionString_Tests.cs | 2 +- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs index be11861574..36d28b7659 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs @@ -23,7 +23,7 @@ namespace Volo.Abp.TenantManagement.EntityFrameworkCore bool includeDetails = true, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .IncludeDetails(includeDetails) .FirstOrDefaultAsync(t => t.Name == name, GetCancellationToken(cancellationToken)); } @@ -50,7 +50,7 @@ namespace Volo.Abp.TenantManagement.EntityFrameworkCore bool includeDetails = false, CancellationToken cancellationToken = default) { - return await DbSet + return await (await GetDbSetAsync()) .IncludeDetails(includeDetails) .WhereIf( !filter.IsNullOrWhiteSpace(), @@ -72,9 +72,15 @@ namespace Volo.Abp.TenantManagement.EntityFrameworkCore ).CountAsync(cancellationToken: cancellationToken); } + [Obsolete("Use WithDetailsAsync method.")] public override IQueryable WithDetails() { return GetQueryable().IncludeDetails(); } + + public override async Task> WithDetailsAsync() + { + return (await GetQueryableAsync()).IncludeDetails(); + } } } diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo/Abp/TenantManagement/MongoDb/MongoTenantRepository.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo/Abp/TenantManagement/MongoDb/MongoTenantRepository.cs index a074cd973a..abd03ab65d 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo/Abp/TenantManagement/MongoDb/MongoTenantRepository.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo/Abp/TenantManagement/MongoDb/MongoTenantRepository.cs @@ -13,18 +13,18 @@ namespace Volo.Abp.TenantManagement.MongoDB { public class MongoTenantRepository : MongoDbRepository, ITenantRepository { - public MongoTenantRepository(IMongoDbContextProvider dbContextProvider) + public MongoTenantRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) { } public virtual async Task FindByNameAsync( - string name, - bool includeDetails = true, + string name, + bool includeDetails = true, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .FirstOrDefaultAsync(t => t.Name == name, GetCancellationToken(cancellationToken)); } @@ -41,14 +41,14 @@ namespace Volo.Abp.TenantManagement.MongoDB } public virtual async Task> GetListAsync( - string sorting = null, - int maxResultCount = int.MaxValue, - int skipCount = 0, - string filter = null, + string sorting = null, + int maxResultCount = int.MaxValue, + int skipCount = 0, + string filter = null, bool includeDetails = false, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .WhereIf>( !filter.IsNullOrWhiteSpace(), u => @@ -62,7 +62,7 @@ namespace Volo.Abp.TenantManagement.MongoDB public virtual async Task GetCountAsync(string filter = null, CancellationToken cancellationToken = default) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .WhereIf>( !filter.IsNullOrWhiteSpace(), u => @@ -70,4 +70,4 @@ namespace Volo.Abp.TenantManagement.MongoDB ).CountAsync(cancellationToken: cancellationToken); } } -} \ No newline at end of file +} diff --git a/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/Volo/Abp/TenantManagement/TenantConnectionString_Tests.cs b/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/Volo/Abp/TenantManagement/TenantConnectionString_Tests.cs index 24c27db8ae..c6c197ea70 100644 --- a/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/Volo/Abp/TenantManagement/TenantConnectionString_Tests.cs +++ b/modules/tenant-management/test/Volo.Abp.TenantManagement.Domain.Tests/Volo/Abp/TenantManagement/TenantConnectionString_Tests.cs @@ -10,7 +10,7 @@ namespace Volo.Abp.TenantManagement [Theory] [InlineData("aaa")] [InlineData("bbb")] - public async Task SetValue(string value) + public void SetValue(string value) { var tenantConnectionString = new TenantConnectionString(Guid.NewGuid(), "MyConnString", "MyConnString-Value"); From 3577bdb361f5310ca18b374252b3d615dfaa88b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 23 Dec 2020 22:06:06 +0300 Subject: [PATCH 038/217] Use GetQueryableAsync --- .../AbpPerfTest.WithAbp/Controllers/BookController.cs | 2 +- test/AbpPerfTest/_jmeter/SimpleTestPlan.jmx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/AbpPerfTest/AbpPerfTest.WithAbp/Controllers/BookController.cs b/test/AbpPerfTest/AbpPerfTest.WithAbp/Controllers/BookController.cs index 7c78937342..ed7f10500b 100644 --- a/test/AbpPerfTest/AbpPerfTest.WithAbp/Controllers/BookController.cs +++ b/test/AbpPerfTest/AbpPerfTest.WithAbp/Controllers/BookController.cs @@ -23,7 +23,7 @@ namespace AbpPerfTest.WithAbp.Controllers [HttpGet] public async Task> GetListAsync() { - var books = await _bookRepository.OrderBy(x => x.Id).Take(10).ToListAsync(); + var books = await (await _bookRepository.GetQueryableAsync()).OrderBy(x => x.Id).Take(10).ToListAsync(); return books .Select(b => new BookDto diff --git a/test/AbpPerfTest/_jmeter/SimpleTestPlan.jmx b/test/AbpPerfTest/_jmeter/SimpleTestPlan.jmx index 015d6b6767..a21abcac12 100644 --- a/test/AbpPerfTest/_jmeter/SimpleTestPlan.jmx +++ b/test/AbpPerfTest/_jmeter/SimpleTestPlan.jmx @@ -18,7 +18,7 @@ false 20 - 2000 + 1000 10 false From 5d8cea1bfb69b76add0cf6d5e6ad377b8ab910f8 Mon Sep 17 00:00:00 2001 From: enisn Date: Thu, 24 Dec 2020 11:36:43 +0300 Subject: [PATCH 039/217] Add @abp/cms-kit package --- modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 edc0ad64ba..cc22f5d84d 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json @@ -3,6 +3,7 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^4.1.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^4.1.0-rc.2", + "@abp/cms-kit": "4.1.0-rc.2" } } \ No newline at end of file From 972ff0749dc696542256a71007e2884509dc3f60 Mon Sep 17 00:00:00 2001 From: enisn Date: Thu, 24 Dec 2020 11:37:04 +0300 Subject: [PATCH 040/217] Update yarn --- .../host/Volo.CmsKit.Web.Unified/yarn.lock | 258 ++++++++++-------- 1 file changed, 139 insertions(+), 119 deletions(-) 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 a49fcf1e06..c59ef6d24e 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^4.1.0-rc.1": - version "4.1.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.1.0-rc.1.tgz#77f1021486a26b6aa88052bd1c45db7d978d44c2" - integrity sha512-xQJGWtWDCykDhe68DEvZPo5fGKvYt8dxaU6AlqC/wga2kfsGWGafKxnndPFfkO0wsdPl85nakAyPITaRFXjO8g== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~4.1.0-rc.1" - -"@abp/aspnetcore.mvc.ui.theme.shared@~4.1.0-rc.1": - version "4.1.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.1.0-rc.1.tgz#a316483d40274ecb3acb6d050e0328ea7c95eeca" - integrity sha512-L+e+MEwZ/rgB8htWpDEo+dyE7/wJ0Z1geJrl194/Zxz85aequyOZTX0tJ6eyrryK0BSBnk2/1v/7IkZC+qralw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~4.1.0-rc.1" - "@abp/bootstrap" "~4.1.0-rc.1" - "@abp/bootstrap-datepicker" "~4.1.0-rc.1" - "@abp/datatables.net-bs4" "~4.1.0-rc.1" - "@abp/font-awesome" "~4.1.0-rc.1" - "@abp/jquery-form" "~4.1.0-rc.1" - "@abp/jquery-validation-unobtrusive" "~4.1.0-rc.1" - "@abp/lodash" "~4.1.0-rc.1" - "@abp/luxon" "~4.1.0-rc.1" - "@abp/malihu-custom-scrollbar-plugin" "~4.1.0-rc.1" - "@abp/select2" "~4.1.0-rc.1" - "@abp/sweetalert" "~4.1.0-rc.1" - "@abp/timeago" "~4.1.0-rc.1" - "@abp/toastr" "~4.1.0-rc.1" - -"@abp/aspnetcore.mvc.ui@~4.1.0-rc.1": - version "4.1.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.1.0-rc.1.tgz#30294bd2ff5284dcc044b6d92b589b3931c06c31" - integrity sha512-X9teoUD6zwfQ7oo723Rvojg1melY2yUPiVrpeaQN/LJSy/x41TLQwFacx6LsLG19F9CyG0+QA7bqziDCQlI7KA== +"@abp/aspnetcore.mvc.ui.theme.basic@^4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.1.0-rc.2.tgz#b9462cbe36c41d68e2f44b79a3a2dba2c1b2b54a" + integrity sha512-KW3J6HnN1zZrCmrWmEcXBnGIOeuJDdp1jUECAm4Bdxi++VzfIbGlVvpcvUdT1E213reOUWi4dPhcej12DwrmDw== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~4.1.0-rc.2" + +"@abp/aspnetcore.mvc.ui.theme.shared@~4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.1.0-rc.2.tgz#d64cea1e504bcd3a08a1819025d40f3f84f0aadc" + integrity sha512-A/DRLwtJO7YCdqAgSF84wNRKjvGEQvcBocIwRxXCJEe3drxMoSwkAGjXQlxIYWZKdYbYUWDTjil2Mvwf91GUqg== + dependencies: + "@abp/aspnetcore.mvc.ui" "~4.1.0-rc.2" + "@abp/bootstrap" "~4.1.0-rc.2" + "@abp/bootstrap-datepicker" "~4.1.0-rc.2" + "@abp/datatables.net-bs4" "~4.1.0-rc.2" + "@abp/font-awesome" "~4.1.0-rc.2" + "@abp/jquery-form" "~4.1.0-rc.2" + "@abp/jquery-validation-unobtrusive" "~4.1.0-rc.2" + "@abp/lodash" "~4.1.0-rc.2" + "@abp/luxon" "~4.1.0-rc.2" + "@abp/malihu-custom-scrollbar-plugin" "~4.1.0-rc.2" + "@abp/select2" "~4.1.0-rc.2" + "@abp/sweetalert" "~4.1.0-rc.2" + "@abp/timeago" "~4.1.0-rc.2" + "@abp/toastr" "~4.1.0-rc.2" + +"@abp/aspnetcore.mvc.ui@~4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.1.0-rc.2.tgz#54bf30def590e6d25fc35f77253888f3d9f74b9c" + integrity sha512-eOh5IBn4eNAjj2i6tlLRIV/r61Ef7+Z3PNvGgdml/XCo50el4G9XE7shxuGOY+MaFMfmsST2tcJlO9iAo9n2Yw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -43,145 +43,160 @@ micromatch "^4.0.2" path "^0.12.7" -"@abp/bootstrap-datepicker@~4.1.0-rc.1": - version "4.1.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.1.0-rc.1.tgz#fa9bd12f966b6aded9ec798088513a98d1a6f717" - integrity sha512-swXBBvvw4eHgfsbMs6tfbtq+N88f9VoTvgoQE9VqbglZrTfFwHFxq8zuqmG7nQoUd+HfoXnnNBrOn4U6hYpkxA== +"@abp/bootstrap-datepicker@~4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.1.0-rc.2.tgz#d3fe863222a11771d366b1a3c246aaf34df94081" + integrity sha512-vn2xWAK3xqo5fMZJ9dOAZZmL+ZUnzZZNh3lF6uA97wTN/SbePlmHBYJpsCKIxOwbJS2HCvekHGJN/Ps4oEjlbw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~4.1.0-rc.1": - version "4.1.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.1.0-rc.1.tgz#aad1713a1edd3eca51569ee64f3d9359a0147d75" - integrity sha512-LF2ma0E65f0GZqRDPQsP5eSTQDc75QUBkwOXnZNpDvvd+ZeUmpUnejc+Zghc0PaQeVZ2/eaqBlilthvdSlW25A== +"@abp/bootstrap@~4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.1.0-rc.2.tgz#b5132cf4c4c92fe833823cf2b91ab1b0167b0ecf" + integrity sha512-SsWEV0DveBIHiG051E6aBB371D15QIsGeo+POFhvQUvrlmzMBlFCAlmH0ef8w1n+3M3C37irCgEGKctt2pbcxQ== dependencies: - "@abp/core" "~4.1.0-rc.1" + "@abp/core" "~4.1.0-rc.2" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~4.1.0-rc.1": - version "4.1.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.1.0-rc.1.tgz#d607852ace424e8fb96b333f864cda356dd8eacb" - integrity sha512-MedPAclj6iZnZZRs9IAGkQUagrv3/XZJYWHlROKeGvGvsrCBMkKlDVriQ1GhxzS9TQ2FOwtjMEPL5DOw35ESDg== +"@abp/cms-kit@4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/cms-kit/-/cms-kit-4.1.0-rc.2.tgz#d2790dd3812214ab0c8eba6e9ad2b8019889e056" + integrity sha512-bS632Qp3tN+LHVj505lUgwtu2JVOhSf3W6VAXlYG0pSy8n1ltonDZHNKO6iwvnskdPaAA4wgJPWgqjXigChx0Q== dependencies: - "@abp/utils" "^4.1.0-rc.1" + "@abp/star-rating-svg" "~4.1.0-rc.2" -"@abp/datatables.net-bs4@~4.1.0-rc.1": - version "4.1.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.1.0-rc.1.tgz#cf11cbf0941ba10ca628c806273a783769c58c7b" - integrity sha512-9sRONOte0lDoyGWBNYkAWKjGDl4IG0Ip4olqLrO4iyPyE22E9DY/6Nvl/X1SIRU4QCGSn13b14VP2JycTXFt+Q== +"@abp/core@~4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.1.0-rc.2.tgz#d306106a53fa56109751be0099785c94f43be56f" + integrity sha512-b0mOYSz8hNgZ/hBeYg8hkthJgE8CLyHNa2NcythPoIW8RR5qHmDtGoFnuFovLvLk7r+M4NWyxXRKEshSszIPyA== dependencies: - "@abp/datatables.net" "~4.1.0-rc.1" + "@abp/utils" "^4.1.0-rc.2" + +"@abp/datatables.net-bs4@~4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.1.0-rc.2.tgz#99aa1fbad91939fc23265324a3d8a45d0c1e5a7a" + integrity sha512-Y9UyqniOkx5DJO+2GGurnQE1yfRmGaQ3y7V07gKWRq+gHLUhE+vfgOLVpGM6ufdTIbLvVw5Ng+3gfOmPlUnpxg== + dependencies: + "@abp/datatables.net" "~4.1.0-rc.2" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~4.1.0-rc.1": - version "4.1.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.1.0-rc.1.tgz#882e8b00148ccd58f674253aa492b2d197bc0b58" - integrity sha512-HnWBL1i+/fEHh7JUapX20w7nWBBfr44JBvPQy6JSrOD82+BLpPBMDN02uLC8TUR5KJLHTrLecus10qaQ8FUsrA== +"@abp/datatables.net@~4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.1.0-rc.2.tgz#1a134688259d32187d822d8a49c7a68b4cc226c7" + integrity sha512-9o5g8s7ZTlThd1FMFmO7wS+MxmXgUMmiWx7Hwara9ypfJPd0vanz10bQAdTpLiDy/aa0tUmz0xOVj73yvBJm9Q== dependencies: - "@abp/jquery" "~4.1.0-rc.1" + "@abp/jquery" "~4.1.0-rc.2" datatables.net "^1.10.21" -"@abp/font-awesome@~4.1.0-rc.1": - version "4.1.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.1.0-rc.1.tgz#e17b6b7a209247ce7d4bab6ba1c89060236c100d" - integrity sha512-lHSJaZBea+eIBS25WJmP+Ual5k96vDDEQP3jwaNbqBfZhm3PUcd+JYS2/LCTHyezvtyOt+CmNOSslK3/XlyzFQ== +"@abp/font-awesome@~4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.1.0-rc.2.tgz#ecf490861c09250cf61611ac74cec5ab4392e807" + integrity sha512-6yAsf/ee2hdrHHUACql8c3gY54Hd7YAK2olHymyc3Io2hhK2VxXRc2W2oRSwbQ9GsSE+XDrEVtjIR64nBseTeg== dependencies: - "@abp/core" "~4.1.0-rc.1" + "@abp/core" "~4.1.0-rc.2" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~4.1.0-rc.1": - version "4.1.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.1.0-rc.1.tgz#d179002c7187232a0c58c57f097c97f2762a0ea7" - integrity sha512-K4tVphzYiZkM/259j1JOqDihXh92ZBwuPZcjEznySxZkk7vuSEEWXb5Utr/+e1+hAgkLS/e9Apv5ZzIv9gyvkg== +"@abp/jquery-form@~4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.1.0-rc.2.tgz#76dff67a3fe6e6ad7bd60bb909de93c09966cc0a" + integrity sha512-LGafwxyRYUbHQlJ9pPbYdkVqzdT/y1Fp4Nr4C3W5jxsJuaSICl0RPkRHIPALeoqbpEWuj6dVep6ZuO9hhxBzNw== dependencies: - "@abp/jquery" "~4.1.0-rc.1" + "@abp/jquery" "~4.1.0-rc.2" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~4.1.0-rc.1": - version "4.1.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.1.0-rc.1.tgz#7192903f39bc75923cfc5d6c2200636347eea9a5" - integrity sha512-S4dInrXybcUcZYjHsanj1fwvf9jSTtOQZnoMVL8wdrWa0OA7zYkKmzmE9Kx3pGzqVbPpvkOLuQT35YgK5jyn5Q== +"@abp/jquery-validation-unobtrusive@~4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.1.0-rc.2.tgz#1f1d395cfa47740d47303ff512592ff1993f9e13" + integrity sha512-0LXWvgfyLHVw7qRVOmY0rfVlq+yJq/nhbcVoYK+QbmKnrFu+KZg0KNMOD8wTXs8mZ1EKGQpoQKWxImtCnGrV/A== dependencies: - "@abp/jquery-validation" "~4.1.0-rc.1" + "@abp/jquery-validation" "~4.1.0-rc.2" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~4.1.0-rc.1": - version "4.1.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.1.0-rc.1.tgz#43dcc20c5deb82c9b42409c55fc23aca457632b8" - integrity sha512-mHZTCIVkDwhKMJfGRk0k78dfChp3z1k4Sy0dNPAnbIIn9PQL819yh7ug47SkJtllnYQYkj9tAedXIVxG6EdYPA== +"@abp/jquery-validation@~4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.1.0-rc.2.tgz#ad4b464fd0133eab8d08c781c7d7c4e00bc4918d" + integrity sha512-iLTobfwqDk7iiQxvv5UowxOKywsh/77VlAVktstnFG3N3Y73+JYKzM0mGM/j4zM1OrjbF9/cnPnDVX7bATPz9w== dependencies: - "@abp/jquery" "~4.1.0-rc.1" + "@abp/jquery" "~4.1.0-rc.2" jquery-validation "^1.19.2" -"@abp/jquery@~4.1.0-rc.1": - version "4.1.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.1.0-rc.1.tgz#012cd17d1cab3155a146be5b2d68ed0dd107eb11" - integrity sha512-yMRUsYEiNifbv8iEHKxoCu8F+uyB13Awm0UtU+TU+Z7+9AcS8L2RdRI47XWxSanKi7g9THEYSTE99acw9h3nNQ== +"@abp/jquery@~4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.1.0-rc.2.tgz#0f64cad5b1ae3e47d2344e5fb30c347b89d6d2bb" + integrity sha512-YubZwMJIN+UcfxfUlt3usfcLMG9WcXNpemUsdBtlKNzti562KZMIHPFLRL+DsiqvzZ74h2PxSWWsxS42Z7z0Yw== dependencies: - "@abp/core" "~4.1.0-rc.1" + "@abp/core" "~4.1.0-rc.2" jquery "~3.5.1" -"@abp/lodash@~4.1.0-rc.1": - version "4.1.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.1.0-rc.1.tgz#10b54e2a698499bba11a00c690afe7a9a7b61d41" - integrity sha512-MQoWBvj0EMi23s7beBbhioO7mlFk0Xhdes7dgvJLFQRafjpkjZk2YRbHmhvT3BCimYI7SRD3xFTN28Z5I8MlUA== +"@abp/lodash@~4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.1.0-rc.2.tgz#9281c641ab7b7b33e7acf12815dc461e7ae967b9" + integrity sha512-RqdekrAyLPaLNJddmrq89EdrI1xg4296tOafFLHvirgRWisJTIa9bflTOwMwEg9FNdLJgA0zHi4WdAMer0qZdA== dependencies: - "@abp/core" "~4.1.0-rc.1" + "@abp/core" "~4.1.0-rc.2" lodash "^4.17.15" -"@abp/luxon@~4.1.0-rc.1": - version "4.1.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.1.0-rc.1.tgz#d4db198d68ce79364665291d22540089957cfc84" - integrity sha512-VTWsmsBj7dTGBzoIG9HU2Z7PpwjWQFRGCwIekvDksaYBVE4tCYS0AMcKsracYha+oY/uOZL1o5ztWgnfHnAmHQ== +"@abp/luxon@~4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.1.0-rc.2.tgz#78fc1cf651d7c19b87a31823cd3ce68961d6b1e6" + integrity sha512-U4e9uGZlg9xj9tBNP337v3wiaSR6qxWsBgh/duQGWrqV+75LlQjYcZaPoXDidUUS6U6epDSR2pc2T39rahcgSQ== dependencies: - "@abp/core" "~4.1.0-rc.1" + "@abp/core" "~4.1.0-rc.2" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~4.1.0-rc.1": - version "4.1.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.1.0-rc.1.tgz#13b56b0edcf468845b765eb8e58f663bd4263919" - integrity sha512-7ZJdZz8Hw35XGgQF/i1fEzknZYTzmtITZXB+DuVUISBLH0DKisqIREdYiHeGTFhY5fQqbW8ImY65WacKAImlYw== +"@abp/malihu-custom-scrollbar-plugin@~4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.1.0-rc.2.tgz#36553e71052cad9734e0c9b2c65759e538468648" + integrity sha512-JQ6PCcj5qmF9MxNRPAsKHHnqBPCdn4lQnwxZrHcG9tD70Gx+NfC4UH41tqXI+htba4k0PHRyH2y39Q1iJm0NFA== dependencies: - "@abp/core" "~4.1.0-rc.1" + "@abp/core" "~4.1.0-rc.2" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~4.1.0-rc.1": - version "4.1.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.1.0-rc.1.tgz#316e6de20ea0d02000c176ff6522bccaf1fbaa59" - integrity sha512-UZIXmxke8y9PUBjk8mBDyEY2y8jmYhssFt5SVEWEfWOg9NG6fvkOa+JCZl9wS9jtyPAHCMfCJIeLqFpkxiL3Vw== +"@abp/select2@~4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.1.0-rc.2.tgz#c48e865f401ddce32dff2a7a14ae07c4bde2f57b" + integrity sha512-YYK/SIqXQcSDQFMVg/ogohc76d4JDrOVQEbzfkNNI5bKVJo+hkqtNzAwV9FLdPZZNw15QMv0eF1ie4aUtIxyaA== dependencies: - "@abp/core" "~4.1.0-rc.1" + "@abp/core" "~4.1.0-rc.2" select2 "^4.0.13" -"@abp/sweetalert@~4.1.0-rc.1": - version "4.1.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.1.0-rc.1.tgz#13c72aa4d93017316908cbbb67f8587eadec79e2" - integrity sha512-0JNLgxAc/iFYdgtn84S6L1tL6mShbMMvFKLpip8fTsLX1PFAf1o4sNOjHCUZ6J1+2rrGgkBc/azMKBVep2ULQA== +"@abp/star-rating-svg@~4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/star-rating-svg/-/star-rating-svg-4.1.0-rc.2.tgz#558c681eb591847b3e8f114cbe610e4331f8a0a2" + integrity sha512-LNFCfytarGhqS+91lxYHQKMvlbHMDpjU0Knj8qyefNtQ+rbM2CEspWEtcducim+Qn4brqIHRudUvLI+eEC/0yQ== dependencies: - "@abp/core" "~4.1.0-rc.1" + "@abp/jquery" "~4.1.0-rc.2" + star-rating-svg "^3.5.0" + +"@abp/sweetalert@~4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.1.0-rc.2.tgz#cdcaf8e9a33cf218a687fd6a42cfe1c85d89c6b7" + integrity sha512-sjQd8TF9oUnaQ1OPTGdVyAfWqSZEk4bRbC/qw2CouEOfRLatzkC0JcmzFLN0f5N1am1RQwkFakpENKH7NqTCvg== + dependencies: + "@abp/core" "~4.1.0-rc.2" sweetalert "^2.1.2" -"@abp/timeago@~4.1.0-rc.1": - version "4.1.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.1.0-rc.1.tgz#e72fcdbde3b79bbe2ad8565abb45ba09af527ce0" - integrity sha512-E2kobQoglVD+dNFmuSJgbqbjaON65lNaDeiABesvgDnm308YBDyEvIZ746yqBfJHnMqyBVX8VHOcnY49QJfXkA== +"@abp/timeago@~4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.1.0-rc.2.tgz#445d043ae482b76799b496ae6565abfaf75a34b9" + integrity sha512-wWx56EZMUGIfqJV5JLCvUp4RVhKXHYLQaVNQSF8E05COXmSQwFThVS7vbuiODFp2BGm6RAqCVtZDCreu2B8z9Q== dependencies: - "@abp/jquery" "~4.1.0-rc.1" + "@abp/jquery" "~4.1.0-rc.2" timeago "^1.6.7" -"@abp/toastr@~4.1.0-rc.1": - version "4.1.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.1.0-rc.1.tgz#cff01b9a937e6e38679428724113cc62ea562743" - integrity sha512-HYiYukOA3HjSpFD9ZKMrfU/u/T/mzfpLhtFVz6bG3i5ciSgaOrYFm1pWVG1tA2yg3oelBymYJ9oW29GuPTk30Q== +"@abp/toastr@~4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.1.0-rc.2.tgz#1af16fa8687201b6b9c7229d087a4233998703b9" + integrity sha512-g+Jl5H1ZHoJ4JwWuix0xA+GMFY42pwq8WYjxP6qE2/Y2aixYHVIui15eBqF2L06yXOt53YFcC1+pxjrp91xHxw== dependencies: - "@abp/jquery" "~4.1.0-rc.1" + "@abp/jquery" "~4.1.0-rc.2" toastr "^2.1.4" -"@abp/utils@^4.1.0-rc.1": - version "4.1.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.1.0-rc.1.tgz#2863867985db9d178a5ce4347309f060f1ce6142" - integrity sha512-C8e+x5/IdkJWQ8gLtO7ygsth5sd1iXKn0ARu/5u0g11nMjHsMY9Qkwg5QrnpHp2ws1+FL1Dg67omrQp9+KK5SA== +"@abp/utils@^4.1.0-rc.2": + version "4.1.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.1.0-rc.2.tgz#eb6dbf0ee493d0f050b37347d2d6d283098aedae" + integrity sha512-V2k5I89lVBoeGIKgg4p2H9GlMAcDWbctwKZPVwBEMVEVm1uTR2xQAWdTdSFd5Q8I8Xsf/aIG8ELM7l5j2h7/zQ== dependencies: just-compare "^1.3.0" @@ -2321,6 +2336,11 @@ stack-trace@0.0.10: resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= +star-rating-svg@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/star-rating-svg/-/star-rating-svg-3.5.0.tgz#72b147015a433da63153fb607af6d51c7c1ea364" + integrity sha1-crFHAVpDPaYxU/tgevbVHHweo2Q= + static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" From 02810032e8ff1b6bd3eb0d68f5ce0744534e1372 Mon Sep 17 00:00:00 2001 From: enisn Date: Thu, 24 Dec 2020 11:37:20 +0300 Subject: [PATCH 041/217] Add migrations for Content & Tags --- ...224075340_Added_ContentAndTags.Designer.cs | 1577 +++++++++++++++++ .../20201224075340_Added_ContentAndTags.cs | 99 ++ .../UnifiedDbContextModelSnapshot.cs | 163 ++ 3 files changed, 1839 insertions(+) create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201224075340_Added_ContentAndTags.Designer.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201224075340_Added_ContentAndTags.cs diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201224075340_Added_ContentAndTags.Designer.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201224075340_Added_ContentAndTags.Designer.cs new file mode 100644 index 0000000000..28f86174e7 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201224075340_Added_ContentAndTags.Designer.cs @@ -0,0 +1,1577 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Volo.Abp.EntityFrameworkCore; +using Volo.CmsKit.EntityFrameworkCore; + +namespace Volo.CmsKit.Migrations +{ + [DbContext(typeof(UnifiedDbContext))] + [Migration("20201224075340_Added_ContentAndTags")] + partial class Added_ContentAndTags + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .UseIdentityColumns() + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("ProductVersion", "5.0.1"); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)") + .HasColumnName("ApplicationName"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("BrowserInfo"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("ClientId"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("ClientIpAddress"); + + b.Property("ClientName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("ClientName"); + + b.Property("Comments") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Comments"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("CorrelationId"); + + b.Property("Exceptions") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("Exceptions"); + + b.Property("ExecutionDuration") + .HasColumnType("int") + .HasColumnName("ExecutionDuration"); + + b.Property("ExecutionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("HttpMethod") + .HasMaxLength(16) + .HasColumnType("nvarchar(16)") + .HasColumnName("HttpMethod"); + + b.Property("HttpStatusCode") + .HasColumnType("int") + .HasColumnName("HttpStatusCode"); + + b.Property("ImpersonatorTenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("ImpersonatorTenantId"); + + b.Property("ImpersonatorUserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("ImpersonatorUserId"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("TenantName") + .HasColumnType("nvarchar(max)"); + + b.Property("Url") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Url"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("UserId"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ExecutionTime"); + + b.HasIndex("TenantId", "UserId", "ExecutionTime"); + + b.ToTable("AbpAuditLogs"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnType("uniqueidentifier") + .HasColumnName("AuditLogId"); + + b.Property("ExecutionDuration") + .HasColumnType("int") + .HasColumnName("ExecutionDuration"); + + b.Property("ExecutionTime") + .HasColumnType("datetime2") + .HasColumnName("ExecutionTime"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("MethodName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("MethodName"); + + b.Property("Parameters") + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasColumnName("Parameters"); + + b.Property("ServiceName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("ServiceName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime"); + + b.ToTable("AbpAuditLogActions"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnType("uniqueidentifier") + .HasColumnName("AuditLogId"); + + b.Property("ChangeTime") + .HasColumnType("datetime2") + .HasColumnName("ChangeTime"); + + b.Property("ChangeType") + .HasColumnType("tinyint") + .HasColumnName("ChangeType"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("EntityId"); + + b.Property("EntityTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("EntityTypeFullName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("EntityTypeFullName"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "EntityTypeFullName", "EntityId"); + + b.ToTable("AbpEntityChanges"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("EntityChangeId") + .HasColumnType("uniqueidentifier"); + + b.Property("NewValue") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("NewValue"); + + b.Property("OriginalValue") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("OriginalValue"); + + b.Property("PropertyName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("PropertyName"); + + b.Property("PropertyTypeFullName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("PropertyTypeFullName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("EntityChangeId"); + + b.ToTable("AbpEntityPropertyChanges"); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpFeatureValues"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsStatic") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("Regex") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("RegexDescription") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Required") + .HasColumnType("bit"); + + b.Property("ValueType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("AbpClaimTypes"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityLinkUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("SourceTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("SourceUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("TargetTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("TargetUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId") + .IsUnique() + .HasFilter("[SourceTenantId] IS NOT NULL AND [TargetTenantId] IS NOT NULL"); + + b.ToTable("AbpLinkUsers"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDefault") + .HasColumnType("bit") + .HasColumnName("IsDefault"); + + b.Property("IsPublic") + .HasColumnType("bit") + .HasColumnName("IsPublic"); + + b.Property("IsStatic") + .HasColumnType("bit") + .HasColumnName("IsStatic"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpRoles"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AbpRoleClaims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentitySecurityLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Action") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("CreationTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Identity") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Action"); + + b.HasIndex("TenantId", "ApplicationName"); + + b.HasIndex("TenantId", "Identity"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AbpSecurityLogs"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AccessFailedCount") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(0) + .HasColumnName("AccessFailedCount"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Email"); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("EmailConfirmed"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsExternal") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsExternal"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("LockoutEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("LockoutEnabled"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Name"); + + b.Property("NormalizedEmail") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("NormalizedEmail"); + + b.Property("NormalizedUserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("NormalizedUserName"); + + b.Property("PasswordHash") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("PasswordHash"); + + b.Property("PhoneNumber") + .HasMaxLength(16) + .HasColumnType("nvarchar(16)") + .HasColumnName("PhoneNumber"); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("PhoneNumberConfirmed"); + + b.Property("SecurityStamp") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("SecurityStamp"); + + b.Property("Surname") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Surname"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("TwoFactorEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("TwoFactorEnabled"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("Email"); + + b.HasIndex("NormalizedEmail"); + + b.HasIndex("NormalizedUserName"); + + b.HasIndex("UserName"); + + b.ToTable("AbpUsers"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserClaims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderDisplayName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(196) + .HasColumnType("nvarchar(196)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "LoginProvider"); + + b.HasIndex("LoginProvider", "ProviderKey"); + + b.ToTable("AbpUserLogins"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("OrganizationUnitId", "UserId"); + + b.HasIndex("UserId", "OrganizationUnitId"); + + b.ToTable("AbpUserOrganizationUnits"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId", "UserId"); + + b.ToTable("AbpUserRoles"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Name") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AbpUserTokens"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(95) + .HasColumnType("nvarchar(95)") + .HasColumnName("Code"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Code"); + + b.HasIndex("ParentId"); + + b.ToTable("AbpOrganizationUnits"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uniqueidentifier"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("OrganizationUnitId", "RoleId"); + + b.HasIndex("RoleId", "OrganizationUnitId"); + + b.ToTable("AbpOrganizationUnitRoles"); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpPermissionGrants"); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpSettings"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("AbpTenants"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); + + b.HasKey("TenantId", "Name"); + + b.ToTable("AbpTenantConnectionStrings"); + }); + + modelBuilder.Entity("Volo.CmsKit.Comments.Comment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("RepliedCommentId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Text") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "RepliedCommentId"); + + b.HasIndex("TenantId", "EntityType", "EntityId"); + + b.ToTable("CmsComments"); + }); + + modelBuilder.Entity("Volo.CmsKit.Contents.Content", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(2147483647) + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "EntityType", "EntityId"); + + b.ToTable("CmsContents"); + }); + + modelBuilder.Entity("Volo.CmsKit.Ratings.Rating", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("StarCount") + .HasColumnType("smallint"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "EntityType", "EntityId", "CreatorId"); + + b.ToTable("CmsRatings"); + }); + + modelBuilder.Entity("Volo.CmsKit.Reactions.UserReaction", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ReactionName") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("nvarchar(32)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "EntityType", "EntityId", "ReactionName"); + + b.HasIndex("TenantId", "CreatorId", "EntityType", "EntityId", "ReactionName"); + + b.ToTable("CmsUserReactions"); + }); + + modelBuilder.Entity("Volo.CmsKit.Tags.EntityTag", b => + { + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("EntityId") + .HasColumnType("uniqueidentifier"); + + b.Property("TagId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("TenantId", "EntityId", "TagId"); + + b.HasIndex("TenantId", "EntityId", "TagId"); + + b.ToTable("CmsEntityTags"); + }); + + modelBuilder.Entity("Volo.CmsKit.Tags.Tag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("HexColor") + .IsRequired() + .HasMaxLength(6) + .HasColumnType("nvarchar(6)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("nvarchar(32)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name"); + + b.ToTable("CmsTags"); + }); + + modelBuilder.Entity("Volo.CmsKit.Users.CmsUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Email"); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("EmailConfirmed"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Name"); + + b.Property("PhoneNumber") + .HasMaxLength(16) + .HasColumnType("nvarchar(16)") + .HasColumnName("PhoneNumber"); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("PhoneNumberConfirmed"); + + b.Property("Surname") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Surname"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Email"); + + b.HasIndex("TenantId", "UserName"); + + b.ToTable("CmsUsers"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("Actions") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("EntityChanges") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.EntityChange", null) + .WithMany("PropertyChanges") + .HasForeignKey("EntityChangeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany("Claims") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Claims") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Logins") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("OrganizationUnits") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Roles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Tokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("ParentId"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany("Roles") + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.HasOne("Volo.Abp.TenantManagement.Tenant", null) + .WithMany("ConnectionStrings") + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Navigation("Actions"); + + b.Navigation("EntityChanges"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Navigation("PropertyChanges"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Navigation("Claims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Navigation("Claims"); + + b.Navigation("Logins"); + + b.Navigation("OrganizationUnits"); + + b.Navigation("Roles"); + + b.Navigation("Tokens"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Navigation("Roles"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => + { + b.Navigation("ConnectionStrings"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201224075340_Added_ContentAndTags.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201224075340_Added_ContentAndTags.cs new file mode 100644 index 0000000000..572bef4266 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201224075340_Added_ContentAndTags.cs @@ -0,0 +1,99 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace Volo.CmsKit.Migrations +{ + public partial class Added_ContentAndTags : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "CmsContents", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + EntityType = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), + EntityId = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), + Value = table.Column(type: "nvarchar(max)", maxLength: 2147483647, nullable: false), + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), + ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true), + LastModificationTime = table.Column(type: "datetime2", nullable: true), + LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), + IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), + DeleterId = table.Column(type: "uniqueidentifier", nullable: true), + DeletionTime = table.Column(type: "datetime2", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_CmsContents", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "CmsEntityTags", + columns: table => new + { + TagId = table.Column(type: "uniqueidentifier", nullable: false), + EntityId = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_CmsEntityTags", x => new { x.TenantId, x.EntityId, x.TagId }); + }); + + migrationBuilder.CreateTable( + name: "CmsTags", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + EntityType = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), + Name = table.Column(type: "nvarchar(32)", maxLength: 32, nullable: false), + HexColor = table.Column(type: "nvarchar(6)", maxLength: 6, nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), + ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true), + LastModificationTime = table.Column(type: "datetime2", nullable: true), + LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), + IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), + DeleterId = table.Column(type: "uniqueidentifier", nullable: true), + DeletionTime = table.Column(type: "datetime2", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_CmsTags", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_CmsContents_TenantId_EntityType_EntityId", + table: "CmsContents", + columns: new[] { "TenantId", "EntityType", "EntityId" }); + + migrationBuilder.CreateIndex( + name: "IX_CmsEntityTags_TenantId_EntityId_TagId", + table: "CmsEntityTags", + columns: new[] { "TenantId", "EntityId", "TagId" }); + + migrationBuilder.CreateIndex( + name: "IX_CmsTags_TenantId_Name", + table: "CmsTags", + columns: new[] { "TenantId", "Name" }); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "CmsContents"); + + migrationBuilder.DropTable( + name: "CmsEntityTags"); + + migrationBuilder.DropTable( + name: "CmsTags"); + } + } +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs index a082d0db17..78f5a086d4 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs @@ -1096,6 +1096,78 @@ namespace Volo.CmsKit.Migrations b.ToTable("CmsComments"); }); + modelBuilder.Entity("Volo.CmsKit.Contents.Content", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(2147483647) + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "EntityType", "EntityId"); + + b.ToTable("CmsContents"); + }); + modelBuilder.Entity("Volo.CmsKit.Ratings.Rating", b => { b.Property("Id") @@ -1175,6 +1247,97 @@ namespace Volo.CmsKit.Migrations b.ToTable("CmsUserReactions"); }); + modelBuilder.Entity("Volo.CmsKit.Tags.EntityTag", b => + { + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("EntityId") + .HasColumnType("uniqueidentifier"); + + b.Property("TagId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("TenantId", "EntityId", "TagId"); + + b.HasIndex("TenantId", "EntityId", "TagId"); + + b.ToTable("CmsEntityTags"); + }); + + modelBuilder.Entity("Volo.CmsKit.Tags.Tag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("HexColor") + .IsRequired() + .HasMaxLength(6) + .HasColumnType("nvarchar(6)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("nvarchar(32)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name"); + + b.ToTable("CmsTags"); + }); + modelBuilder.Entity("Volo.CmsKit.Users.CmsUser", b => { b.Property("Id") From c7f480d30ed0102f7cb239eeeae833b5216359fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 24 Dec 2020 11:55:46 +0300 Subject: [PATCH 042/217] Add CreateFilteredQueryAsync --- .../Services/AbstractKeyReadOnlyAppService.cs | 26 ++++++++++++++++++- .../Application/Services/CrudAppService.cs | 4 +-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyReadOnlyAppService.cs b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyReadOnlyAppService.cs index b2e11678f8..54123bc843 100644 --- a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyReadOnlyAppService.cs +++ b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/AbstractKeyReadOnlyAppService.cs @@ -62,7 +62,7 @@ namespace Volo.Abp.Application.Services { await CheckGetListPolicyAsync(); - var query = CreateFilteredQuery(input); + var query = await CreateFilteredQueryAsync(input); var totalCount = await AsyncExecuter.CountAsync(query); @@ -160,11 +160,35 @@ namespace Volo.Abp.Application.Services /// methods. /// /// The input. + [Obsolete("Override the CreateFilteredQueryAsync method instead.")] protected virtual IQueryable CreateFilteredQuery(TGetListInput input) { return ReadOnlyRepository; } + /// + /// This method should create based on given input. + /// It should filter query if needed, but should not do sorting or paging. + /// Sorting should be done in and paging should be done in + /// methods. + /// + /// The input. + protected virtual async Task> CreateFilteredQueryAsync(TGetListInput input) + { + /* If user has overridden the CreateFilteredQuery method, + * we don't want to make breaking change in this point. + */ +#pragma warning disable 618 + var query = CreateFilteredQuery(input); +#pragma warning restore 618 + if (!ReferenceEquals(query, ReadOnlyRepository)) + { + return query; + } + + return await ReadOnlyRepository.GetQueryableAsync(); + } + /// /// Maps to . /// It internally calls the by default. diff --git a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/CrudAppService.cs b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/CrudAppService.cs index 111359d7f3..fffde41ba7 100644 --- a/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/CrudAppService.cs +++ b/framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/CrudAppService.cs @@ -80,12 +80,12 @@ namespace Volo.Abp.Application.Services Repository = repository; } - protected async override Task DeleteByIdAsync(TKey id) + protected override async Task DeleteByIdAsync(TKey id) { await Repository.DeleteAsync(id); } - protected async override Task GetEntityByIdAsync(TKey id) + protected override async Task GetEntityByIdAsync(TKey id) { return await Repository.GetAsync(id); } From 5dad6818f7bea50c15944614d4cf2ef45a8a851e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 24 Dec 2020 12:12:42 +0300 Subject: [PATCH 043/217] Override WithDetailsAsync for EF Core. --- .../EntityFrameworkCore/EfCoreRepository.cs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs index 549318eef8..16c8e6d745 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs @@ -312,8 +312,24 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore [Obsolete("Use WithDetailsAsync method.")] public override IQueryable WithDetails(params Expression>[] propertySelectors) { - var query = GetQueryable(); + return IncludeDetails( + GetQueryable(), + propertySelectors + ); + } + public override async Task> WithDetailsAsync(params Expression>[] propertySelectors) + { + return IncludeDetails( + await GetQueryableAsync(), + propertySelectors + ); + } + + private static IQueryable IncludeDetails( + IQueryable query, + Expression>[] propertySelectors) + { if (!propertySelectors.IsNullOrEmpty()) { foreach (var propertySelector in propertySelectors) From 5aade06e8bfe98c8a270e2719b57ca819f646ac7 Mon Sep 17 00:00:00 2001 From: enisn Date: Thu, 24 Dec 2020 12:13:27 +0300 Subject: [PATCH 044/217] Update wwwroot of CmsKit --- .../star-rating-svg/css/star-rating-svg.css | 37 +++++++++++++++++++ .../js/jquery.star-rating-svg.min.js | 1 + 2 files changed, 38 insertions(+) create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/star-rating-svg/css/star-rating-svg.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/star-rating-svg/js/jquery.star-rating-svg.min.js diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/star-rating-svg/css/star-rating-svg.css b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/star-rating-svg/css/star-rating-svg.css new file mode 100644 index 0000000000..2c0114687f --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/star-rating-svg/css/star-rating-svg.css @@ -0,0 +1,37 @@ +.jq-stars { + display: inline-block; +} + +.jq-rating-label { + font-size: 22px; + display: inline-block; + position: relative; + vertical-align: top; + font-family: helvetica, arial, verdana; +} + +.jq-star { + width: 100px; + height: 100px; + display: inline-block; + cursor: pointer; +} + +.jq-star-svg { + width: 100%; + height: 100% ; +} + +.jq-star:hover .fs-star-svg polygon { +} + +.jq-star-svg polygon { + stroke: #000; + stroke-linejoin: round; +} + +/* un-used */ +.jq-shadow { + -webkit-filter: drop-shadow( -2px -2px 2px #888 ); + filter: drop-shadow( -2px -2px 2px #888 ); +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/star-rating-svg/js/jquery.star-rating-svg.min.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/star-rating-svg/js/jquery.star-rating-svg.min.js new file mode 100644 index 0000000000..df947cfe2b --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/star-rating-svg/js/jquery.star-rating-svg.min.js @@ -0,0 +1 @@ +!function(a){"use strict";var b="starRating",c=function(){},d={totalStars:5,useFullStars:!1,emptyColor:"lightgray",hoverColor:"orange",activeColor:"gold",useGradient:!0,readOnly:!1,disableAfterRate:!0,starGradient:{start:"#FEF7CD",end:"#FF9511"},strokeWidth:0,strokeColor:"black",initialRating:0,starSize:40,callback:c,onHover:c,onLeave:c},e=function(c,e){var f;this.element=c,this.$el=a(c),this.settings=a.extend({},d,e),f=this.$el.data("rating")||this.settings.initialRating,this._state={rating:(Math.round(2*f)/2).toFixed(1)},this._uid=Math.floor(999*Math.random()),e.starGradient||this.settings.useGradient||(this.settings.starGradient.start=this.settings.starGradient.end=this.settings.activeColor),this._defaults=d,this._name=b,this.init()},f={init:function(){this.renderMarkup(),this.addListeners(),this.initRating()},addListeners:function(){this.settings.readOnly||(this.$stars.on("mouseover",this.hoverRating.bind(this)),this.$stars.on("mouseout",this.restoreState.bind(this)),this.$stars.on("click",this.handleRating.bind(this)))},hoverRating:function(a){var b=this.getIndex(a);this.paintStars(b,"hovered"),this.settings.onHover(b+1,this._state.rating,this.$el)},handleRating:function(a){var b=this.getIndex(a),c=b+1;this.applyRating(c,this.$el),this.executeCallback(c,this.$el),this.settings.disableAfterRate&&this.$stars.off()},applyRating:function(a){var b=a-1;this.paintStars(b,"active"),this._state.rating=b+1},restoreState:function(a){var b=this.getIndex(a),c=this._state.rating||-1;this.paintStars(c-1,"active"),this.settings.onLeave(b+1,this._state.rating,this.$el)},getIndex:function(b){var c=a(b.currentTarget),d=c.width(),e=a(b.target).attr("data-side");e=e?e:this.getOffsetByPixel(b,c,d),e=this.settings.useFullStars?"right":e;var f=c.index()-("left"===e?.5:0);return f=.5>f&&b.offsetX=d&&!this.settings.useFullStars?"left":"right"},initRating:function(){this.paintStars(this._state.rating-1,"active")},paintStars:function(b,c){var d,e,f,g;a.each(this.$stars,function(h,i){d=a(i).find('polygon[data-side="left"]'),e=a(i).find('polygon[data-side="right"]'),f=g=b>=h?c:"empty",f=h-b===.5?c:f,d.attr("class","svg-"+f+"-"+this._uid),e.attr("class","svg-"+g+"-"+this._uid)}.bind(this))},renderMarkup:function(){for(var a='
"+this.getLinearGradient(this._uid+"_SVGID_1_",this.settings.emptyColor,this.settings.emptyColor)+this.getLinearGradient(this._uid+"_SVGID_2_",this.settings.hoverColor,this.settings.hoverColor)+this.getLinearGradient(this._uid+"_SVGID_3_",this.settings.starGradient.start,this.settings.starGradient.end)+'
',b="",c=0;c '},executeCallback:function(a,b){var c=this.settings.callback;c(a,b)}},g={unload:function(){var c="plugin_"+b,d=a(this),e=d.data(c).$stars;e.off(),d.removeData(c).remove()},setRating:function(c,d){var e="plugin_"+b,f=a(this),g=f.data(e);c>g.settings.totalStars||0>c||(d&&(c=Math.round(c)),g.applyRating(c))},getRating:function(){var c="plugin_"+b,d=a(this),e=d.data(c);return e._state.rating}};a.extend(e.prototype,f),a.fn[b]=function(c){if(!a.isPlainObject(c)){if(g.hasOwnProperty(c))return g[c].apply(this,Array.prototype.slice.call(arguments,1));a.error("Method "+c+" does not exist on "+b+".js")}return this.each(function(){a.data(this,"plugin_"+b)||a.data(this,"plugin_"+b,new e(this,c))})}}(jQuery,window,document); \ No newline at end of file From fdb55de819abafb33811d325dfe0d61a09394b2e Mon Sep 17 00:00:00 2001 From: enisn Date: Thu, 24 Dec 2020 12:16:24 +0300 Subject: [PATCH 045/217] Add ContentViewComponent --- .../Volo/CmsKit/Contents/ContentDto.cs | 10 ++++ .../CmsKit/Contents/IContentAppService.cs | 10 ++++ ...msKitCommonApplicationAutoMapperProfile.cs | 13 +++++ .../CmsKit/CmsKitCommonApplicationModule.cs | 7 +++ .../Volo/CmsKit/Contents/ContentAppService.cs | 25 +++++++++ .../Contents/ContentViewComponent.cs | 55 +++++++++++++++++++ .../Shared/Components/Contents/Default.cshtml | 8 +++ .../CmsKit/Contents/IContentRepository.cs | 11 +++- .../Contents/EfCoreContentRepository.cs | 17 ++++++ .../Contents/MongoContentRepository.cs | 17 ++++++ 10 files changed, 171 insertions(+), 2 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/ContentDto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentAppService.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationAutoMapperProfile.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/ContentViewComponent.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/Default.cshtml diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/ContentDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/ContentDto.cs new file mode 100644 index 0000000000..100626fb6d --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/ContentDto.cs @@ -0,0 +1,10 @@ +using System; +using Volo.Abp.Application.Dtos; + +namespace Volo.CmsKit.Contents +{ + public class ContentDto : EntityDto + { + public string Value { get; set; } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentAppService.cs new file mode 100644 index 0000000000..0ac862e787 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentAppService.cs @@ -0,0 +1,10 @@ +using System.Threading.Tasks; +using Volo.CmsKit.Contents; + +namespace Volo.CmsKit.Contents +{ + public interface IContentAppService + { + Task GetAsync(string entityType, string entityId); + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationAutoMapperProfile.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationAutoMapperProfile.cs new file mode 100644 index 0000000000..b7cb5e2210 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationAutoMapperProfile.cs @@ -0,0 +1,13 @@ +using AutoMapper; +using Volo.CmsKit.Contents; + +namespace Volo.CmsKit.Common.Application.Volo.CmsKit +{ + public class CmsKitCommonApplicationAutoMapperProfile : Profile + { + public CmsKitCommonApplicationAutoMapperProfile() + { + CreateMap(); + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationModule.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationModule.cs index 5300afdcda..8fa08fa950 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationModule.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationModule.cs @@ -12,5 +12,12 @@ namespace Volo.CmsKit )] public class CmsKitCommonApplicationModule : AbpModule { + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.AddMaps(validate: true); + }); + } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs new file mode 100644 index 0000000000..77f2fe39ef --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Volo.CmsKit.Contents +{ + public class ContentAppService : CmsKitAppServiceBase, IContentAppService + { + private readonly IContentRepository _contentRepository; + + public ContentAppService(IContentRepository contentRepository) + { + _contentRepository = contentRepository; + } + + public async Task GetAsync(string entityType, string entityId) + { + var entity = await _contentRepository.FindAsync(entityType, entityId); // Tenant??? + + return ObjectMapper.Map(entity); + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/ContentViewComponent.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/ContentViewComponent.cs new file mode 100644 index 0000000000..012768b0d7 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/ContentViewComponent.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Options; +using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc.UI; +using Volo.Abp.AspNetCore.Mvc.UI.Widgets; +using Volo.CmsKit.Contents; +using Volo.CmsKit.Web.Contents; + +namespace Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Contents +{ + [ViewComponent(Name = "CmsContent")] + public class ContentViewComponent : AbpViewComponent + { + private readonly IContentRenderer contentRenderer; + private readonly IContentAppService contentAppService; + + public ContentViewComponent( + IContentRenderer contentRenderer, + IContentAppService contentAppService) + { + this.contentRenderer = contentRenderer; + this.contentAppService = contentAppService; + } + + public virtual async Task InvokeAsync( + string entityType, + string entityId) + { + var content = await contentAppService.GetAsync(entityType, entityId); + var viewModel = new ContentViewModel + { + EntityId = entityId, + EntityType = entityType, + ContentId = content.Id, + Rendered = await contentRenderer.RenderAsync(content.Value) + }; + + return View("~/Pages/CmsKit/Shared/Components/Contents/Default.cshtml", viewModel); + } + + public class ContentViewModel + { + public Guid ContentId { get; set; } + public string EntityType { get; set; } + + public string EntityId { get; set; } + + public string Rendered { get; set; } + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/Default.cshtml b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/Default.cshtml new file mode 100644 index 0000000000..f5bd0ba344 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/Default.cshtml @@ -0,0 +1,8 @@ +@using Microsoft.AspNetCore.Mvc.Localization +@using Volo.CmsKit.Localization +@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Contents +@model ContentViewComponent.ContentViewModel + +
+ @Html.Raw(Model.Rendered) +
diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/IContentRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/IContentRepository.cs index 994d2bd4ab..2adbab8e5a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/IContentRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/IContentRepository.cs @@ -1,10 +1,17 @@ -using System; +using JetBrains.Annotations; +using System; +using System.Threading; +using System.Threading.Tasks; using Volo.Abp.Domain.Repositories; namespace Volo.CmsKit.Contents { public interface IContentRepository : IBasicRepository { - + Task FindAsync( + [NotNull] string entityType, + [NotNull] string entityId, + Guid? tenantId = null, + CancellationToken cancellationToken = default); } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Contents/EfCoreContentRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Contents/EfCoreContentRepository.cs index 592fccb883..3522eed022 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Contents/EfCoreContentRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Contents/EfCoreContentRepository.cs @@ -1,4 +1,6 @@ using System; +using System.Threading; +using System.Threading.Tasks; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; using Volo.CmsKit.EntityFrameworkCore; @@ -10,5 +12,20 @@ namespace Volo.CmsKit.Contents public EfCoreContentRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) { } + + public Task FindAsync( + string entityType, + string entityId, + Guid? tenantId = null, + CancellationToken cancellationToken = default) + { + return FindAsync(x => + !x.IsDeleted && + x.EntityType == entityType && + x.EntityId == entityId && + x.TenantId == tenantId, + cancellationToken: cancellationToken + ); + } } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Contents/MongoContentRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Contents/MongoContentRepository.cs index e29b53d417..f9a65bb469 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Contents/MongoContentRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Contents/MongoContentRepository.cs @@ -1,4 +1,6 @@ using System; +using System.Threading; +using System.Threading.Tasks; using Volo.Abp.Domain.Repositories.MongoDB; using Volo.Abp.MongoDB; using Volo.CmsKit.Contents; @@ -10,5 +12,20 @@ namespace Volo.CmsKit.MongoDB.Contents public MongoContentRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) { } + + public Task FindAsync( + string entityType, + string entityId, + Guid? tenantId = null, + CancellationToken cancellationToken = default) + { + return FindAsync(x => + !x.IsDeleted && + x.EntityType == entityType && + x.EntityId == entityId && + x.TenantId == tenantId, + cancellationToken: cancellationToken + ); + } } } \ No newline at end of file From 5ff01929ee7c9e9e0ef2e8fdf5833fae908e75b8 Mon Sep 17 00:00:00 2001 From: enisn Date: Thu, 24 Dec 2020 12:17:36 +0300 Subject: [PATCH 046/217] Render static content in a razor page --- .../host/Volo.CmsKit.Web.Unified/Pages/Index.cshtml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) 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 e61017dd4b..78986a8a99 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 @@ -7,6 +7,7 @@ @using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Commenting @using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Rating @using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.ReactionSelection +@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Contents @model IndexModel @inject IStringLocalizer Localizer

CMS Kit DEMO

@@ -14,10 +15,9 @@ -

- "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." -

-

- Martin Fowler

+ + @await Component.InvokeAsync(typeof(ContentViewComponent), new { entityType = "quote", entityId = "1" }) +
@@ -71,4 +71,4 @@ @await Component.InvokeAsync(typeof(CommentingViewComponent), new { entityType = "quote", entityId = "2" }) } - + From d479e70e40401682912a26d9a629122827fdc55a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 24 Dec 2020 15:25:05 +0300 Subject: [PATCH 047/217] Implement async transaction methods. --- .../Repositories/Dapper/DapperRepository.cs | 12 ++++- .../Repositories/Dapper/IDapperRepository.cs | 12 ++++- .../EfCoreRepositoryExtensions.cs | 15 ++++++ .../EntityFrameworkCore/EfCoreRepository.cs | 47 ++++++++++++------- .../EfCoreObjectExtensionManagerExtensions.cs | 2 + .../MemoryDb/MemoryDbRepository.cs | 40 ++++++++-------- .../Volo/Abp/Auditing/Auditing_Tests.cs | 6 +-- .../DbContext_Replace_Tests.cs | 8 ++-- .../Domain/ExtraProperties_Tests.cs | 6 +-- 9 files changed, 96 insertions(+), 52 deletions(-) diff --git a/framework/src/Volo.Abp.Dapper/Volo/Abp/Domain/Repositories/Dapper/DapperRepository.cs b/framework/src/Volo.Abp.Dapper/Volo/Abp/Domain/Repositories/Dapper/DapperRepository.cs index cdb03f8515..39b3eed249 100644 --- a/framework/src/Volo.Abp.Dapper/Volo/Abp/Domain/Repositories/Dapper/DapperRepository.cs +++ b/framework/src/Volo.Abp.Dapper/Volo/Abp/Domain/Repositories/Dapper/DapperRepository.cs @@ -1,4 +1,6 @@ -using System.Data; +using System; +using System.Data; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Storage; using Volo.Abp.EntityFrameworkCore; @@ -16,8 +18,14 @@ namespace Volo.Abp.Domain.Repositories.Dapper _dbContextProvider = dbContextProvider; } + [Obsolete("Use GetDbConnectionAsync method.")] public IDbConnection DbConnection => _dbContextProvider.GetDbContext().Database.GetDbConnection(); + public async Task GetDbConnectionAsync() => (await _dbContextProvider.GetDbContextAsync()).Database.GetDbConnection(); + + [Obsolete("Use GetDbTransactionAsync method.")] public IDbTransaction DbTransaction => _dbContextProvider.GetDbContext().Database.CurrentTransaction?.GetDbTransaction(); + + public async Task GetDbTransactionAsync() => (await _dbContextProvider.GetDbContextAsync()).Database.CurrentTransaction?.GetDbTransaction(); } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Dapper/Volo/Abp/Domain/Repositories/Dapper/IDapperRepository.cs b/framework/src/Volo.Abp.Dapper/Volo/Abp/Domain/Repositories/Dapper/IDapperRepository.cs index f45be08b54..8145c646a0 100644 --- a/framework/src/Volo.Abp.Dapper/Volo/Abp/Domain/Repositories/Dapper/IDapperRepository.cs +++ b/framework/src/Volo.Abp.Dapper/Volo/Abp/Domain/Repositories/Dapper/IDapperRepository.cs @@ -1,11 +1,19 @@ -using System.Data; +using System; +using System.Data; +using System.Threading.Tasks; namespace Volo.Abp.Domain.Repositories.Dapper { public interface IDapperRepository { + [Obsolete("Use GetDbConnectionAsync method.")] IDbConnection DbConnection { get; } + Task GetDbConnectionAsync(); + + [Obsolete("Use GetDbTransactionAsync method.")] IDbTransaction DbTransaction { get; } + + Task GetDbTransactionAsync(); } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EfCoreRepositoryExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EfCoreRepositoryExtensions.cs index 2463062cde..5049a1b61b 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EfCoreRepositoryExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EfCoreRepositoryExtensions.cs @@ -1,4 +1,5 @@ using System; +using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; @@ -7,18 +8,32 @@ namespace Volo.Abp.Domain.Repositories { public static class EfCoreRepositoryExtensions { + [Obsolete("Use GetDbContextAsync method.")] public static DbContext GetDbContext(this IReadOnlyBasicRepository repository) where TEntity : class, IEntity { return repository.ToEfCoreRepository().DbContext; } + public static Task GetDbContextAsync(this IReadOnlyBasicRepository repository) + where TEntity : class, IEntity + { + return repository.ToEfCoreRepository().GetDbContextAsync(); + } + + [Obsolete("Use GetDbSetAsync method.")] public static DbSet GetDbSet(this IReadOnlyBasicRepository repository) where TEntity : class, IEntity { return repository.ToEfCoreRepository().DbSet; } + public static Task> GetDbSetAsync(this IReadOnlyBasicRepository repository) + where TEntity : class, IEntity + { + return repository.ToEfCoreRepository().GetDbSetAsync(); + } + public static IEfCoreRepository ToEfCoreRepository(this IReadOnlyBasicRepository repository) where TEntity : class, IEntity { diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs index 16c8e6d745..a95ec00e34 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs @@ -1,8 +1,6 @@ -using JetBrains.Annotations; -using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; -using Nito.AsyncEx; using System; using System.Collections.Generic; using System.Linq; @@ -55,7 +53,7 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore private readonly IDbContextProvider _dbContextProvider; private readonly Lazy> _entityOptionsLazy; - public virtual IGuidGenerator GuidGenerator { get; set; } + public IGuidGenerator GuidGenerator { get; set; } public IEfCoreBulkOperationProvider BulkOperationProvider { get; set; } @@ -90,7 +88,11 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore public override async Task InsertManyAsync(IEnumerable entities, bool autoSave = false, CancellationToken cancellationToken = default) { - foreach (var entity in entities) + var entityArray = entities.ToArray(); + var dbContext = await GetDbContextAsync(); + cancellationToken = GetCancellationToken(cancellationToken); + + foreach (var entity in entityArray) { CheckAndSetId(entity); } @@ -99,18 +101,18 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore { await BulkOperationProvider.InsertManyAsync( this, - entities, + entityArray, autoSave, cancellationToken ); return; } - await DbSet.AddRangeAsync(entities); + await dbContext.Set().AddRangeAsync(entityArray, cancellationToken); if (autoSave) { - await DbContext.SaveChangesAsync(); + await dbContext.SaveChangesAsync(cancellationToken); } } @@ -132,6 +134,8 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore public override async Task UpdateManyAsync(IEnumerable entities, bool autoSave = false, CancellationToken cancellationToken = default) { + cancellationToken = GetCancellationToken(cancellationToken); + if (BulkOperationProvider != null) { await BulkOperationProvider.UpdateManyAsync( @@ -144,11 +148,13 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore return; } - DbSet.UpdateRange(entities); + var dbContext = await GetDbContextAsync(); + + dbContext.Set().UpdateRange(entities); if (autoSave) { - await DbContext.SaveChangesAsync(); + await dbContext.SaveChangesAsync(cancellationToken); } } @@ -166,22 +172,27 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore public override async Task DeleteManyAsync(IEnumerable entities, bool autoSave = false, CancellationToken cancellationToken = default) { + cancellationToken = GetCancellationToken(cancellationToken); + if (BulkOperationProvider != null) { await BulkOperationProvider.DeleteManyAsync( this, entities, autoSave, - cancellationToken); + cancellationToken + ); return; } - DbSet.RemoveRange(entities); + var dbContext = await GetDbContextAsync(); + + dbContext.RemoveRange(entities); if (autoSave) { - await DbContext.SaveChangesAsync(); + await dbContext.SaveChangesAsync(cancellationToken); } } @@ -225,9 +236,9 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore return (await GetDbSetAsync()).AsQueryable(); } - protected override Task SaveChangesAsync(CancellationToken cancellationToken) + protected override async Task SaveChangesAsync(CancellationToken cancellationToken) { - return DbContext.SaveChangesAsync(cancellationToken); + await (await GetDbContextAsync()).SaveChangesAsync(cancellationToken); } public override async Task FindAsync( @@ -413,9 +424,11 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore await DeleteAsync(entity, autoSave, cancellationToken); } - public async virtual Task DeleteManyAsync([NotNull] IEnumerable ids, bool autoSave = false, CancellationToken cancellationToken = default) + public virtual async Task DeleteManyAsync(IEnumerable ids, bool autoSave = false, CancellationToken cancellationToken = default) { - var entities = await DbSet.Where(x => ids.Contains(x.Id)).ToListAsync(); + cancellationToken = GetCancellationToken(cancellationToken); + + var entities = await (await GetDbSetAsync()).Where(x => ids.Contains(x.Id)).ToListAsync(cancellationToken); await DeleteManyAsync(entities, autoSave, cancellationToken); } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionManagerExtensions.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionManagerExtensions.cs index 14fcc93784..54c1909bb3 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionManagerExtensions.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/ObjectExtending/EfCoreObjectExtensionManagerExtensions.cs @@ -143,7 +143,9 @@ namespace Volo.Abp.ObjectExtending var propertyBuilder = typeBuilder.Property(property.Type, property.Name); efCoreMapping.EntityTypeAndPropertyBuildAction?.Invoke(typeBuilder, propertyBuilder); +#pragma warning disable 618 efCoreMapping.PropertyBuildAction?.Invoke(propertyBuilder); +#pragma warning restore 618 } } } diff --git a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs index 0edd7e7604..3318d10d72 100644 --- a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs +++ b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs @@ -1,4 +1,3 @@ -using JetBrains.Annotations; using System; using System.Collections.Generic; using System.Linq; @@ -169,27 +168,28 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb await TriggerDomainEventsAsync(entity); } - public override Task FindAsync( + public override async Task FindAsync( Expression> predicate, bool includeDetails = true, CancellationToken cancellationToken = default) { - return Task.FromResult(GetQueryable().Where(predicate).SingleOrDefault()); + return (await GetQueryableAsync()).Where(predicate).SingleOrDefault(); } - public async override Task DeleteAsync( + public override async Task DeleteAsync( Expression> predicate, bool autoSave = false, CancellationToken cancellationToken = default) { - var entities = GetQueryable().Where(predicate).ToList(); + var entities = (await GetQueryableAsync()).Where(predicate).ToList(); + foreach (var entity in entities) { await DeleteAsync(entity, autoSave, cancellationToken); } } - public async override Task InsertAsync( + public override async Task InsertAsync( TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) @@ -201,7 +201,7 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb return entity; } - public async override Task UpdateAsync( + public override async Task UpdateAsync( TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) @@ -225,7 +225,7 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb return entity; } - public async override Task DeleteAsync( + public override async Task DeleteAsync( TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) @@ -243,27 +243,27 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb } } - public override Task> GetListAsync(bool includeDetails = false, CancellationToken cancellationToken = default) + public override async Task> GetListAsync(bool includeDetails = false, CancellationToken cancellationToken = default) { - return Task.FromResult(GetQueryable().ToList()); + return (await GetQueryableAsync()).ToList(); } - public override Task GetCountAsync(CancellationToken cancellationToken = default) + public override async Task GetCountAsync(CancellationToken cancellationToken = default) { - return Task.FromResult(GetQueryable().LongCount()); + return (await GetQueryableAsync()).LongCount(); } - public override Task> GetPagedListAsync( + public override async Task> GetPagedListAsync( int skipCount, int maxResultCount, string sorting, bool includeDetails = false, CancellationToken cancellationToken = default) { - return Task.FromResult(GetQueryable() + return (await GetQueryableAsync()) .OrderBy(sorting) .PageBy(skipCount, maxResultCount) - .ToList()); + .ToList(); } } @@ -307,9 +307,9 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb return entity; } - public virtual Task FindAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default) + public virtual async Task FindAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default) { - return Task.FromResult(GetQueryable().FirstOrDefault(e => e.Id.Equals(id))); + return (await GetQueryableAsync()).FirstOrDefault(e => e.Id.Equals(id)); } public virtual async Task DeleteAsync(TKey id, bool autoSave = false, CancellationToken cancellationToken = default) @@ -317,10 +317,10 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb await DeleteAsync(x => x.Id.Equals(id), autoSave, cancellationToken); } - public virtual async Task DeleteManyAsync([NotNull] IEnumerable ids, bool autoSave = false, CancellationToken cancellationToken = default) + public virtual async Task DeleteManyAsync(IEnumerable ids, bool autoSave = false, CancellationToken cancellationToken = default) { - var entities = await AsyncExecuter.ToListAsync(GetQueryable().Where(x => ids.Contains(x.Id))); - DeleteManyAsync(entities, autoSave, cancellationToken); + var entities = await AsyncExecuter.ToListAsync((await GetQueryableAsync()).Where(x => ids.Contains(x.Id)), cancellationToken); + await DeleteManyAsync(entities, autoSave, cancellationToken); } } } 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 8c647c92c4..8ca1228ee6 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 @@ -54,13 +54,13 @@ namespace Volo.Abp.Auditing public class MyAuditedObject1 : IMyAuditedObject { - public async virtual Task DoItAsync(InputObject inputObject) + public virtual Task DoItAsync(InputObject inputObject) { - return new ResultObject + return Task.FromResult(new ResultObject { Value1 = inputObject.Value1 + "-result", Value2 = inputObject.Value2 + 1 - }; + }); } } diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/DbContext_Replace_Tests.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/DbContext_Replace_Tests.cs index 7bc4af2e31..977cb8522a 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/DbContext_Replace_Tests.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/DbContext_Replace_Tests.cs @@ -26,12 +26,12 @@ namespace Volo.Abp.EntityFrameworkCore { (ServiceProvider.GetRequiredService() is TestAppDbContext).ShouldBeTrue(); - using (_unitOfWorkManager.Begin()) + using (var uow = _unitOfWorkManager.Begin()) { - (_dummyRepository.GetDbContext() is IThirdDbContext).ShouldBeTrue(); - (_dummyRepository.GetDbContext() is TestAppDbContext).ShouldBeTrue(); + ((await _dummyRepository.GetDbContextAsync()) is IThirdDbContext).ShouldBeTrue(); + ((await _dummyRepository.GetDbContextAsync()) is TestAppDbContext).ShouldBeTrue(); - await _unitOfWorkManager.Current.CompleteAsync(); + await uow.CompleteAsync(); } } } diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/ExtraProperties_Tests.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/ExtraProperties_Tests.cs index f94f16c390..aa1e0080b5 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/ExtraProperties_Tests.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/ExtraProperties_Tests.cs @@ -44,15 +44,13 @@ namespace Volo.Abp.EntityFrameworkCore.Domain [Fact] public async Task An_Extra_Property_Configured_As_Extension2() { - await WithUnitOfWorkAsync(() => + await WithUnitOfWorkAsync(async () => { - var entityEntry = CityRepository.GetDbContext().Attach(new City(Guid.NewGuid(), "NewYork")); + var entityEntry = (await CityRepository.GetDbContextAsync()).Attach(new City(Guid.NewGuid(), "NewYork")); var indexes = entityEntry.Metadata.GetIndexes().ToList(); indexes.ShouldNotBeEmpty(); indexes.ShouldContain(x => x.IsUnique); - return Task.CompletedTask; }); - } } } From 3094f577a6b55716aa7876eb595673eb813cbc8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 24 Dec 2020 15:27:03 +0300 Subject: [PATCH 048/217] Update PersonDapperRepository.cs --- .../Dapper/Repositories/PersonDapperRepository.cs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/framework/test/Volo.Abp.Dapper.Tests/Volo/Abp/Dapper/Repositories/PersonDapperRepository.cs b/framework/test/Volo.Abp.Dapper.Tests/Volo/Abp/Dapper/Repositories/PersonDapperRepository.cs index b5127e3d7e..e4510a366a 100644 --- a/framework/test/Volo.Abp.Dapper.Tests/Volo/Abp/Dapper/Repositories/PersonDapperRepository.cs +++ b/framework/test/Volo.Abp.Dapper.Tests/Volo/Abp/Dapper/Repositories/PersonDapperRepository.cs @@ -17,14 +17,19 @@ namespace Volo.Abp.Dapper.Repositories public virtual async Task> GetAllPersonNames() { - return (await DbConnection.QueryAsync("select Name from People", transaction: DbTransaction)) - .ToList(); + return (await (await GetDbConnectionAsync()) + .QueryAsync( + "select Name from People", + transaction: await GetDbTransactionAsync() + ) + ).ToList(); } public virtual async Task UpdatePersonNames(string name) { - return await DbConnection.ExecuteAsync("update People set Name = @NewName", new { NewName = name }, - DbTransaction); + return await (await GetDbConnectionAsync()) + .ExecuteAsync("update People set Name = @NewName", new {NewName = name}, + await GetDbTransactionAsync()); } } -} \ No newline at end of file +} From b318ee8799ce823814b5bb23a642226784550ab0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 24 Dec 2020 15:35:09 +0300 Subject: [PATCH 049/217] Use ICancellationTokenProvider --- .../UnitOfWorkDbContextProvider.cs | 20 ++++++++++++++----- .../UnitOfWorkMongoDbContextProvider.cs | 13 ++++++++++-- .../Volo/Abp/Uow/UnitOfWorkInterceptor.cs | 2 +- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs index 22df5fddf5..3539830beb 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs @@ -1,4 +1,5 @@ using System; +using System.Threading; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Storage; @@ -8,6 +9,7 @@ using Microsoft.Extensions.Logging.Abstractions; using Volo.Abp.Data; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.DependencyInjection; +using Volo.Abp.Threading; namespace Volo.Abp.Uow.EntityFrameworkCore { @@ -20,13 +22,16 @@ namespace Volo.Abp.Uow.EntityFrameworkCore private readonly IUnitOfWorkManager _unitOfWorkManager; private readonly IConnectionStringResolver _connectionStringResolver; + private readonly ICancellationTokenProvider _cancellationTokenProvider; public UnitOfWorkDbContextProvider( IUnitOfWorkManager unitOfWorkManager, - IConnectionStringResolver connectionStringResolver) + IConnectionStringResolver connectionStringResolver, + ICancellationTokenProvider cancellationTokenProvider) { _unitOfWorkManager = unitOfWorkManager; _connectionStringResolver = connectionStringResolver; + _cancellationTokenProvider = cancellationTokenProvider; Logger = NullLogger>.Instance; } @@ -194,8 +199,8 @@ namespace Volo.Abp.Uow.EntityFrameworkCore var dbContext = unitOfWork.ServiceProvider.GetRequiredService(); var dbTransaction = unitOfWork.Options.IsolationLevel.HasValue - ? await dbContext.Database.BeginTransactionAsync(unitOfWork.Options.IsolationLevel.Value) - : await dbContext.Database.BeginTransactionAsync(); + ? await dbContext.Database.BeginTransactionAsync(unitOfWork.Options.IsolationLevel.Value, GetCancellationToken()) + : await dbContext.Database.BeginTransactionAsync(GetCancellationToken()); unitOfWork.AddTransactionApi( transactionApiKey, @@ -215,11 +220,11 @@ namespace Volo.Abp.Uow.EntityFrameworkCore if (dbContext.As().HasRelationalTransactionManager()) { - await dbContext.Database.UseTransactionAsync(activeTransaction.DbContextTransaction.GetDbTransaction()); + await dbContext.Database.UseTransactionAsync(activeTransaction.DbContextTransaction.GetDbTransaction(), GetCancellationToken()); } else { - await dbContext.Database.BeginTransactionAsync(); //TODO: Why not using the new created transaction? + await dbContext.Database.BeginTransactionAsync(GetCancellationToken()); //TODO: Why not using the new created transaction? } activeTransaction.AttendedDbContexts.Add(dbContext); @@ -227,5 +232,10 @@ namespace Volo.Abp.Uow.EntityFrameworkCore return dbContext; } } + + protected virtual CancellationToken GetCancellationToken(CancellationToken preferredValue = default) + { + return _cancellationTokenProvider.FallbackToProvider(preferredValue); + } } } diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs index 8a9ecd5de6..1ce1dc4649 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs @@ -6,6 +6,7 @@ using MongoDB.Bson; using MongoDB.Driver; using Volo.Abp.Data; using Volo.Abp.MongoDB; +using Volo.Abp.Threading; namespace Volo.Abp.Uow.MongoDB { @@ -14,13 +15,16 @@ namespace Volo.Abp.Uow.MongoDB { private readonly IUnitOfWorkManager _unitOfWorkManager; private readonly IConnectionStringResolver _connectionStringResolver; + private readonly ICancellationTokenProvider _cancellationTokenProvider; public UnitOfWorkMongoDbContextProvider( IUnitOfWorkManager unitOfWorkManager, - IConnectionStringResolver connectionStringResolver) + IConnectionStringResolver connectionStringResolver, + ICancellationTokenProvider cancellationTokenProvider) { _unitOfWorkManager = unitOfWorkManager; _connectionStringResolver = connectionStringResolver; + _cancellationTokenProvider = cancellationTokenProvider; } [Obsolete("Use CreateDbContextAsync")] @@ -183,7 +187,7 @@ namespace Volo.Abp.Uow.MongoDB if (activeTransaction?.SessionHandle == null) { - var session = await client.StartSessionAsync(cancellationToken: cancellationToken); + var session = await client.StartSessionAsync(cancellationToken: GetCancellationToken(cancellationToken)); if (unitOfWork.Options.Timeout.HasValue) { @@ -206,5 +210,10 @@ namespace Volo.Abp.Uow.MongoDB return dbContext; } + + protected virtual CancellationToken GetCancellationToken(CancellationToken preferredValue = default) + { + return _cancellationTokenProvider.FallbackToProvider(preferredValue); + } } } diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkInterceptor.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkInterceptor.cs index f2ed948eb1..464b6bb871 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkInterceptor.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkInterceptor.cs @@ -23,7 +23,7 @@ namespace Volo.Abp.Uow _defaultOptions = options.Value; } - public async override Task InterceptAsync(IAbpMethodInvocation invocation) + public override async Task InterceptAsync(IAbpMethodInvocation invocation) { if (!UnitOfWorkHelper.IsUnitOfWorkMethod(invocation.Method, out var unitOfWorkAttribute)) { From 5461d4436be0ed2cb11063edfd5207c962829a66 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Thu, 24 Dec 2020 15:41:20 +0300 Subject: [PATCH 050/217] Update ContentAppService.cs --- .../Volo/CmsKit/Contents/ContentAppService.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs index 77f2fe39ef..89916275bd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs @@ -8,16 +8,16 @@ namespace Volo.CmsKit.Contents { public class ContentAppService : CmsKitAppServiceBase, IContentAppService { - private readonly IContentRepository _contentRepository; + protected readonly IContentRepository ContentRepository; public ContentAppService(IContentRepository contentRepository) { - _contentRepository = contentRepository; + ContentRepository = contentRepository; } - public async Task GetAsync(string entityType, string entityId) + public virtual async Task GetAsync(string entityType, string entityId) { - var entity = await _contentRepository.FindAsync(entityType, entityId); // Tenant??? + var entity = await ContentRepository.FindAsync(entityType, entityId); // Tenant??? return ObjectMapper.Map(entity); } From d8723d2fce25ef7022a97ed78f02e756460a3901 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 24 Dec 2020 16:03:31 +0300 Subject: [PATCH 051/217] Update BookController.cs --- .../AbpPerfTest.WithAbp/Controllers/BookController.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/AbpPerfTest/AbpPerfTest.WithAbp/Controllers/BookController.cs b/test/AbpPerfTest/AbpPerfTest.WithAbp/Controllers/BookController.cs index ed7f10500b..1533e95f71 100644 --- a/test/AbpPerfTest/AbpPerfTest.WithAbp/Controllers/BookController.cs +++ b/test/AbpPerfTest/AbpPerfTest.WithAbp/Controllers/BookController.cs @@ -5,7 +5,6 @@ using System.Threading.Tasks; using AbpPerfTest.WithAbp.Dtos; using AbpPerfTest.WithAbp.Entities; using Microsoft.AspNetCore.Mvc; -using Microsoft.EntityFrameworkCore; using Volo.Abp.Domain.Repositories; namespace AbpPerfTest.WithAbp.Controllers @@ -23,7 +22,7 @@ namespace AbpPerfTest.WithAbp.Controllers [HttpGet] public async Task> GetListAsync() { - var books = await (await _bookRepository.GetQueryableAsync()).OrderBy(x => x.Id).Take(10).ToListAsync(); + var books = await _bookRepository.GetPagedListAsync(0, 10, "Id"); return books .Select(b => new BookDto From 497aec6c975317a162cd742387854ddde0fcd7b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 24 Dec 2020 16:14:35 +0300 Subject: [PATCH 052/217] Enable transactions --- test/AbpPerfTest/AbpPerfTest.WithAbp/AppModule.cs | 2 +- test/AbpPerfTest/AbpPerfTest.WithAbp/appsettings.json | 4 ++-- test/AbpPerfTest/_jmeter/SimpleTestPlan.jmx | 6 +++--- test/AbpPerfTest/_jmeter/SimpleTestPlanWithoutAbp.jmx | 6 +++--- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/test/AbpPerfTest/AbpPerfTest.WithAbp/AppModule.cs b/test/AbpPerfTest/AbpPerfTest.WithAbp/AppModule.cs index 1cd88989e6..3846cdd3de 100644 --- a/test/AbpPerfTest/AbpPerfTest.WithAbp/AppModule.cs +++ b/test/AbpPerfTest/AbpPerfTest.WithAbp/AppModule.cs @@ -33,7 +33,7 @@ namespace AbpPerfTest.WithAbp Configure(options => { - options.TransactionBehavior = UnitOfWorkTransactionBehavior.Disabled; + options.TransactionBehavior = UnitOfWorkTransactionBehavior.Auto; }); } diff --git a/test/AbpPerfTest/AbpPerfTest.WithAbp/appsettings.json b/test/AbpPerfTest/AbpPerfTest.WithAbp/appsettings.json index 9cd22c72c3..729af8691d 100644 --- a/test/AbpPerfTest/AbpPerfTest.WithAbp/appsettings.json +++ b/test/AbpPerfTest/AbpPerfTest.WithAbp/appsettings.json @@ -1,8 +1,8 @@ { "Logging": { "LogLevel": { - "Default": "Information", - "Microsoft": "Warning", + "Default": "Error", + "Microsoft": "Error", "Microsoft.Hosting.Lifetime": "Information" } }, diff --git a/test/AbpPerfTest/_jmeter/SimpleTestPlan.jmx b/test/AbpPerfTest/_jmeter/SimpleTestPlan.jmx index a21abcac12..0c08c60f20 100644 --- a/test/AbpPerfTest/_jmeter/SimpleTestPlan.jmx +++ b/test/AbpPerfTest/_jmeter/SimpleTestPlan.jmx @@ -18,7 +18,7 @@ false 20 - 1000 + 2000 10 false @@ -84,7 +84,7 @@ - + true @@ -115,7 +115,7 @@ - + diff --git a/test/AbpPerfTest/_jmeter/SimpleTestPlanWithoutAbp.jmx b/test/AbpPerfTest/_jmeter/SimpleTestPlanWithoutAbp.jmx index eee33504c1..c7d6b3292c 100644 --- a/test/AbpPerfTest/_jmeter/SimpleTestPlanWithoutAbp.jmx +++ b/test/AbpPerfTest/_jmeter/SimpleTestPlanWithoutAbp.jmx @@ -18,7 +18,7 @@ false 20 - 1000 + 500 10 false @@ -84,7 +84,7 @@ - + true @@ -115,7 +115,7 @@ - + From 81a0f166f4aad3367f57079f38d092b47ea0672a Mon Sep 17 00:00:00 2001 From: enisn Date: Thu, 24 Dec 2020 17:03:24 +0300 Subject: [PATCH 053/217] Refactor Content --- .../Volo/CmsKit/Contents/GetContentInput.cs | 8 ++++++ .../CmsKit/Contents/IContentAppService.cs | 4 +-- .../Volo/CmsKit/Contents/ContentAppService.cs | 8 ++++-- .../Controllers/Contents/ContentController.cs | 25 +++++++++++++++++++ .../Contents/ContentViewComponent.cs | 8 +++++- 5 files changed, 48 insertions(+), 5 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/GetContentInput.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Contents/ContentController.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/GetContentInput.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/GetContentInput.cs new file mode 100644 index 0000000000..8efddd1e35 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/GetContentInput.cs @@ -0,0 +1,8 @@ +namespace Volo.CmsKit.Common.Application.Contracts.Volo.CmsKit.Contents +{ + public class GetContentInput + { + public string EntityType { get; set; } + public string EntityId { get; set; } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentAppService.cs index 0ac862e787..714fb6e4fb 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentAppService.cs @@ -1,10 +1,10 @@ using System.Threading.Tasks; -using Volo.CmsKit.Contents; +using Volo.CmsKit.Common.Application.Contracts.Volo.CmsKit.Contents; namespace Volo.CmsKit.Contents { public interface IContentAppService { - Task GetAsync(string entityType, string entityId); + Task GetAsync(GetContentInput input); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs index 77f2fe39ef..14dc318a4d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Volo.CmsKit.Common.Application.Contracts.Volo.CmsKit.Contents; namespace Volo.CmsKit.Contents { @@ -15,9 +16,12 @@ namespace Volo.CmsKit.Contents _contentRepository = contentRepository; } - public async Task GetAsync(string entityType, string entityId) + public async Task GetAsync(GetContentInput input) { - var entity = await _contentRepository.FindAsync(entityType, entityId); // Tenant??? + var entity = await _contentRepository.FindAsync( + input.EntityType, + input.EntityId, + CurrentTenant.Id); return ObjectMapper.Map(entity); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Contents/ContentController.cs b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Contents/ContentController.cs new file mode 100644 index 0000000000..260668e52d --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Contents/ContentController.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.CmsKit.Common.Application.Contracts.Volo.CmsKit.Contents; +using Volo.CmsKit.Contents; + +namespace Volo.CmsKit.Controllers.Contents +{ + public class ContentController : CmsKitControllerBase, IContentAppService + { + protected readonly IContentAppService _contentAppService; + + public ContentController(IContentAppService contentAppService) + { + _contentAppService = contentAppService; + } + + public virtual Task GetAsync(GetContentInput input) + { + return _contentAppService.GetAsync(input); + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/ContentViewComponent.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/ContentViewComponent.cs index 012768b0d7..14522303c6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/ContentViewComponent.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/ContentViewComponent.cs @@ -7,6 +7,7 @@ using Microsoft.Extensions.Options; using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc.UI; using Volo.Abp.AspNetCore.Mvc.UI.Widgets; +using Volo.CmsKit.Common.Application.Contracts.Volo.CmsKit.Contents; using Volo.CmsKit.Contents; using Volo.CmsKit.Web.Contents; @@ -30,7 +31,12 @@ namespace Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Contents string entityType, string entityId) { - var content = await contentAppService.GetAsync(entityType, entityId); + var content = await contentAppService.GetAsync(new GetContentInput + { + EntityId = entityId, + EntityType = entityType + }); + var viewModel = new ContentViewModel { EntityId = entityId, From a80aeb940a951514108fd1094369132914301fea Mon Sep 17 00:00:00 2001 From: enisn Date: Thu, 24 Dec 2020 17:05:35 +0300 Subject: [PATCH 054/217] CmsKit Tags Scheme Update --- .../Volo/CmsKit/Tags/EntityTag.cs | 6 ++-- .../Volo/CmsKit/Tags/ITagRepository.cs | 7 +++++ .../CmsKitDbContextModelCreatingExtensions.cs | 4 +-- .../Volo/CmsKit/Tags/EfCoreTagRepository.cs | 31 +++++++++++++++++-- .../CmsKit/MongoDB/Tags/MongoTagRepository.cs | 6 ++++ 5 files changed, 46 insertions(+), 8 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/EntityTag.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/EntityTag.cs index 5825f32936..e69dbf53aa 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/EntityTag.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/EntityTag.cs @@ -8,7 +8,7 @@ namespace Volo.CmsKit.Tags { public virtual Guid TagId { get; set; } - public virtual Guid EntityId { get; set; } + public virtual string EntityId { get; set; } public virtual Guid? TenantId { get; } @@ -16,7 +16,7 @@ namespace Volo.CmsKit.Tags { } - public EntityTag(Guid tagId, Guid entityId, Guid? tenantId = null) + public EntityTag(Guid tagId, string entityId, Guid? tenantId = null) { TagId = tagId; EntityId = entityId; @@ -25,7 +25,7 @@ namespace Volo.CmsKit.Tags public override object[] GetKeys() { - return new object[] { TagId, EntityId, TenantId }; + return new object[] { TagId, EntityId }; } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs index 8cfeee9551..c33c577422 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs @@ -1,5 +1,6 @@ using JetBrains.Annotations; using System; +using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories; @@ -25,5 +26,11 @@ namespace Volo.CmsKit.Tags [NotNull] string name, Guid? tenantId, CancellationToken cancellationToken = default); + + Task> GetAllRelatedTagsAsync( + [NotNull] string entityType, + [NotNull] string entityId, + Guid? tenantId = null, + CancellationToken cancellationToken = default); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs index f7cdb5b59e..2d6441b19e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs @@ -117,7 +117,7 @@ namespace Volo.CmsKit.EntityFrameworkCore b.Property(x => x.EntityType).IsRequired().HasMaxLength(TagConsts.MaxEntityTypeLength); b.Property(x => x.Name).IsRequired().HasMaxLength(TagConsts.MaxNameLength); - b.Property(x => x.HexColor).IsRequired().HasMaxLength(TagConsts.MaxColorHexLength); + b.Property(x => x.HexColor).HasMaxLength(TagConsts.MaxColorHexLength); b.HasIndex(x => new { x.TenantId, x.Name }); }); @@ -128,7 +128,7 @@ namespace Volo.CmsKit.EntityFrameworkCore b.ConfigureByConvention(); - b.HasKey(x => new { x.TenantId, x.EntityId, x.TagId }); + b.HasKey(x => new { x.EntityId, x.TagId }); b.Property(x => x.EntityId).IsRequired(); b.Property(x => x.TagId).IsRequired(); diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs index 8a530ba705..5bbecd3629 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs @@ -1,11 +1,14 @@ using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; using System; +using System.Collections.Generic; +using System.Linq; using System.Threading; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.VirtualFileSystem; using Volo.CmsKit.EntityFrameworkCore; namespace Volo.CmsKit.Tags @@ -16,7 +19,7 @@ namespace Volo.CmsKit.Tags { } - public Task AnyAsync( + public virtual Task AnyAsync( [NotNull] string entityType, [NotNull] string name, Guid? tenantId, @@ -29,7 +32,7 @@ namespace Volo.CmsKit.Tags cancellationToken); } - public Task GetAsync( + public virtual Task GetAsync( [NotNull] string entityType, [NotNull] string name, Guid? tenantId, @@ -42,7 +45,7 @@ namespace Volo.CmsKit.Tags cancellationToken: cancellationToken); } - public Task FindAsync( + public virtual Task FindAsync( [NotNull] string entityType, [NotNull] string name, Guid? tenantId, @@ -54,5 +57,27 @@ namespace Volo.CmsKit.Tags x.TenantId == tenantId, cancellationToken: cancellationToken); } + + public virtual async Task> GetAllRelatedTagsAsync( + [NotNull] string entityType, + [NotNull] string entityId, + Guid? tenantId = null, + CancellationToken cancellationToken = default) + { + + var query = DbContext.Set() + .Where(x => + x.EntityId == entityId && + x.TenantId == tenantId + ) + .Join( + DbSet, + o => o.TagId, + i => i.Id, + (entityTag, tag) => tag) + .Where(x => x.EntityType == entityType); + + return await query.ToListAsync(); + } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs index 9d4644e47b..ca88721460 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs @@ -1,6 +1,7 @@ using JetBrains.Annotations; using MongoDB.Driver.Linq; using System; +using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories.MongoDB; @@ -54,5 +55,10 @@ namespace Volo.CmsKit.MongoDB.Tags x.TenantId == tenantId, cancellationToken: cancellationToken); } + + public Task> GetAllRelatedTagsAsync([NotNull] string entityType, [NotNull] string entityId, Guid? tenantId = null, CancellationToken cancellationToken = default) + { + throw new NotImplementedException(); + } } } From 7e7dd42f2d6b646a1fa63218622f46f365a37790 Mon Sep 17 00:00:00 2001 From: enisn Date: Thu, 24 Dec 2020 17:06:09 +0300 Subject: [PATCH 055/217] Rename CmsKitAppService --- .../Volo/CmsKit/{CmsKitAdminAppService.cs => CmsKitAppService.cs} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/{CmsKitAdminAppService.cs => CmsKitAppService.cs} (100%) diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitAppService.cs similarity index 100% rename from modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitAdminAppService.cs rename to modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitAppService.cs From 65e481b0158039a768ceac4e754c91fb4042c83d Mon Sep 17 00:00:00 2001 From: enisn Date: Thu, 24 Dec 2020 17:07:07 +0300 Subject: [PATCH 056/217] CmsKit Tags AppServices & ViewComponent --- .../Volo/CmsKit/Tags/GetRelatedTagsInput.cs | 16 +++++ .../Volo/CmsKit/Tags/ITagAppService.cs | 11 ++++ .../Volo/CmsKit/Tags/TagDto.cs | 14 +++++ ...msKitCommonApplicationAutoMapperProfile.cs | 3 + .../Volo/CmsKit/Tags/TagAppService.cs | 58 +++++++++++++++++++ .../CmsKit/Controllers/Tags/TagController.cs | 22 +++++++ .../Shared/Components/Tags/Default.cshtml | 13 +++++ .../Components/Tags/TagViewComponent.cs | 51 ++++++++++++++++ .../CmsKit/Shared/Components/Tags/default.css | 4 ++ .../Volo.CmsKit.Common.Web.csproj | 4 ++ 10 files changed, 196 insertions(+) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/GetRelatedTagsInput.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/ITagAppService.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/TagDto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Tags/TagAppService.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Tags/TagController.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/Default.cshtml create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/TagViewComponent.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/default.css diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/GetRelatedTagsInput.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/GetRelatedTagsInput.cs new file mode 100644 index 0000000000..0019bbd661 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/GetRelatedTagsInput.cs @@ -0,0 +1,16 @@ +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; + +namespace Volo.CmsKit.Tags +{ + public class GetRelatedTagsInput + { + [Required] + public string EntityType { get; set; } + + [Required] + public string EntityId { get; set; } + + public List Tags { get; set; } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/ITagAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/ITagAppService.cs new file mode 100644 index 0000000000..f831d0f735 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/ITagAppService.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.Application.Services; + +namespace Volo.CmsKit.Tags +{ + public interface ITagAppService : IApplicationService + { + Task> GetAllRelatedTagsAsync(GetRelatedTagsInput input); + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/TagDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/TagDto.cs new file mode 100644 index 0000000000..4b9e4a5897 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/TagDto.cs @@ -0,0 +1,14 @@ +using System; +using Volo.Abp.Application.Dtos; + +namespace Volo.CmsKit.Tags +{ + public class TagDto : EntityDto + { + public string EntityType { get; set; } + + public string Name { get; protected set; } + + public string HexColor { get; protected set; } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationAutoMapperProfile.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationAutoMapperProfile.cs index b7cb5e2210..c7be0fcc69 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationAutoMapperProfile.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationAutoMapperProfile.cs @@ -1,5 +1,6 @@ using AutoMapper; using Volo.CmsKit.Contents; +using Volo.CmsKit.Tags; namespace Volo.CmsKit.Common.Application.Volo.CmsKit { @@ -8,6 +9,8 @@ namespace Volo.CmsKit.Common.Application.Volo.CmsKit public CmsKitCommonApplicationAutoMapperProfile() { CreateMap(); + + CreateMap(); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Tags/TagAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Tags/TagAppService.cs new file mode 100644 index 0000000000..c9ddef9629 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Tags/TagAppService.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Volo.CmsKit.Tags +{ + public class TagAppService : CmsKitAppServiceBase, ITagAppService + { + protected readonly ITagManager TagManager; + protected readonly ITagRepository TagRepository; + protected readonly IEntityTagRepository EntityTagRepository; + + public TagAppService( + ITagManager tagManager, + ITagRepository tagRepository, IEntityTagRepository entityTagRepository) + { + TagManager = tagManager; + TagRepository = tagRepository; + EntityTagRepository = entityTagRepository; + } + + public virtual async Task> GetAllRelatedTagsAsync(GetRelatedTagsInput input) + { + var entities = await TagRepository.GetAllRelatedTagsAsync( + input.EntityType, + input.EntityId, + CurrentTenant.Id); + + if (input.Tags?.Count > 0) + { + var nonExisting = input.Tags + .Where(x => + !entities.Any(a => + a.Name.Equals(x.Trim(), + StringComparison.InvariantCultureIgnoreCase))); + + foreach (var tag in nonExisting) + { + var insertedTag = await TagManager.GetOrAddAsync( + input.EntityType, + tag, + tenantId: CurrentTenant?.Id); + + await EntityTagRepository.InsertAsync( + new EntityTag( + insertedTag.Id, + input.EntityId, + CurrentTenant?.Id)); + + entities.Add(insertedTag); + } + } + + return ObjectMapper.Map, List>(entities); + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Tags/TagController.cs b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Tags/TagController.cs new file mode 100644 index 0000000000..b45d7fc6d4 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Tags/TagController.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.CmsKit.Controllers; +using Volo.CmsKit.Tags; + +namespace Volo.CmsKit.Common.HttpApi.Volo.CmsKit.Controllers.Tags +{ + public class TagController : CmsKitControllerBase, ITagAppService + { + protected readonly ITagAppService TagAppService; + + public TagController(ITagAppService tagAppService) + { + TagAppService = tagAppService; + } + + public Task> GetAllRelatedTagsAsync(GetRelatedTagsInput input) + { + return TagAppService.GetAllRelatedTagsAsync(input); + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/Default.cshtml b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/Default.cshtml new file mode 100644 index 0000000000..e0e9a034a3 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/Default.cshtml @@ -0,0 +1,13 @@ +@using Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.Tags + +@model TagViewComponent.TagViewModel + +@if (Model.Tags != null) +{ + foreach (var tag in Model.Tags) + { + + @tag.Name + + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/TagViewComponent.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/TagViewComponent.cs new file mode 100644 index 0000000000..83ad0e7e3a --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/TagViewComponent.cs @@ -0,0 +1,51 @@ +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.AspNetCore.Mvc; +using Volo.CmsKit.Tags; + +namespace Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.Tags +{ + [ViewComponent(Name = "CmsTags")] + public class TagViewComponent : AbpViewComponent + { + protected readonly ITagAppService TagAppService; + + public TagViewComponent(ITagAppService tagAppService) + { + TagAppService = tagAppService; + } + + public virtual async Task InvokeAsync( + string entityType, + string entityId, + IEnumerable tags = null) + { + var tagDtos = await TagAppService.GetAllRelatedTagsAsync(new GetRelatedTagsInput + { + EntityId = entityId, + EntityType = entityType, + Tags = tags?.ToList() + }); + + var viewModel = new TagViewModel + { + EntityId = entityId, + EntityType = entityType, + Tags = tagDtos + }; + + return View("~/Pages/CmsKit/Shared/Components/Tags/Default.cshtml", viewModel); + } + + public class TagViewModel + { + public List Tags { get; set; } + public string EntityId { get; set; } + public string EntityType { get; set; } + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/default.css b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/default.css new file mode 100644 index 0000000000..e3f6d69107 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/default.css @@ -0,0 +1,4 @@ +.cmskit-tag { + border-radius: 2px; + border: 1px solid; +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.csproj b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.csproj index 620274f4f3..132e584fc0 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.csproj +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.csproj @@ -35,4 +35,8 @@ + + + + From c42e046042c75735a69cfa7cc9eba20e02a248e3 Mon Sep 17 00:00:00 2001 From: enisn Date: Thu, 24 Dec 2020 17:08:09 +0300 Subject: [PATCH 057/217] CmsKit Migrations --- .../20201210071514_Initial.Designer.cs | 1414 ----------------- .../20201224075340_Added_ContentAndTags.cs | 99 -- ....cs => 20201224140744_Initial.Designer.cs} | 19 +- ...4_Initial.cs => 20201224140744_Initial.cs} | 85 + .../UnifiedDbContextModelSnapshot.cs | 15 +- 5 files changed, 101 insertions(+), 1531 deletions(-) delete mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201210071514_Initial.Designer.cs delete mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201224075340_Added_ContentAndTags.cs rename modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/{20201224075340_Added_ContentAndTags.Designer.cs => 20201224140744_Initial.Designer.cs} (99%) rename modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/{20201210071514_Initial.cs => 20201224140744_Initial.cs} (90%) diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201210071514_Initial.Designer.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201210071514_Initial.Designer.cs deleted file mode 100644 index 449f18fb53..0000000000 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201210071514_Initial.Designer.cs +++ /dev/null @@ -1,1414 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Volo.Abp.EntityFrameworkCore; -using Volo.CmsKit.EntityFrameworkCore; - -namespace Volo.CmsKit.Migrations -{ - [DbContext(typeof(UnifiedDbContext))] - [Migration("20201210071514_Initial")] - partial class Initial - { - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .UseIdentityColumns() - .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("Relational:MaxIdentifierLength", 128) - .HasAnnotation("ProductVersion", "5.0.1"); - - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ApplicationName") - .HasMaxLength(96) - .HasColumnType("nvarchar(96)") - .HasColumnName("ApplicationName"); - - b.Property("BrowserInfo") - .HasMaxLength(512) - .HasColumnType("nvarchar(512)") - .HasColumnName("BrowserInfo"); - - b.Property("ClientId") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)") - .HasColumnName("ClientId"); - - b.Property("ClientIpAddress") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)") - .HasColumnName("ClientIpAddress"); - - b.Property("ClientName") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)") - .HasColumnName("ClientName"); - - b.Property("Comments") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("Comments"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CorrelationId") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)") - .HasColumnName("CorrelationId"); - - b.Property("Exceptions") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("Exceptions"); - - b.Property("ExecutionDuration") - .HasColumnType("int") - .HasColumnName("ExecutionDuration"); - - b.Property("ExecutionTime") - .HasColumnType("datetime2"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("HttpMethod") - .HasMaxLength(16) - .HasColumnType("nvarchar(16)") - .HasColumnName("HttpMethod"); - - b.Property("HttpStatusCode") - .HasColumnType("int") - .HasColumnName("HttpStatusCode"); - - b.Property("ImpersonatorTenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("ImpersonatorTenantId"); - - b.Property("ImpersonatorUserId") - .HasColumnType("uniqueidentifier") - .HasColumnName("ImpersonatorUserId"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("TenantName") - .HasColumnType("nvarchar(max)"); - - b.Property("Url") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("Url"); - - b.Property("UserId") - .HasColumnType("uniqueidentifier") - .HasColumnName("UserId"); - - b.Property("UserName") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("UserName"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "ExecutionTime"); - - b.HasIndex("TenantId", "UserId", "ExecutionTime"); - - b.ToTable("AbpAuditLogs"); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("AuditLogId") - .HasColumnType("uniqueidentifier") - .HasColumnName("AuditLogId"); - - b.Property("ExecutionDuration") - .HasColumnType("int") - .HasColumnName("ExecutionDuration"); - - b.Property("ExecutionTime") - .HasColumnType("datetime2") - .HasColumnName("ExecutionTime"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("MethodName") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)") - .HasColumnName("MethodName"); - - b.Property("Parameters") - .HasMaxLength(2000) - .HasColumnType("nvarchar(2000)") - .HasColumnName("Parameters"); - - b.Property("ServiceName") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("ServiceName"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("AuditLogId"); - - b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime"); - - b.ToTable("AbpAuditLogActions"); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("AuditLogId") - .HasColumnType("uniqueidentifier") - .HasColumnName("AuditLogId"); - - b.Property("ChangeTime") - .HasColumnType("datetime2") - .HasColumnName("ChangeTime"); - - b.Property("ChangeType") - .HasColumnType("tinyint") - .HasColumnName("ChangeType"); - - b.Property("EntityId") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)") - .HasColumnName("EntityId"); - - b.Property("EntityTenantId") - .HasColumnType("uniqueidentifier"); - - b.Property("EntityTypeFullName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)") - .HasColumnName("EntityTypeFullName"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("AuditLogId"); - - b.HasIndex("TenantId", "EntityTypeFullName", "EntityId"); - - b.ToTable("AbpEntityChanges"); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("EntityChangeId") - .HasColumnType("uniqueidentifier"); - - b.Property("NewValue") - .HasMaxLength(512) - .HasColumnType("nvarchar(512)") - .HasColumnName("NewValue"); - - b.Property("OriginalValue") - .HasMaxLength(512) - .HasColumnType("nvarchar(512)") - .HasColumnName("OriginalValue"); - - b.Property("PropertyName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)") - .HasColumnName("PropertyName"); - - b.Property("PropertyTypeFullName") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)") - .HasColumnName("PropertyTypeFullName"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("EntityChangeId"); - - b.ToTable("AbpEntityPropertyChanges"); - }); - - modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("ProviderKey") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("ProviderName") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.HasKey("Id"); - - b.HasIndex("Name", "ProviderName", "ProviderKey"); - - b.ToTable("AbpFeatureValues"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("Description") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("IsStatic") - .HasColumnType("bit"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("Regex") - .HasMaxLength(512) - .HasColumnType("nvarchar(512)"); - - b.Property("RegexDescription") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("Required") - .HasColumnType("bit"); - - b.Property("ValueType") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.ToTable("AbpClaimTypes"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityLinkUser", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("SourceTenantId") - .HasColumnType("uniqueidentifier"); - - b.Property("SourceUserId") - .HasColumnType("uniqueidentifier"); - - b.Property("TargetTenantId") - .HasColumnType("uniqueidentifier"); - - b.Property("TargetUserId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("Id"); - - b.HasIndex("SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId") - .IsUnique() - .HasFilter("[SourceTenantId] IS NOT NULL AND [TargetTenantId] IS NOT NULL"); - - b.ToTable("AbpLinkUsers"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("IsDefault") - .HasColumnType("bit") - .HasColumnName("IsDefault"); - - b.Property("IsPublic") - .HasColumnType("bit") - .HasColumnName("IsPublic"); - - b.Property("IsStatic") - .HasColumnType("bit") - .HasColumnName("IsStatic"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("NormalizedName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedName"); - - b.ToTable("AbpRoles"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier"); - - b.Property("ClaimType") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("ClaimValue") - .HasMaxLength(1024) - .HasColumnType("nvarchar(1024)"); - - b.Property("RoleId") - .HasColumnType("uniqueidentifier"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("AbpRoleClaims"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentitySecurityLog", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("Action") - .HasMaxLength(96) - .HasColumnType("nvarchar(96)"); - - b.Property("ApplicationName") - .HasMaxLength(96) - .HasColumnType("nvarchar(96)"); - - b.Property("BrowserInfo") - .HasMaxLength(512) - .HasColumnType("nvarchar(512)"); - - b.Property("ClientId") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("ClientIpAddress") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CorrelationId") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("CreationTime") - .HasColumnType("datetime2"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("Identity") - .HasMaxLength(96) - .HasColumnType("nvarchar(96)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("TenantName") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("UserId") - .HasColumnType("uniqueidentifier"); - - b.Property("UserName") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "Action"); - - b.HasIndex("TenantId", "ApplicationName"); - - b.HasIndex("TenantId", "Identity"); - - b.HasIndex("TenantId", "UserId"); - - b.ToTable("AbpSecurityLogs"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("AccessFailedCount") - .ValueGeneratedOnAdd() - .HasColumnType("int") - .HasDefaultValue(0) - .HasColumnName("AccessFailedCount"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("Email"); - - b.Property("EmailConfirmed") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("EmailConfirmed"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("IsExternal") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsExternal"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("LockoutEnabled") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("LockoutEnabled"); - - b.Property("LockoutEnd") - .HasColumnType("datetimeoffset"); - - b.Property("Name") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)") - .HasColumnName("Name"); - - b.Property("NormalizedEmail") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("NormalizedEmail"); - - b.Property("NormalizedUserName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("NormalizedUserName"); - - b.Property("PasswordHash") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("PasswordHash"); - - b.Property("PhoneNumber") - .HasMaxLength(16) - .HasColumnType("nvarchar(16)") - .HasColumnName("PhoneNumber"); - - b.Property("PhoneNumberConfirmed") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("PhoneNumberConfirmed"); - - b.Property("SecurityStamp") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("SecurityStamp"); - - b.Property("Surname") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)") - .HasColumnName("Surname"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("TwoFactorEnabled") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("TwoFactorEnabled"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("UserName"); - - b.HasKey("Id"); - - b.HasIndex("Email"); - - b.HasIndex("NormalizedEmail"); - - b.HasIndex("NormalizedUserName"); - - b.HasIndex("UserName"); - - b.ToTable("AbpUsers"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier"); - - b.Property("ClaimType") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("ClaimValue") - .HasMaxLength(1024) - .HasColumnType("nvarchar(1024)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("UserId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("AbpUserClaims"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => - { - b.Property("UserId") - .HasColumnType("uniqueidentifier"); - - b.Property("LoginProvider") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("ProviderDisplayName") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("ProviderKey") - .IsRequired() - .HasMaxLength(196) - .HasColumnType("nvarchar(196)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("UserId", "LoginProvider"); - - b.HasIndex("LoginProvider", "ProviderKey"); - - b.ToTable("AbpUserLogins"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => - { - b.Property("OrganizationUnitId") - .HasColumnType("uniqueidentifier"); - - b.Property("UserId") - .HasColumnType("uniqueidentifier"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("OrganizationUnitId", "UserId"); - - b.HasIndex("UserId", "OrganizationUnitId"); - - b.ToTable("AbpUserOrganizationUnits"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => - { - b.Property("UserId") - .HasColumnType("uniqueidentifier"); - - b.Property("RoleId") - .HasColumnType("uniqueidentifier"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId", "UserId"); - - b.ToTable("AbpUserRoles"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => - { - b.Property("UserId") - .HasColumnType("uniqueidentifier"); - - b.Property("LoginProvider") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("Name") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("Value") - .HasColumnType("nvarchar(max)"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("AbpUserTokens"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("Code") - .IsRequired() - .HasMaxLength(95) - .HasColumnType("nvarchar(95)") - .HasColumnName("Code"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("DisplayName") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)") - .HasColumnName("DisplayName"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("ParentId") - .HasColumnType("uniqueidentifier"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("Code"); - - b.HasIndex("ParentId"); - - b.ToTable("AbpOrganizationUnits"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => - { - b.Property("OrganizationUnitId") - .HasColumnType("uniqueidentifier"); - - b.Property("RoleId") - .HasColumnType("uniqueidentifier"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("OrganizationUnitId", "RoleId"); - - b.HasIndex("RoleId", "OrganizationUnitId"); - - b.ToTable("AbpOrganizationUnitRoles"); - }); - - modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("ProviderKey") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("ProviderName") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("Name", "ProviderName", "ProviderKey"); - - b.ToTable("AbpPermissionGrants"); - }); - - modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); - - b.Property("ProviderKey") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("ProviderName") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(2048) - .HasColumnType("nvarchar(2048)"); - - b.HasKey("Id"); - - b.HasIndex("Name", "ProviderName", "ProviderKey"); - - b.ToTable("AbpSettings"); - }); - - modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.HasKey("Id"); - - b.HasIndex("Name"); - - b.ToTable("AbpTenants"); - }); - - modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => - { - b.Property("TenantId") - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(1024) - .HasColumnType("nvarchar(1024)"); - - b.HasKey("TenantId", "Name"); - - b.ToTable("AbpTenantConnectionStrings"); - }); - - modelBuilder.Entity("Volo.CmsKit.Comments.Comment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("EntityId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("EntityType") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("RepliedCommentId") - .HasColumnType("uniqueidentifier"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("Text") - .IsRequired() - .HasMaxLength(512) - .HasColumnType("nvarchar(512)"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "RepliedCommentId"); - - b.HasIndex("TenantId", "EntityType", "EntityId"); - - b.ToTable("CmsComments"); - }); - - modelBuilder.Entity("Volo.CmsKit.Ratings.Rating", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("EntityId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("EntityType") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("StarCount") - .HasColumnType("smallint"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "EntityType", "EntityId", "CreatorId"); - - b.ToTable("CmsRatings"); - }); - - modelBuilder.Entity("Volo.CmsKit.Reactions.UserReaction", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - - b.Property("EntityId") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("EntityType") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)"); - - b.Property("ReactionName") - .IsRequired() - .HasMaxLength(32) - .HasColumnType("nvarchar(32)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "EntityType", "EntityId", "ReactionName"); - - b.HasIndex("TenantId", "CreatorId", "EntityType", "EntityId", "ReactionName"); - - b.ToTable("CmsUserReactions"); - }); - - modelBuilder.Entity("Volo.CmsKit.Users.CmsUser", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasMaxLength(40) - .HasColumnType("nvarchar(40)") - .HasColumnName("ConcurrencyStamp"); - - b.Property("Email") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("Email"); - - b.Property("EmailConfirmed") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("EmailConfirmed"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("Name") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)") - .HasColumnName("Name"); - - b.Property("PhoneNumber") - .HasMaxLength(16) - .HasColumnType("nvarchar(16)") - .HasColumnName("PhoneNumber"); - - b.Property("PhoneNumberConfirmed") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("PhoneNumberConfirmed"); - - b.Property("Surname") - .HasMaxLength(64) - .HasColumnType("nvarchar(64)") - .HasColumnName("Surname"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("UserName") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("nvarchar(256)") - .HasColumnName("UserName"); - - b.HasKey("Id"); - - b.HasIndex("TenantId", "Email"); - - b.HasIndex("TenantId", "UserName"); - - b.ToTable("CmsUsers"); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => - { - b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) - .WithMany("Actions") - .HasForeignKey("AuditLogId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => - { - b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) - .WithMany("EntityChanges") - .HasForeignKey("AuditLogId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => - { - b.HasOne("Volo.Abp.AuditLogging.EntityChange", null) - .WithMany("PropertyChanges") - .HasForeignKey("EntityChangeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => - { - b.HasOne("Volo.Abp.Identity.IdentityRole", null) - .WithMany("Claims") - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => - { - b.HasOne("Volo.Abp.Identity.IdentityUser", null) - .WithMany("Claims") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => - { - b.HasOne("Volo.Abp.Identity.IdentityUser", null) - .WithMany("Logins") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => - { - b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) - .WithMany() - .HasForeignKey("OrganizationUnitId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Volo.Abp.Identity.IdentityUser", null) - .WithMany("OrganizationUnits") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => - { - b.HasOne("Volo.Abp.Identity.IdentityRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Volo.Abp.Identity.IdentityUser", null) - .WithMany("Roles") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => - { - b.HasOne("Volo.Abp.Identity.IdentityUser", null) - .WithMany("Tokens") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => - { - b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) - .WithMany() - .HasForeignKey("ParentId"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => - { - b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) - .WithMany("Roles") - .HasForeignKey("OrganizationUnitId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Volo.Abp.Identity.IdentityRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => - { - b.HasOne("Volo.Abp.TenantManagement.Tenant", null) - .WithMany("ConnectionStrings") - .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => - { - b.Navigation("Actions"); - - b.Navigation("EntityChanges"); - }); - - modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => - { - b.Navigation("PropertyChanges"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => - { - b.Navigation("Claims"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => - { - b.Navigation("Claims"); - - b.Navigation("Logins"); - - b.Navigation("OrganizationUnits"); - - b.Navigation("Roles"); - - b.Navigation("Tokens"); - }); - - modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => - { - b.Navigation("Roles"); - }); - - modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => - { - b.Navigation("ConnectionStrings"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201224075340_Added_ContentAndTags.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201224075340_Added_ContentAndTags.cs deleted file mode 100644 index 572bef4266..0000000000 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201224075340_Added_ContentAndTags.cs +++ /dev/null @@ -1,99 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -namespace Volo.CmsKit.Migrations -{ - public partial class Added_ContentAndTags : Migration - { - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "CmsContents", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - EntityType = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), - EntityId = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), - Value = table.Column(type: "nvarchar(max)", maxLength: 2147483647, nullable: false), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), - ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true), - CreationTime = table.Column(type: "datetime2", nullable: false), - CreatorId = table.Column(type: "uniqueidentifier", nullable: true), - LastModificationTime = table.Column(type: "datetime2", nullable: true), - LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), - IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), - DeleterId = table.Column(type: "uniqueidentifier", nullable: true), - DeletionTime = table.Column(type: "datetime2", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_CmsContents", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "CmsEntityTags", - columns: table => new - { - TagId = table.Column(type: "uniqueidentifier", nullable: false), - EntityId = table.Column(type: "uniqueidentifier", nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_CmsEntityTags", x => new { x.TenantId, x.EntityId, x.TagId }); - }); - - migrationBuilder.CreateTable( - name: "CmsTags", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - EntityType = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), - Name = table.Column(type: "nvarchar(32)", maxLength: 32, nullable: false), - HexColor = table.Column(type: "nvarchar(6)", maxLength: 6, nullable: false), - TenantId = table.Column(type: "uniqueidentifier", nullable: true), - ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), - ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true), - CreationTime = table.Column(type: "datetime2", nullable: false), - CreatorId = table.Column(type: "uniqueidentifier", nullable: true), - LastModificationTime = table.Column(type: "datetime2", nullable: true), - LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), - IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), - DeleterId = table.Column(type: "uniqueidentifier", nullable: true), - DeletionTime = table.Column(type: "datetime2", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_CmsTags", x => x.Id); - }); - - migrationBuilder.CreateIndex( - name: "IX_CmsContents_TenantId_EntityType_EntityId", - table: "CmsContents", - columns: new[] { "TenantId", "EntityType", "EntityId" }); - - migrationBuilder.CreateIndex( - name: "IX_CmsEntityTags_TenantId_EntityId_TagId", - table: "CmsEntityTags", - columns: new[] { "TenantId", "EntityId", "TagId" }); - - migrationBuilder.CreateIndex( - name: "IX_CmsTags_TenantId_Name", - table: "CmsTags", - columns: new[] { "TenantId", "Name" }); - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "CmsContents"); - - migrationBuilder.DropTable( - name: "CmsEntityTags"); - - migrationBuilder.DropTable( - name: "CmsTags"); - } - } -} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201224075340_Added_ContentAndTags.Designer.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201224140744_Initial.Designer.cs similarity index 99% rename from modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201224075340_Added_ContentAndTags.Designer.cs rename to modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201224140744_Initial.Designer.cs index 28f86174e7..7ced9b3a54 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201224075340_Added_ContentAndTags.Designer.cs +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201224140744_Initial.Designer.cs @@ -11,8 +11,8 @@ using Volo.CmsKit.EntityFrameworkCore; namespace Volo.CmsKit.Migrations { [DbContext(typeof(UnifiedDbContext))] - [Migration("20201224075340_Added_ContentAndTags")] - partial class Added_ContentAndTags + [Migration("20201224140744_Initial")] + partial class Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) { @@ -1251,17 +1251,17 @@ namespace Volo.CmsKit.Migrations modelBuilder.Entity("Volo.CmsKit.Tags.EntityTag", b => { - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("EntityId") - .HasColumnType("uniqueidentifier"); + b.Property("EntityId") + .HasColumnType("nvarchar(450)"); b.Property("TagId") .HasColumnType("uniqueidentifier"); - b.HasKey("TenantId", "EntityId", "TagId"); + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("EntityId", "TagId"); b.HasIndex("TenantId", "EntityId", "TagId"); @@ -1306,7 +1306,6 @@ namespace Volo.CmsKit.Migrations .HasColumnName("ExtraProperties"); b.Property("HexColor") - .IsRequired() .HasMaxLength(6) .HasColumnType("nvarchar(6)"); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201210071514_Initial.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201224140744_Initial.cs similarity index 90% rename from modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201210071514_Initial.cs rename to modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201224140744_Initial.cs index 54f7ac975c..826acae0d9 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201210071514_Initial.cs +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201224140744_Initial.cs @@ -269,6 +269,43 @@ namespace Volo.CmsKit.Migrations table.PrimaryKey("PK_CmsComments", x => x.Id); }); + migrationBuilder.CreateTable( + name: "CmsContents", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + EntityType = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), + EntityId = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), + Value = table.Column(type: "nvarchar(max)", maxLength: 2147483647, nullable: false), + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), + ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true), + LastModificationTime = table.Column(type: "datetime2", nullable: true), + LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), + IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), + DeleterId = table.Column(type: "uniqueidentifier", nullable: true), + DeletionTime = table.Column(type: "datetime2", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_CmsContents", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "CmsEntityTags", + columns: table => new + { + TagId = table.Column(type: "uniqueidentifier", nullable: false), + EntityId = table.Column(type: "nvarchar(450)", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_CmsEntityTags", x => new { x.EntityId, x.TagId }); + }); + migrationBuilder.CreateTable( name: "CmsRatings", columns: table => new @@ -286,6 +323,30 @@ namespace Volo.CmsKit.Migrations table.PrimaryKey("PK_CmsRatings", x => x.Id); }); + migrationBuilder.CreateTable( + name: "CmsTags", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + EntityType = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), + Name = table.Column(type: "nvarchar(32)", maxLength: 32, nullable: false), + HexColor = table.Column(type: "nvarchar(6)", maxLength: 6, nullable: true), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), + ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true), + LastModificationTime = table.Column(type: "datetime2", nullable: true), + LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), + IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), + DeleterId = table.Column(type: "uniqueidentifier", nullable: true), + DeletionTime = table.Column(type: "datetime2", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_CmsTags", x => x.Id); + }); + migrationBuilder.CreateTable( name: "CmsUserReactions", columns: table => new @@ -736,11 +797,26 @@ namespace Volo.CmsKit.Migrations table: "CmsComments", columns: new[] { "TenantId", "RepliedCommentId" }); + migrationBuilder.CreateIndex( + name: "IX_CmsContents_TenantId_EntityType_EntityId", + table: "CmsContents", + columns: new[] { "TenantId", "EntityType", "EntityId" }); + + migrationBuilder.CreateIndex( + name: "IX_CmsEntityTags_TenantId_EntityId_TagId", + table: "CmsEntityTags", + columns: new[] { "TenantId", "EntityId", "TagId" }); + migrationBuilder.CreateIndex( name: "IX_CmsRatings_TenantId_EntityType_EntityId_CreatorId", table: "CmsRatings", columns: new[] { "TenantId", "EntityType", "EntityId", "CreatorId" }); + migrationBuilder.CreateIndex( + name: "IX_CmsTags_TenantId_Name", + table: "CmsTags", + columns: new[] { "TenantId", "Name" }); + migrationBuilder.CreateIndex( name: "IX_CmsUserReactions_TenantId_CreatorId_EntityType_EntityId_ReactionName", table: "CmsUserReactions", @@ -815,9 +891,18 @@ namespace Volo.CmsKit.Migrations migrationBuilder.DropTable( name: "CmsComments"); + migrationBuilder.DropTable( + name: "CmsContents"); + + migrationBuilder.DropTable( + name: "CmsEntityTags"); + migrationBuilder.DropTable( name: "CmsRatings"); + migrationBuilder.DropTable( + name: "CmsTags"); + migrationBuilder.DropTable( name: "CmsUserReactions"); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs index 78f5a086d4..49468416a0 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs @@ -1249,17 +1249,17 @@ namespace Volo.CmsKit.Migrations modelBuilder.Entity("Volo.CmsKit.Tags.EntityTag", b => { - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.Property("EntityId") - .HasColumnType("uniqueidentifier"); + b.Property("EntityId") + .HasColumnType("nvarchar(450)"); b.Property("TagId") .HasColumnType("uniqueidentifier"); - b.HasKey("TenantId", "EntityId", "TagId"); + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("EntityId", "TagId"); b.HasIndex("TenantId", "EntityId", "TagId"); @@ -1304,7 +1304,6 @@ namespace Volo.CmsKit.Migrations .HasColumnName("ExtraProperties"); b.Property("HexColor") - .IsRequired() .HasMaxLength(6) .HasColumnType("nvarchar(6)"); From 16ff0a25f252fc909d3c1e41b703547168ecc384 Mon Sep 17 00:00:00 2001 From: enisn Date: Thu, 24 Dec 2020 17:08:42 +0300 Subject: [PATCH 058/217] CmsKit Tags presentation --- .../Pages/Index.cshtml | 24 ++++++++++++++++++- .../Pages/_ViewImports.cshtml | 1 + 2 files changed, 24 insertions(+), 1 deletion(-) 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 78986a8a99..1bfd46cdac 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 @@ -8,6 +8,7 @@ @using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Rating @using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.ReactionSelection @using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Contents +@using Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.Tags @model IndexModel @inject IStringLocalizer Localizer

CMS Kit DEMO

@@ -17,11 +18,20 @@ @await Component.InvokeAsync(typeof(ContentViewComponent), new { entityType = "quote", entityId = "1" }) - + + @await Component.InvokeAsync(typeof(TagViewComponent), new + { + entityType = "quote", + entityId = "1", + tags = new List { "a", "b" } + }) + + + @if (GlobalFeatureManager.Instance.IsEnabled()) @@ -72,3 +82,15 @@ } + + + + + @await Component.InvokeAsync(typeof(TagViewComponent), new + { + entityType = "IndexPage", + entityId = Guid.Empty.ToString(), + tags = new List { "a", "b" } + }) + + diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Pages/_ViewImports.cshtml b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Pages/_ViewImports.cshtml index da4fb49a47..b059f6fec9 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Pages/_ViewImports.cshtml +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Pages/_ViewImports.cshtml @@ -3,3 +3,4 @@ @addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI.Bootstrap @addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI.Bundling @addTagHelper *, Volo.CmsKit.Public.Web +@addTagHelper *, Volo.CmsKit.Common.Web From 995a4e2ff2bd1270890bf500d24386cc1a3aa06f Mon Sep 17 00:00:00 2001 From: enisn Date: Thu, 24 Dec 2020 17:29:34 +0300 Subject: [PATCH 059/217] Fix naming convention of ContentRepository --- .../Volo/CmsKit/Contents/ContentAppService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs index a256277780..a26dd1f006 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs @@ -18,7 +18,7 @@ namespace Volo.CmsKit.Contents public virtual async Task GetAsync(GetContentInput input) { - var entity = await _contentRepository.FindAsync( + var entity = await ContentRepository.FindAsync( input.EntityType, input.EntityId, CurrentTenant.Id); From db6d5b50aa874489b1c6d42c445a3fa33eb1727b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 24 Dec 2020 18:16:49 +0300 Subject: [PATCH 060/217] Make multi-tenancy connection string resolving async. --- .../Data/DefaultConnectionStringResolver.cs | 16 +++++- .../Abp/Data/IConnectionStringResolver.cs | 8 ++- .../IConnectionStringResolverExtensions.cs | 14 ++++- .../DbContextOptionsFactory.cs | 4 ++ .../UnitOfWorkDbContextProvider.cs | 2 +- .../MemoryDb/IMemoryDbRepository.cs | 9 +++- .../MemoryDb/MemoryDbRepository.cs | 35 ++++++++---- .../MemoryDbCoreRepositoryExtensions.cs | 17 +++++- .../Abp/MemoryDb/IMemoryDatabaseProvider.cs | 12 ++++- .../UnitOfWorkMemoryDatabaseProvider.cs | 36 +++++++++++-- .../UnitOfWorkMongoDbContextProvider.cs | 2 +- .../Volo/Abp/MultiTenancy/ITenantStore.cs | 4 +- .../MultiTenantConnectionStringResolver.cs | 53 +++++++++++++++++++ .../Data/ConnectionStringResolver_Tests.cs | 15 +++--- .../Abp/TestApp/MemoryDb/CityRepository.cs | 8 +-- ...ltiTenantConnectionStringResolver_Tests.cs | 21 ++++---- .../Abp/TenantManagement/ITenantRepository.cs | 18 ++++--- .../Volo/Abp/TenantManagement/TenantStore.cs | 4 +- .../EfCoreTenantRepository.cs | 2 + .../MongoDb/MongoTenantRepository.cs | 2 + 20 files changed, 226 insertions(+), 56 deletions(-) diff --git a/framework/src/Volo.Abp.Data/Volo/Abp/Data/DefaultConnectionStringResolver.cs b/framework/src/Volo.Abp.Data/Volo/Abp/Data/DefaultConnectionStringResolver.cs index 84221fb271..4d5ce2fb27 100644 --- a/framework/src/Volo.Abp.Data/Volo/Abp/Data/DefaultConnectionStringResolver.cs +++ b/framework/src/Volo.Abp.Data/Volo/Abp/Data/DefaultConnectionStringResolver.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Threading.Tasks; using Microsoft.Extensions.Options; using Volo.Abp.DependencyInjection; @@ -14,7 +15,18 @@ namespace Volo.Abp.Data Options = options.Value; } + [Obsolete("Use ResolveAsync method.")] public virtual string Resolve(string connectionStringName = null) + { + return ResolveInternal(connectionStringName); + } + + public virtual Task ResolveAsync(string connectionStringName = null) + { + return Task.FromResult(ResolveInternal(connectionStringName)); + } + + private string ResolveInternal(string connectionStringName) { //Get module specific value if provided if (!connectionStringName.IsNullOrEmpty()) @@ -25,9 +37,9 @@ namespace Volo.Abp.Data return moduleConnString; } } - + //Get default value return Options.ConnectionStrings.Default; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Data/Volo/Abp/Data/IConnectionStringResolver.cs b/framework/src/Volo.Abp.Data/Volo/Abp/Data/IConnectionStringResolver.cs index e9344ef66a..3bc8e22d78 100644 --- a/framework/src/Volo.Abp.Data/Volo/Abp/Data/IConnectionStringResolver.cs +++ b/framework/src/Volo.Abp.Data/Volo/Abp/Data/IConnectionStringResolver.cs @@ -1,10 +1,16 @@ -using JetBrains.Annotations; +using System; +using System.Threading.Tasks; +using JetBrains.Annotations; namespace Volo.Abp.Data { public interface IConnectionStringResolver { [NotNull] + [Obsolete("Use ResolveAsync method.")] string Resolve(string connectionStringName = null); + + [NotNull] + Task ResolveAsync(string connectionStringName = null); } } diff --git a/framework/src/Volo.Abp.Data/Volo/Abp/Data/IConnectionStringResolverExtensions.cs b/framework/src/Volo.Abp.Data/Volo/Abp/Data/IConnectionStringResolverExtensions.cs index e3a89e24e8..1fa097964c 100644 --- a/framework/src/Volo.Abp.Data/Volo/Abp/Data/IConnectionStringResolverExtensions.cs +++ b/framework/src/Volo.Abp.Data/Volo/Abp/Data/IConnectionStringResolverExtensions.cs @@ -1,10 +1,22 @@ -namespace Volo.Abp.Data +using System; +using System.Threading.Tasks; +using JetBrains.Annotations; + +namespace Volo.Abp.Data { public static class ConnectionStringResolverExtensions { + [NotNull] + [Obsolete("Use ResolveAsync method")] public static string Resolve(this IConnectionStringResolver resolver) { return resolver.Resolve(ConnectionStringNameAttribute.GetConnStringName()); } + + [NotNull] + public static Task ResolveAsync(this IConnectionStringResolver resolver) + { + return resolver.ResolveAsync(ConnectionStringNameAttribute.GetConnStringName()); + } } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/DbContextOptionsFactory.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/DbContextOptionsFactory.cs index a2d52eac48..0147de12fb 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/DbContextOptionsFactory.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DependencyInjection/DbContextOptionsFactory.cs @@ -86,7 +86,11 @@ namespace Volo.Abp.EntityFrameworkCore.DependencyInjection } var connectionStringName = ConnectionStringNameAttribute.GetConnStringName(); + + //Use DefaultConnectionStringResolver.Resolve when we remove IConnectionStringResolver.Resolve +#pragma warning disable 618 var connectionString = serviceProvider.GetRequiredService().Resolve(connectionStringName); +#pragma warning restore 618 return new DbContextCreationContext( connectionStringName, diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs index 3539830beb..7490862b95 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs @@ -71,7 +71,7 @@ namespace Volo.Abp.Uow.EntityFrameworkCore } var connectionStringName = ConnectionStringNameAttribute.GetConnStringName(); - var connectionString = _connectionStringResolver.Resolve(connectionStringName); + var connectionString = await _connectionStringResolver.ResolveAsync(connectionStringName); var dbContextKey = $"{typeof(TDbContext).FullName}_{connectionString}"; diff --git a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/IMemoryDbRepository.cs b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/IMemoryDbRepository.cs index c179b68931..6d4fb7d896 100644 --- a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/IMemoryDbRepository.cs +++ b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/IMemoryDbRepository.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Threading.Tasks; using Volo.Abp.Domain.Entities; namespace Volo.Abp.Domain.Repositories.MemoryDb @@ -6,9 +7,15 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb public interface IMemoryDbRepository : IRepository where TEntity : class, IEntity { + [Obsolete("Use GetDatabaseAsync() method.")] IMemoryDatabase Database { get; } + [Obsolete("Use GetCollectionAsync() method.")] IMemoryDatabaseCollection Collection { get; } + + Task GetDatabaseAsync(); + + Task> GetCollectionAsync(); } public interface IMemoryDbRepository : IMemoryDbRepository, IRepository diff --git a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs index 3318d10d72..811c51ed5f 100644 --- a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs +++ b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs @@ -21,10 +21,22 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb { //TODO: Add dbcontext just like mongodb implementation! + [Obsolete("Use GetCollectionAsync method.")] public virtual IMemoryDatabaseCollection Collection => Database.Collection(); + public async Task> GetCollectionAsync() + { + return (await GetDatabaseAsync()).Collection(); + } + + [Obsolete("Use GetDatabaseAsync method.")] public virtual IMemoryDatabase Database => DatabaseProvider.GetDatabase(); + public Task GetDatabaseAsync() + { + return DatabaseProvider.GetDatabaseAsync(); + } + protected IMemoryDatabaseProvider DatabaseProvider { get; } public ILocalEventBus LocalEventBus { get; set; } @@ -52,9 +64,9 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb return ApplyDataFilters(Collection.AsQueryable()); } - public override Task> GetQueryableAsync() + public override async Task> GetQueryableAsync() { - return Task.FromResult(ApplyDataFilters(Collection.AsQueryable())); + return ApplyDataFilters((await GetCollectionAsync()).AsQueryable()); } protected virtual async Task TriggerDomainEventsAsync(object entity) @@ -196,7 +208,7 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb { await ApplyAbpConceptsForAddedEntityAsync(entity); - Collection.Add(entity); + (await GetCollectionAsync()).Add(entity); return entity; } @@ -220,7 +232,7 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb await TriggerDomainEventsAsync(entity); - Collection.Update(entity); + (await GetCollectionAsync()).Update(entity); return entity; } @@ -235,11 +247,11 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb if (entity is ISoftDelete softDeleteEntity && !IsHardDeleted(entity)) { softDeleteEntity.IsDeleted = true; - Collection.Update(entity); + (await GetCollectionAsync()).Update(entity); } else { - Collection.Remove(entity); + (await GetCollectionAsync()).Remove(entity); } } @@ -276,13 +288,13 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb { } - public override Task InsertAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) + public override async Task InsertAsync(TEntity entity, bool autoSave = false, CancellationToken cancellationToken = default) { - SetIdIfNeeded(entity); - return base.InsertAsync(entity, autoSave, cancellationToken); + await SetIdIfNeededAsync(entity); + return await base.InsertAsync(entity, autoSave, cancellationToken); } - protected virtual void SetIdIfNeeded(TEntity entity) + protected virtual async Task SetIdIfNeededAsync(TEntity entity) { if (typeof(TKey) == typeof(int) || typeof(TKey) == typeof(long) || @@ -290,7 +302,8 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb { if (EntityHelper.HasDefaultId(entity)) { - EntityHelper.TrySetId(entity, () => Database.GenerateNextId()); + var nextId = (await GetDatabaseAsync()).GenerateNextId(); + EntityHelper.TrySetId(entity, () => nextId); } } } diff --git a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDbCoreRepositoryExtensions.cs b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDbCoreRepositoryExtensions.cs index 1547a581e5..003bf8b034 100644 --- a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDbCoreRepositoryExtensions.cs +++ b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDbCoreRepositoryExtensions.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Threading.Tasks; using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Repositories.MemoryDb; @@ -7,18 +8,32 @@ namespace Volo.Abp.Domain.Repositories { public static class MemoryDbCoreRepositoryExtensions { + [Obsolete("Use GetDatabaseAsync method.")] public static IMemoryDatabase GetDatabase(this IBasicRepository repository) where TEntity : class, IEntity { return repository.ToMemoryDbRepository().Database; } + public static Task GetDatabaseAsync(this IBasicRepository repository) + where TEntity : class, IEntity + { + return repository.ToMemoryDbRepository().GetDatabaseAsync(); + } + + [Obsolete("Use GetCollectionAsync method.")] public static IMemoryDatabaseCollection GetCollection(this IBasicRepository repository) where TEntity : class, IEntity { return repository.ToMemoryDbRepository().Collection; } + public static Task> GetCollectionAsync(this IBasicRepository repository) + where TEntity : class, IEntity + { + return repository.ToMemoryDbRepository().GetCollectionAsync(); + } + public static IMemoryDbRepository ToMemoryDbRepository(this IBasicRepository repository) where TEntity : class, IEntity { @@ -31,4 +46,4 @@ namespace Volo.Abp.Domain.Repositories return memoryDbRepository; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/MemoryDb/IMemoryDatabaseProvider.cs b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/MemoryDb/IMemoryDatabaseProvider.cs index ad4456c793..514b079e69 100644 --- a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/MemoryDb/IMemoryDatabaseProvider.cs +++ b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/MemoryDb/IMemoryDatabaseProvider.cs @@ -1,12 +1,20 @@ -using Volo.Abp.Domain.Repositories.MemoryDb; +using System; +using System.Threading.Tasks; +using Volo.Abp.Domain.Repositories.MemoryDb; namespace Volo.Abp.MemoryDb { public interface IMemoryDatabaseProvider where TMemoryDbContext : MemoryDbContext { + [Obsolete("Use GetDbContextAsync method.")] TMemoryDbContext DbContext { get; } + Task GetDbContextAsync(); + + [Obsolete("Use GetDatabaseAsync method.")] IMemoryDatabase GetDatabase(); + + Task GetDatabaseAsync(); } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Uow/MemoryDb/UnitOfWorkMemoryDatabaseProvider.cs b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Uow/MemoryDb/UnitOfWorkMemoryDatabaseProvider.cs index 24c1cdaeb9..c2c5a1df71 100644 --- a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Uow/MemoryDb/UnitOfWorkMemoryDatabaseProvider.cs +++ b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Uow/MemoryDb/UnitOfWorkMemoryDatabaseProvider.cs @@ -1,4 +1,6 @@ -using Volo.Abp.Data; +using System; +using System.Threading.Tasks; +using Volo.Abp.Data; using Volo.Abp.Domain.Repositories.MemoryDb; using Volo.Abp.MemoryDb; @@ -8,7 +10,7 @@ namespace Volo.Abp.Uow.MemoryDb where TMemoryDbContext : MemoryDbContext { public TMemoryDbContext DbContext { get; } - + private readonly IUnitOfWorkManager _unitOfWorkManager; private readonly IConnectionStringResolver _connectionStringResolver; private readonly MemoryDatabaseManager _memoryDatabaseManager; @@ -16,7 +18,7 @@ namespace Volo.Abp.Uow.MemoryDb public UnitOfWorkMemoryDatabaseProvider( IUnitOfWorkManager unitOfWorkManager, IConnectionStringResolver connectionStringResolver, - TMemoryDbContext dbContext, + TMemoryDbContext dbContext, MemoryDatabaseManager memoryDatabaseManager) { _unitOfWorkManager = unitOfWorkManager; @@ -25,6 +27,12 @@ namespace Volo.Abp.Uow.MemoryDb _memoryDatabaseManager = memoryDatabaseManager; } + public Task GetDbContextAsync() + { + return Task.FromResult(DbContext); + } + + [Obsolete("Use GetDatabaseAsync method.")] public IMemoryDatabase GetDatabase() { var unitOfWork = _unitOfWorkManager.Current; @@ -44,5 +52,25 @@ namespace Volo.Abp.Uow.MemoryDb return ((MemoryDbDatabaseApi)databaseApi).Database; } + + public async Task GetDatabaseAsync() + { + var unitOfWork = _unitOfWorkManager.Current; + if (unitOfWork == null) + { + throw new AbpException($"A {nameof(IMemoryDatabase)} instance can only be created inside a unit of work!"); + } + + var connectionString = await _connectionStringResolver.ResolveAsync(); + var dbContextKey = $"{typeof(TMemoryDbContext).FullName}_{connectionString}"; + + var databaseApi = unitOfWork.GetOrAddDatabaseApi( + dbContextKey, + () => new MemoryDbDatabaseApi( + _memoryDatabaseManager.Get(connectionString) + )); + + return ((MemoryDbDatabaseApi)databaseApi).Database; + } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs index 1ce1dc4649..a3d6fe7cf4 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs @@ -64,7 +64,7 @@ namespace Volo.Abp.Uow.MongoDB $"A {nameof(IMongoDatabase)} instance can only be created inside a unit of work!"); } - var connectionString = _connectionStringResolver.Resolve(); + var connectionString = await _connectionStringResolver.ResolveAsync(); var dbContextKey = $"{typeof(TMongoDbContext).FullName}_{connectionString}"; var mongoUrl = new MongoUrl(connectionString); diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ITenantStore.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ITenantStore.cs index 7125a97405..6c66044e37 100644 --- a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ITenantStore.cs +++ b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/ITenantStore.cs @@ -9,8 +9,10 @@ namespace Volo.Abp.MultiTenancy Task FindAsync(Guid id); + [Obsolete("Use FindAsync method.")] TenantConfiguration Find(string name); + [Obsolete("Use FindAsync method.")] TenantConfiguration Find(Guid id); } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs index d92409fe0d..0d82419013 100644 --- a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs +++ b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Volo.Abp.Data; @@ -23,6 +24,58 @@ namespace Volo.Abp.MultiTenancy _serviceProvider = serviceProvider; } + public override async Task ResolveAsync(string connectionStringName = null) + { + //No current tenant, fallback to default logic + if (_currentTenant.Id == null) + { + return await base.ResolveAsync(connectionStringName); + } + + using (var serviceScope = _serviceProvider.CreateScope()) + { + var tenantStore = serviceScope + .ServiceProvider + .GetRequiredService(); + + var tenant = await tenantStore.FindAsync(_currentTenant.Id.Value); + + if (tenant?.ConnectionStrings == null) + { + return await base.ResolveAsync(connectionStringName); + } + + //Requesting default connection string + if (connectionStringName == null) + { + return tenant.ConnectionStrings.Default ?? + Options.ConnectionStrings.Default; + } + + //Requesting specific connection string + var connString = tenant.ConnectionStrings.GetOrDefault(connectionStringName); + if (connString != null) + { + return connString; + } + + /* Requested a specific connection string, but it's not specified for the tenant. + * - If it's specified in options, use it. + * - If not, use tenant's default conn string. + */ + + var connStringInOptions = Options.ConnectionStrings.GetOrDefault(connectionStringName); + if (connStringInOptions != null) + { + return connStringInOptions; + } + + return tenant.ConnectionStrings.Default ?? + Options.ConnectionStrings.Default; + } + } + + [Obsolete("Use ResolveAsync method.")] public override string Resolve(string connectionStringName = null) { //No current tenant, fallback to default logic diff --git a/framework/test/Volo.Abp.Data.Tests/Volo/Abp/Data/ConnectionStringResolver_Tests.cs b/framework/test/Volo.Abp.Data.Tests/Volo/Abp/Data/ConnectionStringResolver_Tests.cs index d13c89671e..3971c29ff0 100644 --- a/framework/test/Volo.Abp.Data.Tests/Volo/Abp/Data/ConnectionStringResolver_Tests.cs +++ b/framework/test/Volo.Abp.Data.Tests/Volo/Abp/Data/ConnectionStringResolver_Tests.cs @@ -1,4 +1,5 @@ -using Microsoft.Extensions.DependencyInjection; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; using Shouldly; using Volo.Abp.Modularity; using Volo.Abp.Testing; @@ -21,21 +22,21 @@ namespace Volo.Abp.Data } [Fact] - public void Should_Get_Default_ConnString_By_Default() + public async Task Should_Get_Default_ConnString_By_Default() { - _connectionStringResolver.Resolve().ShouldBe(DefaultConnString); + (await _connectionStringResolver.ResolveAsync()).ShouldBe(DefaultConnString); } [Fact] - public void Should_Get_Specific_ConnString_IfDefined() + public async Task Should_Get_Specific_ConnString_IfDefined() { - _connectionStringResolver.Resolve(Database1Name).ShouldBe(Database1ConnString); + (await _connectionStringResolver.ResolveAsync(Database1Name)).ShouldBe(Database1ConnString); } [Fact] - public void Should_Get_Default_ConnString_If_Not_Specified() + public async Task Should_Get_Default_ConnString_If_Not_Specified() { - _connectionStringResolver.Resolve(Database2Name).ShouldBe(DefaultConnString); + (await _connectionStringResolver.ResolveAsync(Database2Name)).ShouldBe(DefaultConnString); } [DependsOn(typeof(AbpDataModule))] diff --git a/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/TestApp/MemoryDb/CityRepository.cs b/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/TestApp/MemoryDb/CityRepository.cs index b6d43dc875..309339e09d 100644 --- a/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/TestApp/MemoryDb/CityRepository.cs +++ b/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/TestApp/MemoryDb/CityRepository.cs @@ -10,21 +10,21 @@ namespace Volo.Abp.TestApp.MemoryDb { public class CityRepository : MemoryDbRepository, ICityRepository { - public CityRepository(IMemoryDatabaseProvider databaseProvider) + public CityRepository(IMemoryDatabaseProvider databaseProvider) : base(databaseProvider) { } - public Task FindByNameAsync(string name) + public async Task FindByNameAsync(string name) { - return Task.FromResult(Collection.FirstOrDefault(c => c.Name == name)); + return (await GetCollectionAsync()).FirstOrDefault(c => c.Name == name); } public async Task> GetPeopleInTheCityAsync(string cityName) { var city = await FindByNameAsync(cityName); - return Database.Collection().Where(p => p.CityId == city.Id).ToList(); + return (await GetDatabaseAsync()).Collection().Where(p => p.CityId == city.Id).ToList(); } } } diff --git a/framework/test/Volo.Abp.MultiTenancy.Tests/Volo/Abp/Data/MultiTenancy/MultiTenantConnectionStringResolver_Tests.cs b/framework/test/Volo.Abp.MultiTenancy.Tests/Volo/Abp/Data/MultiTenancy/MultiTenantConnectionStringResolver_Tests.cs index a6e5fab1c8..f6af2bde72 100644 --- a/framework/test/Volo.Abp.MultiTenancy.Tests/Volo/Abp/Data/MultiTenancy/MultiTenantConnectionStringResolver_Tests.cs +++ b/framework/test/Volo.Abp.MultiTenancy.Tests/Volo/Abp/Data/MultiTenancy/MultiTenantConnectionStringResolver_Tests.cs @@ -1,4 +1,5 @@ using System; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Shouldly; using Volo.Abp.MultiTenancy; @@ -49,28 +50,28 @@ namespace Volo.Abp.Data.MultiTenancy } [Fact] - public void All_Tests() + public async Task All_Tests() { //No tenant in current context - _connectionResolver.Resolve().ShouldBe("default-value"); - _connectionResolver.Resolve("db1").ShouldBe("db1-default-value"); + (await _connectionResolver.ResolveAsync()).ShouldBe("default-value"); + (await _connectionResolver.ResolveAsync("db1")).ShouldBe("db1-default-value"); - //Overrided connection strings for tenant1 + //Overriden connection strings for tenant1 using (_currentTenant.Change(_tenant1Id)) { - _connectionResolver.Resolve().ShouldBe("tenant1-default-value"); - _connectionResolver.Resolve("db1").ShouldBe("tenant1-db1-value"); + (await _connectionResolver.ResolveAsync()).ShouldBe("tenant1-default-value"); + (await _connectionResolver.ResolveAsync("db1")).ShouldBe("tenant1-db1-value"); } //No tenant in current context - _connectionResolver.Resolve().ShouldBe("default-value"); - _connectionResolver.Resolve("db1").ShouldBe("db1-default-value"); + (await _connectionResolver.ResolveAsync()).ShouldBe("default-value"); + (await _connectionResolver.ResolveAsync("db1")).ShouldBe("db1-default-value"); //Undefined connection strings for tenant2 using (_currentTenant.Change(_tenant2Id)) { - _connectionResolver.Resolve().ShouldBe("default-value"); - _connectionResolver.Resolve("db1").ShouldBe("db1-default-value"); + (await _connectionResolver.ResolveAsync()).ShouldBe("default-value"); + (await _connectionResolver.ResolveAsync("db1")).ShouldBe("db1-default-value"); } } } diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/ITenantRepository.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/ITenantRepository.cs index 1feca866a2..8a3fc0b19a 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/ITenantRepository.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/ITenantRepository.cs @@ -9,30 +9,32 @@ namespace Volo.Abp.TenantManagement public interface ITenantRepository : IBasicRepository { Task FindByNameAsync( - string name, - bool includeDetails = true, + string name, + bool includeDetails = true, CancellationToken cancellationToken = default); + [Obsolete("Use FindByNameAsync method.")] Tenant FindByName( string name, bool includeDetails = true ); + [Obsolete("Use FindAsync method.")] Tenant FindById( Guid id, bool includeDetails = true ); Task> GetListAsync( - string sorting = null, - int maxResultCount = int.MaxValue, - int skipCount = 0, - string filter = null, + string sorting = null, + int maxResultCount = int.MaxValue, + int skipCount = 0, + string filter = null, bool includeDetails = false, CancellationToken cancellationToken = default); Task GetCountAsync( - string filter = null, + string filter = null, CancellationToken cancellationToken = default); } -} \ No newline at end of file +} diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/TenantStore.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/TenantStore.cs index 5847ed7d89..00b9ef0963 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/TenantStore.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/TenantStore.cs @@ -15,7 +15,7 @@ namespace Volo.Abp.TenantManagement protected ICurrentTenant CurrentTenant { get; } public TenantStore( - ITenantRepository tenantRepository, + ITenantRepository tenantRepository, IObjectMapper objectMapper, ICurrentTenant currentTenant) { @@ -52,6 +52,7 @@ namespace Volo.Abp.TenantManagement } } + [Obsolete("Use FindAsync method.")] public virtual TenantConfiguration Find(string name) { using (CurrentTenant.Change(null)) //TODO: No need this if we can implement to define host side (or tenant-independent) entities! @@ -66,6 +67,7 @@ namespace Volo.Abp.TenantManagement } } + [Obsolete("Use FindAsync method.")] public virtual TenantConfiguration Find(Guid id) { using (CurrentTenant.Change(null)) //TODO: No need this if we can implement to define host side (or tenant-independent) entities! diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs index 36d28b7659..4b6208e232 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs @@ -28,6 +28,7 @@ namespace Volo.Abp.TenantManagement.EntityFrameworkCore .FirstOrDefaultAsync(t => t.Name == name, GetCancellationToken(cancellationToken)); } + [Obsolete("Use FindByNameAsync method.")] public virtual Tenant FindByName(string name, bool includeDetails = true) { return DbSet @@ -35,6 +36,7 @@ namespace Volo.Abp.TenantManagement.EntityFrameworkCore .FirstOrDefault(t => t.Name == name); } + [Obsolete("Use FindAsync method.")] public virtual Tenant FindById(Guid id, bool includeDetails = true) { return DbSet diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo/Abp/TenantManagement/MongoDb/MongoTenantRepository.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo/Abp/TenantManagement/MongoDb/MongoTenantRepository.cs index abd03ab65d..a2805f7333 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo/Abp/TenantManagement/MongoDb/MongoTenantRepository.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo/Abp/TenantManagement/MongoDb/MongoTenantRepository.cs @@ -28,12 +28,14 @@ namespace Volo.Abp.TenantManagement.MongoDB .FirstOrDefaultAsync(t => t.Name == name, GetCancellationToken(cancellationToken)); } + [Obsolete("Use FindByNameAsync method.")] public virtual Tenant FindByName(string name, bool includeDetails = true) { return GetMongoQueryable() .FirstOrDefault(t => t.Name == name); } + [Obsolete("Use FindAsync method.")] public virtual Tenant FindById(Guid id, bool includeDetails = true) { return GetMongoQueryable() From 2c6ae3a13e07c06b55d560aee428b100b745a1ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 25 Dec 2020 11:56:08 +0300 Subject: [PATCH 061/217] Update MongoDbRepository.cs --- .../Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs index ab0c063191..53c291a178 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs @@ -460,7 +460,11 @@ namespace Volo.Abp.Domain.Repositories.MongoDB [Obsolete("Use GetMongoQueryableAsync method.")] public virtual IMongoQueryable GetMongoQueryable() { - return ApplyDataFilters(SessionHandle != null ? Collection.AsQueryable(SessionHandle) : Collection.AsQueryable()); + return ApplyDataFilters( + SessionHandle != null + ? Collection.AsQueryable(SessionHandle) + : Collection.AsQueryable() + ); } public async Task> GetMongoQueryableAsync(CancellationToken cancellationToken = default) From 16031038833688ecde7d3610640d6519cf908895 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Fri, 25 Dec 2020 12:19:31 +0300 Subject: [PATCH 062/217] Created and configured Page entity --- .../Volo/CmsKit/Pages/PageConsts.cs | 11 ++++++ .../Volo/CmsKit/Pages/IPageRepository.cs | 10 +++++ .../Volo/CmsKit/Pages/Page.cs | 38 +++++++++++++++++++ .../CmsKitDbContextModelCreatingExtensions.cs | 14 +++++++ .../CmsKitEntityFrameworkCoreModule.cs | 2 + .../Volo/CmsKit/Pages/EfCorePageRepository.cs | 14 +++++++ .../CmsKit/MongoDB/CmsKitMongoDbContext.cs | 3 ++ .../MongoDB/CmsKitMongoDbContextExtensions.cs | 6 +++ .../CmsKit/MongoDB/CmsKitMongoDbModule.cs | 3 ++ .../CmsKit/MongoDB/ICmsKitMongoDbContext.cs | 3 ++ .../MongoDB/Pages/MongoPageRepository.cs | 14 +++++++ 11 files changed, 118 insertions(+) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageConsts.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/IPageRepository.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/Page.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Pages/EfCorePageRepository.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageConsts.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageConsts.cs new file mode 100644 index 0000000000..f0b5032ee7 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageConsts.cs @@ -0,0 +1,11 @@ +namespace Volo.CmsKit.Pages +{ + public class PageConsts + { + public const int MaxTitleLength = 256; + + public const int MaxUrlLength = 256; + + public const int MaxDescriptionLength = 515; + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/IPageRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/IPageRepository.cs new file mode 100644 index 0000000000..938bbf9cd4 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/IPageRepository.cs @@ -0,0 +1,10 @@ +using System; +using Volo.Abp.Domain.Repositories; + +namespace Volo.CmsKit.Pages +{ + public interface IPageRepository : IBasicRepository + { + + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/Page.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/Page.cs new file mode 100644 index 0000000000..0a4dd57cc5 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/Page.cs @@ -0,0 +1,38 @@ +using System; +using JetBrains.Annotations; +using Volo.Abp; +using Volo.Abp.Domain.Entities.Auditing; +using Volo.Abp.MultiTenancy; + +namespace Volo.CmsKit.Pages +{ + public class Page : FullAuditedAggregateRoot, IMultiTenant + { + public Guid? TenantId { get; } + + public virtual string Title { get; set; } + + public virtual string Description { get; set; } + + public virtual string Url { get; set; } + + protected Page() + { + + } + + public Page(Guid id, [NotNull] string title, [CanBeNull] string description, [CanBeNull] string url = null, Guid? tenantId = null) : base(id) + { + Title = Check.NotNullOrWhiteSpace(title, nameof(title), PageConsts.MaxTitleLength); + Description = Check.Length(description, nameof(description), PageConsts.MaxDescriptionLength); + SetUrl(url); + + TenantId = tenantId; + } + + public virtual void SetUrl(string url) + { + Url = Check.Length(url, nameof(url), PageConsts.MaxUrlLength); + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs index 2d6441b19e..200401e4c2 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs @@ -10,6 +10,7 @@ using Volo.CmsKit.Users; using Volo.Abp.Users.EntityFrameworkCore; using Volo.CmsKit.Contents; using Volo.CmsKit.GlobalFeatures; +using Volo.CmsKit.Pages; using Volo.CmsKit.Ratings; using Volo.CmsKit.Tags; @@ -135,6 +136,19 @@ namespace Volo.CmsKit.EntityFrameworkCore b.HasIndex(x => new { x.TenantId, x.EntityId, x.TagId }); }); + + builder.Entity(b => + { + b.ToTable(options.TablePrefix + "Pages", options.Schema); + + b.ConfigureByConvention(); + + b.Property(x => x.Title).IsRequired().HasMaxLength(PageConsts.MaxTitleLength); + b.Property(x => x.Url).IsRequired().HasMaxLength(PageConsts.MaxUrlLength); + b.Property(x => x.Description).HasMaxLength(PageConsts.MaxDescriptionLength); + + b.HasIndex(x => new { x.TenantId, x.Url }); + }); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitEntityFrameworkCoreModule.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitEntityFrameworkCoreModule.cs index 7e2057c6f0..c995c21dfb 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitEntityFrameworkCoreModule.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitEntityFrameworkCoreModule.cs @@ -4,6 +4,7 @@ using Volo.Abp.Modularity; using Volo.Abp.Users.EntityFrameworkCore; using Volo.CmsKit.Comments; using Volo.CmsKit.Contents; +using Volo.CmsKit.Pages; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; using Volo.CmsKit.Tags; @@ -29,6 +30,7 @@ namespace Volo.CmsKit.EntityFrameworkCore options.AddRepository(); options.AddRepository(); options.AddRepository(); + options.AddRepository(); }); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Pages/EfCorePageRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Pages/EfCorePageRepository.cs new file mode 100644 index 0000000000..9c3b323f45 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Pages/EfCorePageRepository.cs @@ -0,0 +1,14 @@ +using System; +using Volo.Abp.Domain.Repositories.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; +using Volo.CmsKit.EntityFrameworkCore; + +namespace Volo.CmsKit.Pages +{ + public class EfCorePageRepository : EfCoreRepository, IPageRepository + { + public EfCorePageRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) + { + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs index 965cf917ec..c61d8d9a13 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs @@ -3,6 +3,7 @@ using Volo.Abp.Data; using Volo.Abp.MongoDB; using Volo.CmsKit.Comments; using Volo.CmsKit.Contents; +using Volo.CmsKit.Pages; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; using Volo.CmsKit.Tags; @@ -27,6 +28,8 @@ namespace Volo.CmsKit.MongoDB public IMongoCollection Tags => Collection(); public IMongoCollection EntityTags => Collection(); + + public IMongoCollection Pages => Collection(); protected override void CreateModel(IMongoModelBuilder modelBuilder) { diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs index f208e5644c..7f6dcfecf3 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs @@ -3,6 +3,7 @@ using Volo.Abp; using Volo.Abp.MongoDB; using Volo.CmsKit.Comments; using Volo.CmsKit.Contents; +using Volo.CmsKit.Pages; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; using Volo.CmsKit.Tags; @@ -58,6 +59,11 @@ namespace Volo.CmsKit.MongoDB { x.CollectionName = CmsKitDbProperties.DbTablePrefix + "EntityTags"; }); + + builder.Entity(x => + { + x.CollectionName = CmsKitDbProperties.DbTablePrefix + "Pages"; + }); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs index d86e727a09..898b1687a8 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs @@ -6,10 +6,12 @@ using Volo.CmsKit.Comments; using Volo.CmsKit.Contents; using Volo.CmsKit.MongoDB.Comments; using Volo.CmsKit.MongoDB.Contents; +using Volo.CmsKit.MongoDB.Pages; using Volo.CmsKit.MongoDB.Ratings; using Volo.CmsKit.MongoDB.Reactions; using Volo.CmsKit.MongoDB.Tags; using Volo.CmsKit.MongoDB.Users; +using Volo.CmsKit.Pages; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; using Volo.CmsKit.Tags; @@ -35,6 +37,7 @@ namespace Volo.CmsKit.MongoDB options.AddRepository(); options.AddRepository(); options.AddRepository(); + options.AddRepository(); }); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs index 5d16305567..d33a5ee371 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs @@ -3,6 +3,7 @@ using Volo.Abp.Data; using Volo.Abp.MongoDB; using Volo.CmsKit.Comments; using Volo.CmsKit.Contents; +using Volo.CmsKit.Pages; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; using Volo.CmsKit.Tags; @@ -27,5 +28,7 @@ namespace Volo.CmsKit.MongoDB IMongoCollection Tags { get; } IMongoCollection EntityTags { get; } + + IMongoCollection Pages { get; } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs new file mode 100644 index 0000000000..adf3d85dca --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs @@ -0,0 +1,14 @@ +using System; +using Volo.Abp.Domain.Repositories.MongoDB; +using Volo.Abp.MongoDB; +using Volo.CmsKit.Pages; + +namespace Volo.CmsKit.MongoDB.Pages +{ + public class MongoPageRepository : MongoDbRepository, IPageRepository + { + public MongoPageRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) + { + } + } +} \ No newline at end of file From d0c58bb55433a82258dba99d5c33270a674d9af8 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Fri, 25 Dec 2020 12:32:05 +0300 Subject: [PATCH 063/217] Added delete method to Content repository --- .../Volo/CmsKit/Contents/IContentRepository.cs | 2 ++ .../Volo/CmsKit/Contents/EfCoreContentRepository.cs | 9 +++++++++ .../CmsKit/MongoDB/Contents/MongoContentRepository.cs | 9 +++++++++ 3 files changed, 20 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/IContentRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/IContentRepository.cs index 2adbab8e5a..2ebd53ce57 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/IContentRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/IContentRepository.cs @@ -13,5 +13,7 @@ namespace Volo.CmsKit.Contents [NotNull] string entityId, Guid? tenantId = null, CancellationToken cancellationToken = default); + + Task DeleteAsync([NotNull] string entityType, [NotNull] string entityId, Guid? tenantId = null, CancellationToken cancellationToken = default); } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Contents/EfCoreContentRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Contents/EfCoreContentRepository.cs index 3522eed022..ed9fe6e0ab 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Contents/EfCoreContentRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Contents/EfCoreContentRepository.cs @@ -27,5 +27,14 @@ namespace Volo.CmsKit.Contents cancellationToken: cancellationToken ); } + + public Task DeleteAsync(string entityType, string entityId, Guid? tenantId = null, CancellationToken cancellationToken = default) + { + return DeleteAsync(x => + x.EntityType == entityType && + x.EntityId == entityId && + x.TenantId == tenantId, + cancellationToken: cancellationToken); + } } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Contents/MongoContentRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Contents/MongoContentRepository.cs index f9a65bb469..01542a05f0 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Contents/MongoContentRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Contents/MongoContentRepository.cs @@ -27,5 +27,14 @@ namespace Volo.CmsKit.MongoDB.Contents cancellationToken: cancellationToken ); } + + public Task DeleteAsync(string entityType, string entityId, Guid? tenantId = null, CancellationToken cancellationToken = default) + { + return DeleteAsync(x => + x.EntityType == entityType && + x.EntityId == entityId && + x.TenantId == tenantId, + cancellationToken: cancellationToken); + } } } \ No newline at end of file From 98ed089d80d0ca82a54328d5b32ad4449da8771e Mon Sep 17 00:00:00 2001 From: Ahmet Date: Fri, 25 Dec 2020 12:35:27 +0300 Subject: [PATCH 064/217] Added Get method to Content Repository --- .../Volo/CmsKit/Contents/IContentRepository.cs | 6 ++++++ .../CmsKit/Contents/EfCoreContentRepository.cs | 15 +++++++++++++++ .../MongoDB/Contents/MongoContentRepository.cs | 15 +++++++++++++++ 3 files changed, 36 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/IContentRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/IContentRepository.cs index 2ebd53ce57..acd5ed2a84 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/IContentRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/IContentRepository.cs @@ -8,6 +8,12 @@ namespace Volo.CmsKit.Contents { public interface IContentRepository : IBasicRepository { + Task GetAsync( + [NotNull] string entityType, + [NotNull] string entityId, + Guid? tenantId = null, + CancellationToken cancellationToken = default); + Task FindAsync( [NotNull] string entityType, [NotNull] string entityId, diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Contents/EfCoreContentRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Contents/EfCoreContentRepository.cs index ed9fe6e0ab..d426d1d7c5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Contents/EfCoreContentRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Contents/EfCoreContentRepository.cs @@ -13,6 +13,21 @@ namespace Volo.CmsKit.Contents { } + public Task GetAsync( + string entityType, + string entityId, + Guid? tenantId = null, + CancellationToken cancellationToken = default) + { + return GetAsync(x => + !x.IsDeleted && + x.EntityType == entityType && + x.EntityId == entityId && + x.TenantId == tenantId, + cancellationToken: cancellationToken + ); + } + public Task FindAsync( string entityType, string entityId, diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Contents/MongoContentRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Contents/MongoContentRepository.cs index 01542a05f0..fd673cb34c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Contents/MongoContentRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Contents/MongoContentRepository.cs @@ -13,6 +13,21 @@ namespace Volo.CmsKit.MongoDB.Contents { } + public Task GetAsync( + string entityType, + string entityId, + Guid? tenantId = null, + CancellationToken cancellationToken = default) + { + return GetAsync(x => + !x.IsDeleted && + x.EntityType == entityType && + x.EntityId == entityId && + x.TenantId == tenantId, + cancellationToken: cancellationToken + ); + } + public Task FindAsync( string entityType, string entityId, From 995faff4ba12c79d209d5183e163b4cd1546caf6 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Fri, 25 Dec 2020 12:35:52 +0300 Subject: [PATCH 065/217] Update ContentAppService.cs --- .../Volo/CmsKit/Contents/ContentAppService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs index a26dd1f006..072a68b38d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs @@ -18,7 +18,7 @@ namespace Volo.CmsKit.Contents public virtual async Task GetAsync(GetContentInput input) { - var entity = await ContentRepository.FindAsync( + var entity = await ContentRepository.GetAsync( input.EntityType, input.EntityId, CurrentTenant.Id); From aa71e2c541d1242b0e90e4a60ca75b74d093d298 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Fri, 25 Dec 2020 12:38:32 +0300 Subject: [PATCH 066/217] Added setValue method to content entity --- .../Volo.CmsKit.Domain/Volo/CmsKit/Contents/Content.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/Content.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/Content.cs index 2c3cd28593..354041b51b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/Content.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/Content.cs @@ -14,7 +14,7 @@ namespace Volo.CmsKit.Contents public virtual string EntityId { get; set; } - public virtual string Value { get; set; } + public virtual string Value { get; protected set; } protected Content() { @@ -25,9 +25,14 @@ namespace Volo.CmsKit.Contents { EntityType = Check.NotNullOrWhiteSpace(entityType, nameof(entityType), ContentConsts.MaxEntityTypeLength); EntityId = Check.NotNullOrWhiteSpace(entityId, nameof(entityId), ContentConsts.MaxEntityIdLength); - Value = Check.NotNullOrWhiteSpace(value, nameof(value), ContentConsts.MaxValueLength); + SetValue(value); TenantId = tenantId; } + + public void SetValue([NotNull] string value) + { + Value = Check.NotNullOrWhiteSpace(value, nameof(value), ContentConsts.MaxValueLength); + } } } From e404c3053252493b28fe40df479eb229ea062a53 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Fri, 25 Dec 2020 14:25:55 +0300 Subject: [PATCH 067/217] Created Page application service --- .../Volo/CmsKit/Contents/GetContentInput.cs | 2 +- .../CmsKit/Contents/IContentAppService.cs | 1 - .../Volo/CmsKit/Pages/CheckUrlInputDto.cs | 12 +++ .../Volo/CmsKit/Pages/CreatePageInputDto.cs | 19 ++++ .../Pages/CreatePageWithContentInputDto.cs | 24 +++++ .../Volo/CmsKit/Pages/IPageAppService.cs | 20 ++++ .../Volo/CmsKit/Pages/PageDto.cs | 14 +++ .../Volo/CmsKit/Pages/PageWithContentDto.cs | 17 +++ .../CmsKit/Pages/UpdatePageContentInputDto.cs | 13 +++ .../Volo/CmsKit/Pages/UpdatePageInputDto.cs | 19 ++++ ...tAppService.cs => CmsKitAppServiceBase.cs} | 0 ...msKitCommonApplicationAutoMapperProfile.cs | 5 +- .../Volo/CmsKit/Contents/ContentAppService.cs | 1 - .../Volo/CmsKit/Pages/PageAppService.cs | 100 ++++++++++++++++++ .../Controllers/Contents/ContentController.cs | 1 - .../Contents/ContentViewComponent.cs | 1 - .../Volo/CmsKit/Pages/PageConsts.cs | 6 +- .../Volo/CmsKit/Pages/IPageRepository.cs | 7 +- .../Volo/CmsKit/Pages/Page.cs | 13 +-- .../Volo/CmsKit/Pages/EfCorePageRepository.cs | 17 +++ .../MongoDB/Pages/MongoPageRepository.cs | 17 +++ 21 files changed, 290 insertions(+), 19 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CheckUrlInputDto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CreatePageInputDto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CreatePageWithContentInputDto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/IPageAppService.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/PageDto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/PageWithContentDto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/UpdatePageContentInputDto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/UpdatePageInputDto.cs rename modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/{CmsKitAppService.cs => CmsKitAppServiceBase.cs} (100%) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Pages/PageAppService.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/GetContentInput.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/GetContentInput.cs index 8efddd1e35..ab3bafc51f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/GetContentInput.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/GetContentInput.cs @@ -1,4 +1,4 @@ -namespace Volo.CmsKit.Common.Application.Contracts.Volo.CmsKit.Contents +namespace Volo.CmsKit.Contents { public class GetContentInput { diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentAppService.cs index 714fb6e4fb..fae0bd5271 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentAppService.cs @@ -1,5 +1,4 @@ using System.Threading.Tasks; -using Volo.CmsKit.Common.Application.Contracts.Volo.CmsKit.Contents; namespace Volo.CmsKit.Contents { diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CheckUrlInputDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CheckUrlInputDto.cs new file mode 100644 index 0000000000..6047526e03 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CheckUrlInputDto.cs @@ -0,0 +1,12 @@ +using System.ComponentModel.DataAnnotations; +using Volo.Abp.Validation; + +namespace Volo.CmsKit.Pages +{ + public class CheckUrlInputDto + { + [Required] + [DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxUrlLength))] + public string Url { get; set; } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CreatePageInputDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CreatePageInputDto.cs new file mode 100644 index 0000000000..7f5ce67260 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CreatePageInputDto.cs @@ -0,0 +1,19 @@ +using System.ComponentModel.DataAnnotations; +using Volo.Abp.Validation; + +namespace Volo.CmsKit.Pages +{ + public class CreatePageInputDto + { + [Required] + [DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxTitleLength))] + public string Title { get; set; } + + [Required] + [DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxUrlLength))] + public string Url { get; set; } + + [DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxDescriptionLength))] + public string Description { get; set; } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CreatePageWithContentInputDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CreatePageWithContentInputDto.cs new file mode 100644 index 0000000000..ddbf7ce373 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CreatePageWithContentInputDto.cs @@ -0,0 +1,24 @@ +using System.ComponentModel.DataAnnotations; +using Volo.Abp.Validation; +using Volo.CmsKit.Contents; + +namespace Volo.CmsKit.Pages +{ + public class CreatePageWithContentInputDto + { + [Required] + [DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxTitleLength))] + public string Title { get; set; } + + [Required] + [DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxUrlLength))] + public string Url { get; set; } + + [DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxDescriptionLength))] + public string Description { get; set; } + + [Required] + [DynamicMaxLength(typeof(ContentConsts), nameof(ContentConsts.MaxValueLength))] + public string Content { get; set; } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/IPageAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/IPageAppService.cs new file mode 100644 index 0000000000..0b0cf7d182 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/IPageAppService.cs @@ -0,0 +1,20 @@ +using System; +using System.Threading.Tasks; + +namespace Volo.CmsKit.Pages +{ + public interface IPageAppService + { + Task CreatePageAsync(CreatePageInputDto input); + + Task CreatePageWithContentAsync(CreatePageWithContentInputDto input); + + Task UpdatePageAsync(Guid id, UpdatePageInputDto input); + + Task DoesUrlExistAsync(CheckUrlInputDto input); + + Task UpdatePageContentAsync(Guid id, UpdatePageContentInputDto input); + + Task DeletePageAsync(Guid id); + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/PageDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/PageDto.cs new file mode 100644 index 0000000000..e2a10d39b5 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/PageDto.cs @@ -0,0 +1,14 @@ +using System; +using Volo.Abp.Application.Dtos; + +namespace Volo.CmsKit.Pages +{ + public class PageDto : EntityDto + { + public string Title { get; set; } + + public string Url { get; set; } + + public string Description { get; set; } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/PageWithContentDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/PageWithContentDto.cs new file mode 100644 index 0000000000..b9ed14ab0d --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/PageWithContentDto.cs @@ -0,0 +1,17 @@ +using System; +using Volo.Abp.Application.Dtos; +using Volo.CmsKit.Contents; + +namespace Volo.CmsKit.Pages +{ + public class PageWithContentDto : EntityDto + { + public string Title { get; set; } + + public string Url { get; set; } + + public string Description { get; set; } + + public ContentDto Content { get; set; } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/UpdatePageContentInputDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/UpdatePageContentInputDto.cs new file mode 100644 index 0000000000..ba50ae9f30 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/UpdatePageContentInputDto.cs @@ -0,0 +1,13 @@ +using System.ComponentModel.DataAnnotations; +using Volo.Abp.Validation; +using Volo.CmsKit.Contents; + +namespace Volo.CmsKit.Pages +{ + public class UpdatePageContentInputDto + { + [Required] + [DynamicMaxLength(typeof(ContentConsts), nameof(ContentConsts.MaxValueLength))] + public string Content { get; set; } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/UpdatePageInputDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/UpdatePageInputDto.cs new file mode 100644 index 0000000000..be84b97f4f --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/UpdatePageInputDto.cs @@ -0,0 +1,19 @@ +using System.ComponentModel.DataAnnotations; +using Volo.Abp.Validation; + +namespace Volo.CmsKit.Pages +{ + public class UpdatePageInputDto + { + [Required] + [DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxTitleLength))] + public string Title { get; set; } + + [Required] + [DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxUrlLength))] + public string Url { get; set; } + + [DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxDescriptionLength))] + public string Description { get; set; } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitAppServiceBase.cs similarity index 100% rename from modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitAppService.cs rename to modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitAppServiceBase.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationAutoMapperProfile.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationAutoMapperProfile.cs index c7be0fcc69..b0c6388c30 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationAutoMapperProfile.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationAutoMapperProfile.cs @@ -1,8 +1,9 @@ using AutoMapper; using Volo.CmsKit.Contents; +using Volo.CmsKit.Pages; using Volo.CmsKit.Tags; -namespace Volo.CmsKit.Common.Application.Volo.CmsKit +namespace Volo.CmsKit { public class CmsKitCommonApplicationAutoMapperProfile : Profile { @@ -11,6 +12,8 @@ namespace Volo.CmsKit.Common.Application.Volo.CmsKit CreateMap(); CreateMap(); + + CreateMap(); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs index 072a68b38d..c91478dd6a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using Volo.CmsKit.Common.Application.Contracts.Volo.CmsKit.Contents; namespace Volo.CmsKit.Contents { diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Pages/PageAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Pages/PageAppService.cs new file mode 100644 index 0000000000..435be73ecd --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Pages/PageAppService.cs @@ -0,0 +1,100 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.CmsKit.Contents; + +namespace Volo.CmsKit.Pages +{ + public class PageAppService : CmsKitAppServiceBase, IPageAppService + { + protected readonly IPageRepository PageRepository; + protected readonly IContentRepository ContentRepository; + + public PageAppService(IPageRepository pageRepository, IContentRepository contentRepository) + { + PageRepository = pageRepository; + ContentRepository = contentRepository; + } + + public virtual async Task CreatePageAsync(CreatePageInputDto input) + { + var page = await CreatePageAsync(input.Title, input.Url, input.Description); + + await PageRepository.InsertAsync(page); + + return ObjectMapper.Map(page); + } + + public virtual async Task CreatePageWithContentAsync(CreatePageWithContentInputDto input) + { + var page = await CreatePageAsync(input.Title, input.Url, input.Description); + + await PageRepository.InsertAsync(page); + + var content = new Content( + GuidGenerator.Create(), + nameof(Page), + page.Id.ToString(), + input.Content, + page.TenantId); + + await ContentRepository.InsertAsync(content); + + return ObjectMapper.Map(page); + } + + public virtual async Task UpdatePageAsync(Guid id, UpdatePageInputDto input) + { + var page = await PageRepository.GetAsync(id); + + if (page.Url != input.Url) + { + await CheckPageUrlAsync(input.Url); + } + + page.Title = input.Title; + page.Url = input.Url; + page.Description = input.Description; + + await PageRepository.UpdateAsync(page); + + return ObjectMapper.Map(page); + } + + public virtual Task DoesUrlExistAsync(CheckUrlInputDto input) + { + return PageRepository.DoesExistAsync(input.Url); + } + + public virtual async Task UpdatePageContentAsync(Guid id, UpdatePageContentInputDto input) + { + var pageContent = await ContentRepository.GetAsync(nameof(Page), id.ToString()); + + pageContent.SetValue(input.Content); + + await ContentRepository.UpdateAsync(pageContent); + } + + public virtual async Task DeletePageAsync(Guid id) + { + await ContentRepository.DeleteAsync(nameof(Page), id.ToString(), CurrentTenant?.Id, CancellationToken.None); + await PageRepository.DeleteAsync(id, cancellationToken: CancellationToken.None); + } + + protected virtual async Task CreatePageAsync(string title, string url, string description) + { + await CheckPageUrlAsync(url); + + return new Page(GuidGenerator.Create(), title, url, description, CurrentTenant?.Id); + } + + protected virtual async Task CheckPageUrlAsync(string url) + { + if (await PageRepository.DoesExistAsync(url)) + { + throw new UserFriendlyException("Url exist"); + } + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Contents/ContentController.cs b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Contents/ContentController.cs index 260668e52d..ba108a605c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Contents/ContentController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Contents/ContentController.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using Volo.CmsKit.Common.Application.Contracts.Volo.CmsKit.Contents; using Volo.CmsKit.Contents; namespace Volo.CmsKit.Controllers.Contents diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/ContentViewComponent.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/ContentViewComponent.cs index 14522303c6..48a94f827a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/ContentViewComponent.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/ContentViewComponent.cs @@ -7,7 +7,6 @@ using Microsoft.Extensions.Options; using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc.UI; using Volo.Abp.AspNetCore.Mvc.UI.Widgets; -using Volo.CmsKit.Common.Application.Contracts.Volo.CmsKit.Contents; using Volo.CmsKit.Contents; using Volo.CmsKit.Web.Contents; diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageConsts.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageConsts.cs index f0b5032ee7..105566c2bd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageConsts.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageConsts.cs @@ -2,10 +2,10 @@ { public class PageConsts { - public const int MaxTitleLength = 256; + public static int MaxTitleLength = 256; - public const int MaxUrlLength = 256; + public static int MaxUrlLength = 256; - public const int MaxDescriptionLength = 515; + public static int MaxDescriptionLength = 515; } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/IPageRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/IPageRepository.cs index 938bbf9cd4..95c09474aa 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/IPageRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/IPageRepository.cs @@ -1,10 +1,15 @@ using System; +using System.Threading.Tasks; using Volo.Abp.Domain.Repositories; namespace Volo.CmsKit.Pages { public interface IPageRepository : IBasicRepository { - + Task GetByUrlAsync(string url); + + Task FindByUrlAsync(string url); + + Task DoesExistAsync(string url); } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/Page.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/Page.cs index 0a4dd57cc5..c02617c8d3 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/Page.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/Page.cs @@ -12,27 +12,22 @@ namespace Volo.CmsKit.Pages public virtual string Title { get; set; } + public virtual string Url { get; set; } + public virtual string Description { get; set; } - public virtual string Url { get; set; } - protected Page() { } - public Page(Guid id, [NotNull] string title, [CanBeNull] string description, [CanBeNull] string url = null, Guid? tenantId = null) : base(id) + public Page(Guid id, [NotNull] string title, [NotNull] string url, [CanBeNull] string description, Guid? tenantId = null) : base(id) { Title = Check.NotNullOrWhiteSpace(title, nameof(title), PageConsts.MaxTitleLength); + Url = Check.NotNullOrWhiteSpace(url, nameof(url), PageConsts.MaxUrlLength); Description = Check.Length(description, nameof(description), PageConsts.MaxDescriptionLength); - SetUrl(url); TenantId = tenantId; } - - public virtual void SetUrl(string url) - { - Url = Check.Length(url, nameof(url), PageConsts.MaxUrlLength); - } } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Pages/EfCorePageRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Pages/EfCorePageRepository.cs index 9c3b323f45..4502a13b4c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Pages/EfCorePageRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Pages/EfCorePageRepository.cs @@ -1,4 +1,6 @@ using System; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; using Volo.CmsKit.EntityFrameworkCore; @@ -10,5 +12,20 @@ namespace Volo.CmsKit.Pages public EfCorePageRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) { } + + public Task GetByUrlAsync(string url) + { + return GetAsync(x => x.Url == url); + } + + public Task FindByUrlAsync(string url) + { + return FindAsync(x => x.Url == url); + } + + public Task DoesExistAsync(string url) + { + return DbSet.AnyAsync(x => x.Url == url); + } } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs index adf3d85dca..e7c6cd32f5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs @@ -1,4 +1,6 @@ using System; +using System.Threading.Tasks; +using MongoDB.Driver.Linq; using Volo.Abp.Domain.Repositories.MongoDB; using Volo.Abp.MongoDB; using Volo.CmsKit.Pages; @@ -10,5 +12,20 @@ namespace Volo.CmsKit.MongoDB.Pages public MongoPageRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) { } + + public Task GetByUrlAsync(string url) + { + return GetAsync(x => x.Url == url); + } + + public Task FindByUrlAsync(string url) + { + return FindAsync(x => x.Url == url); + } + + public Task DoesExistAsync(string url) + { + return GetMongoQueryable().AnyAsync(x => x.Url == url); + } } } \ No newline at end of file From f7244d1c5b96d46cea1334ca3a9b8996c23023fd Mon Sep 17 00:00:00 2001 From: Ahmet Date: Fri, 25 Dec 2020 14:40:51 +0300 Subject: [PATCH 068/217] namespace update --- .../host/Volo.CmsKit.Web.Unified/Pages/Index.cshtml | 2 +- .../Shared/Components/Contents/ContentViewComponent.cs | 7 +------ .../Pages/CmsKit/Shared/Components/Contents/Default.cshtml | 3 +-- 3 files changed, 3 insertions(+), 9 deletions(-) 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 1bfd46cdac..b6ce055737 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 @@ -7,7 +7,7 @@ @using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Commenting @using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Rating @using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.ReactionSelection -@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Contents +@using Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.Contents @using Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.Tags @model IndexModel @inject IStringLocalizer Localizer diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/ContentViewComponent.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/ContentViewComponent.cs index 48a94f827a..4e7cc98bd9 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/ContentViewComponent.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/ContentViewComponent.cs @@ -1,16 +1,11 @@ using System; -using System.Collections.Generic; -using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Options; using Volo.Abp.AspNetCore.Mvc; -using Volo.Abp.AspNetCore.Mvc.UI; -using Volo.Abp.AspNetCore.Mvc.UI.Widgets; using Volo.CmsKit.Contents; using Volo.CmsKit.Web.Contents; -namespace Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Contents +namespace Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.Contents { [ViewComponent(Name = "CmsContent")] public class ContentViewComponent : AbpViewComponent diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/Default.cshtml b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/Default.cshtml index f5bd0ba344..eb3cde67b3 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/Default.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/Default.cshtml @@ -1,7 +1,6 @@ @using Microsoft.AspNetCore.Mvc.Localization @using Volo.CmsKit.Localization -@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Contents -@model ContentViewComponent.ContentViewModel +@model Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.Contents.ContentViewComponent.ContentViewModel
@Html.Raw(Model.Rendered) From 009ba05b3465313de6f103e8189660312c596cf8 Mon Sep 17 00:00:00 2001 From: Ilkay Ilknur Date: Fri, 25 Dec 2020 14:48:29 +0300 Subject: [PATCH 069/217] tag and content features has been added. --- .../Pages/Index.cshtml | 54 ++++++++++--------- .../CmsKit/GlobalFeatures/ContentsFeature.cs | 17 ++++++ .../GlobalFeatures/GlobalCmsKitFeatures.cs | 4 ++ .../Volo/CmsKit/GlobalFeatures/TagsFeature.cs | 17 ++++++ 4 files changed, 67 insertions(+), 25 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/ContentsFeature.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/TagsFeature.cs 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 1bfd46cdac..95833052b7 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 @@ -16,39 +16,41 @@ - - @await Component.InvokeAsync(typeof(ContentViewComponent), new { entityType = "quote", entityId = "1" }) - - @await Component.InvokeAsync(typeof(TagViewComponent), new + @if (GlobalFeatureManager.Instance.IsEnabled()) { - entityType = "quote", - entityId = "1", - tags = new List { "a", "b" } - }) - + @await Component.InvokeAsync(typeof(ContentViewComponent), new {entityType = "quote", entityId = "1"}) + } + + @if (GlobalFeatureManager.Instance.IsEnabled()) + { + @await Component.InvokeAsync(typeof(TagViewComponent), new + { + entityType = "quote", + entityId = "1", + tags = new List {"a", "b"} + }) + } - - @if (GlobalFeatureManager.Instance.IsEnabled()) { - @await Component.InvokeAsync(typeof(RatingViewComponent), new { entityType = "quote", entityId = "1" }) + @await Component.InvokeAsync(typeof(RatingViewComponent), new {entityType = "quote", entityId = "1"}) } @if (GlobalFeatureManager.Instance.IsEnabled()) { - @await Component.InvokeAsync(typeof(ReactionSelectionViewComponent), new { entityType = "quote", entityId = "1" }) + @await Component.InvokeAsync(typeof(ReactionSelectionViewComponent), new {entityType = "quote", entityId = "1"}) } @if (GlobalFeatureManager.Instance.IsEnabled()) { - @await Component.InvokeAsync(typeof(CommentingViewComponent), new { entityType = "quote", entityId = "1" }) + @await Component.InvokeAsync(typeof(CommentingViewComponent), new {entityType = "quote", entityId = "1"}) } @@ -58,7 +60,7 @@

"Writing code is very simple, but writing simple code is the hardest thing there is!"

-

- Halil ibrahim Kalkan Inspired from Johan Cruyff

+

- Halil ibrahim Kalkan Inspired from Johan Cruyff

@@ -66,31 +68,33 @@ @if (GlobalFeatureManager.Instance.IsEnabled()) { - @await Component.InvokeAsync(typeof(RatingViewComponent), new { entityType = "quote", entityId = "2" }) + @await Component.InvokeAsync(typeof(RatingViewComponent), new {entityType = "quote", entityId = "2"}) } @if (GlobalFeatureManager.Instance.IsEnabled()) { - @await Component.InvokeAsync(typeof(ReactionSelectionViewComponent), new { entityType = "quote", entityId = "2" }) + @await Component.InvokeAsync(typeof(ReactionSelectionViewComponent), new {entityType = "quote", entityId = "2"}) } @if (GlobalFeatureManager.Instance.IsEnabled()) { - @await Component.InvokeAsync(typeof(CommentingViewComponent), new { entityType = "quote", entityId = "2" }) + @await Component.InvokeAsync(typeof(CommentingViewComponent), new {entityType = "quote", entityId = "2"}) } - - @await Component.InvokeAsync(typeof(TagViewComponent), new + @if (GlobalFeatureManager.Instance.IsEnabled()) { - entityType = "IndexPage", - entityId = Guid.Empty.ToString(), - tags = new List { "a", "b" } - }) + @await Component.InvokeAsync(typeof(TagViewComponent), new + { + entityType = "IndexPage", + entityId = Guid.Empty.ToString(), + tags = new List {"a", "b"} + }) + } - + \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/ContentsFeature.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/ContentsFeature.cs new file mode 100644 index 0000000000..6514a9c7b8 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/ContentsFeature.cs @@ -0,0 +1,17 @@ +using JetBrains.Annotations; +using Volo.Abp.GlobalFeatures; + +namespace Volo.CmsKit.GlobalFeatures +{ + [GlobalFeatureName(Name)] + public class ContentsFeature : GlobalFeature + { + public const string Name = "CmsKit.Contents"; + + internal ContentsFeature( + [NotNull] GlobalCmsKitFeatures cmsKit + ) : base(cmsKit) + { + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/GlobalCmsKitFeatures.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/GlobalCmsKitFeatures.cs index bb7694262b..db987784fd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/GlobalCmsKitFeatures.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/GlobalCmsKitFeatures.cs @@ -13,12 +13,16 @@ namespace Volo.CmsKit.GlobalFeatures public RatingsFeature Ratings => GetFeature(); + public TagsFeature Tags => GetFeature(); + public GlobalCmsKitFeatures([NotNull] GlobalFeatureManager featureManager) : base(featureManager) { AddFeature(new ReactionsFeature(this)); AddFeature(new CommentsFeature(this)); AddFeature(new RatingsFeature(this)); + AddFeature(new TagsFeature(this)); + AddFeature(new ContentsFeature(this)); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/TagsFeature.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/TagsFeature.cs new file mode 100644 index 0000000000..ff20c130fd --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/TagsFeature.cs @@ -0,0 +1,17 @@ +using JetBrains.Annotations; +using Volo.Abp.GlobalFeatures; + +namespace Volo.CmsKit.GlobalFeatures +{ + [GlobalFeatureName(Name)] + public class TagsFeature : GlobalFeature + { + public const string Name = "CmsKit.Tags"; + + internal TagsFeature( + [NotNull] GlobalCmsKitFeatures cmsKit + ) : base(cmsKit) + { + } + } +} \ No newline at end of file From c1561f4e732aeb12cc957a6bbdbb10e635445f71 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Fri, 25 Dec 2020 16:04:48 +0300 Subject: [PATCH 070/217] added default page view component --- .../20201225120048_Added_Page.Designer.cs | 1647 +++++++++++++++++ .../Migrations/20201225120048_Added_Page.cs | 46 + .../UnifiedDbContextModelSnapshot.cs | 71 + .../CmsKit/CmsKitCommonRemoteServiceConsts.cs | 7 + .../Volo/CmsKit/Pages/CheckUrlInputDto.cs | 1 - .../Volo/CmsKit/Pages/CreatePageInputDto.cs | 3 - .../Pages/CreatePageWithContentInputDto.cs | 4 - .../Volo/CmsKit/Pages/IPageAppService.cs | 4 +- .../CmsKit/Pages/UpdatePageContentInputDto.cs | 1 - .../Volo/CmsKit/Pages/UpdatePageInputDto.cs | 3 - .../Volo/CmsKit/Pages/PageAppService.cs | 9 +- .../Controllers/Contents/ContentController.cs | 13 +- .../Controllers/Pages/PageController.cs | 70 + .../CmsKit/Controllers/Tags/TagController.cs | 9 +- .../Shared/Components/Pages/Default.cshtml | 21 + .../Pages/DefaultPageViewComponent.cs | 40 + 16 files changed, 1928 insertions(+), 21 deletions(-) create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201225120048_Added_Page.Designer.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201225120048_Added_Page.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/CmsKitCommonRemoteServiceConsts.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Pages/PageController.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Pages/Default.cshtml create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Pages/DefaultPageViewComponent.cs diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201225120048_Added_Page.Designer.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201225120048_Added_Page.Designer.cs new file mode 100644 index 0000000000..06fcbe43a4 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201225120048_Added_Page.Designer.cs @@ -0,0 +1,1647 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Volo.Abp.EntityFrameworkCore; +using Volo.CmsKit.EntityFrameworkCore; + +namespace Volo.CmsKit.Migrations +{ + [DbContext(typeof(UnifiedDbContext))] + [Migration("20201225120048_Added_Page")] + partial class Added_Page + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .UseIdentityColumns() + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("ProductVersion", "5.0.1"); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)") + .HasColumnName("ApplicationName"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("BrowserInfo"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("ClientId"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("ClientIpAddress"); + + b.Property("ClientName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("ClientName"); + + b.Property("Comments") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Comments"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("CorrelationId"); + + b.Property("Exceptions") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("Exceptions"); + + b.Property("ExecutionDuration") + .HasColumnType("int") + .HasColumnName("ExecutionDuration"); + + b.Property("ExecutionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("HttpMethod") + .HasMaxLength(16) + .HasColumnType("nvarchar(16)") + .HasColumnName("HttpMethod"); + + b.Property("HttpStatusCode") + .HasColumnType("int") + .HasColumnName("HttpStatusCode"); + + b.Property("ImpersonatorTenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("ImpersonatorTenantId"); + + b.Property("ImpersonatorUserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("ImpersonatorUserId"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("TenantName") + .HasColumnType("nvarchar(max)"); + + b.Property("Url") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Url"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("UserId"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ExecutionTime"); + + b.HasIndex("TenantId", "UserId", "ExecutionTime"); + + b.ToTable("AbpAuditLogs"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnType("uniqueidentifier") + .HasColumnName("AuditLogId"); + + b.Property("ExecutionDuration") + .HasColumnType("int") + .HasColumnName("ExecutionDuration"); + + b.Property("ExecutionTime") + .HasColumnType("datetime2") + .HasColumnName("ExecutionTime"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("MethodName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("MethodName"); + + b.Property("Parameters") + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasColumnName("Parameters"); + + b.Property("ServiceName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("ServiceName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime"); + + b.ToTable("AbpAuditLogActions"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnType("uniqueidentifier") + .HasColumnName("AuditLogId"); + + b.Property("ChangeTime") + .HasColumnType("datetime2") + .HasColumnName("ChangeTime"); + + b.Property("ChangeType") + .HasColumnType("tinyint") + .HasColumnName("ChangeType"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("EntityId"); + + b.Property("EntityTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("EntityTypeFullName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("EntityTypeFullName"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "EntityTypeFullName", "EntityId"); + + b.ToTable("AbpEntityChanges"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("EntityChangeId") + .HasColumnType("uniqueidentifier"); + + b.Property("NewValue") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("NewValue"); + + b.Property("OriginalValue") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("OriginalValue"); + + b.Property("PropertyName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("PropertyName"); + + b.Property("PropertyTypeFullName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("PropertyTypeFullName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("EntityChangeId"); + + b.ToTable("AbpEntityPropertyChanges"); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpFeatureValues"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsStatic") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("Regex") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("RegexDescription") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Required") + .HasColumnType("bit"); + + b.Property("ValueType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("AbpClaimTypes"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityLinkUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("SourceTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("SourceUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("TargetTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("TargetUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId") + .IsUnique() + .HasFilter("[SourceTenantId] IS NOT NULL AND [TargetTenantId] IS NOT NULL"); + + b.ToTable("AbpLinkUsers"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDefault") + .HasColumnType("bit") + .HasColumnName("IsDefault"); + + b.Property("IsPublic") + .HasColumnType("bit") + .HasColumnName("IsPublic"); + + b.Property("IsStatic") + .HasColumnType("bit") + .HasColumnName("IsStatic"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpRoles"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AbpRoleClaims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentitySecurityLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Action") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("CreationTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Identity") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Action"); + + b.HasIndex("TenantId", "ApplicationName"); + + b.HasIndex("TenantId", "Identity"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AbpSecurityLogs"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AccessFailedCount") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(0) + .HasColumnName("AccessFailedCount"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Email"); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("EmailConfirmed"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsExternal") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsExternal"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("LockoutEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("LockoutEnabled"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Name"); + + b.Property("NormalizedEmail") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("NormalizedEmail"); + + b.Property("NormalizedUserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("NormalizedUserName"); + + b.Property("PasswordHash") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("PasswordHash"); + + b.Property("PhoneNumber") + .HasMaxLength(16) + .HasColumnType("nvarchar(16)") + .HasColumnName("PhoneNumber"); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("PhoneNumberConfirmed"); + + b.Property("SecurityStamp") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("SecurityStamp"); + + b.Property("Surname") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Surname"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("TwoFactorEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("TwoFactorEnabled"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("Email"); + + b.HasIndex("NormalizedEmail"); + + b.HasIndex("NormalizedUserName"); + + b.HasIndex("UserName"); + + b.ToTable("AbpUsers"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserClaims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderDisplayName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(196) + .HasColumnType("nvarchar(196)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "LoginProvider"); + + b.HasIndex("LoginProvider", "ProviderKey"); + + b.ToTable("AbpUserLogins"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("OrganizationUnitId", "UserId"); + + b.HasIndex("UserId", "OrganizationUnitId"); + + b.ToTable("AbpUserOrganizationUnits"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId", "UserId"); + + b.ToTable("AbpUserRoles"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Name") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AbpUserTokens"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(95) + .HasColumnType("nvarchar(95)") + .HasColumnName("Code"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Code"); + + b.HasIndex("ParentId"); + + b.ToTable("AbpOrganizationUnits"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uniqueidentifier"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("OrganizationUnitId", "RoleId"); + + b.HasIndex("RoleId", "OrganizationUnitId"); + + b.ToTable("AbpOrganizationUnitRoles"); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpPermissionGrants"); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpSettings"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("AbpTenants"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); + + b.HasKey("TenantId", "Name"); + + b.ToTable("AbpTenantConnectionStrings"); + }); + + modelBuilder.Entity("Volo.CmsKit.Comments.Comment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("RepliedCommentId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Text") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "RepliedCommentId"); + + b.HasIndex("TenantId", "EntityType", "EntityId"); + + b.ToTable("CmsComments"); + }); + + modelBuilder.Entity("Volo.CmsKit.Contents.Content", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(2147483647) + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "EntityType", "EntityId"); + + b.ToTable("CmsContents"); + }); + + modelBuilder.Entity("Volo.CmsKit.Pages.Page", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(515) + .HasColumnType("nvarchar(515)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("Url") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Url"); + + b.ToTable("CmsPages"); + }); + + modelBuilder.Entity("Volo.CmsKit.Ratings.Rating", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("StarCount") + .HasColumnType("smallint"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "EntityType", "EntityId", "CreatorId"); + + b.ToTable("CmsRatings"); + }); + + modelBuilder.Entity("Volo.CmsKit.Reactions.UserReaction", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ReactionName") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("nvarchar(32)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "EntityType", "EntityId", "ReactionName"); + + b.HasIndex("TenantId", "CreatorId", "EntityType", "EntityId", "ReactionName"); + + b.ToTable("CmsUserReactions"); + }); + + modelBuilder.Entity("Volo.CmsKit.Tags.EntityTag", b => + { + b.Property("EntityId") + .HasColumnType("nvarchar(450)"); + + b.Property("TagId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("EntityId", "TagId"); + + b.HasIndex("TenantId", "EntityId", "TagId"); + + b.ToTable("CmsEntityTags"); + }); + + modelBuilder.Entity("Volo.CmsKit.Tags.Tag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("HexColor") + .HasMaxLength(6) + .HasColumnType("nvarchar(6)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("nvarchar(32)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name"); + + b.ToTable("CmsTags"); + }); + + modelBuilder.Entity("Volo.CmsKit.Users.CmsUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Email"); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("EmailConfirmed"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Name"); + + b.Property("PhoneNumber") + .HasMaxLength(16) + .HasColumnType("nvarchar(16)") + .HasColumnName("PhoneNumber"); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("PhoneNumberConfirmed"); + + b.Property("Surname") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Surname"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Email"); + + b.HasIndex("TenantId", "UserName"); + + b.ToTable("CmsUsers"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("Actions") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("EntityChanges") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.EntityChange", null) + .WithMany("PropertyChanges") + .HasForeignKey("EntityChangeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany("Claims") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Claims") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Logins") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("OrganizationUnits") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Roles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Tokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("ParentId"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany("Roles") + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.HasOne("Volo.Abp.TenantManagement.Tenant", null) + .WithMany("ConnectionStrings") + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Navigation("Actions"); + + b.Navigation("EntityChanges"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Navigation("PropertyChanges"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Navigation("Claims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Navigation("Claims"); + + b.Navigation("Logins"); + + b.Navigation("OrganizationUnits"); + + b.Navigation("Roles"); + + b.Navigation("Tokens"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Navigation("Roles"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => + { + b.Navigation("ConnectionStrings"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201225120048_Added_Page.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201225120048_Added_Page.cs new file mode 100644 index 0000000000..119009c8e1 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201225120048_Added_Page.cs @@ -0,0 +1,46 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace Volo.CmsKit.Migrations +{ + public partial class Added_Page : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "CmsPages", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + Title = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + Url = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + Description = table.Column(type: "nvarchar(515)", maxLength: 515, nullable: true), + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), + ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true), + LastModificationTime = table.Column(type: "datetime2", nullable: true), + LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), + IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), + DeleterId = table.Column(type: "uniqueidentifier", nullable: true), + DeletionTime = table.Column(type: "datetime2", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_CmsPages", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_CmsPages_TenantId_Url", + table: "CmsPages", + columns: new[] { "TenantId", "Url" }); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "CmsPages"); + } + } +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs index 49468416a0..592e827b82 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs @@ -1168,6 +1168,77 @@ namespace Volo.CmsKit.Migrations b.ToTable("CmsContents"); }); + modelBuilder.Entity("Volo.CmsKit.Pages.Page", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(515) + .HasColumnType("nvarchar(515)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("Url") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Url"); + + b.ToTable("CmsPages"); + }); + modelBuilder.Entity("Volo.CmsKit.Ratings.Rating", b => { b.Property("Id") diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/CmsKitCommonRemoteServiceConsts.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/CmsKitCommonRemoteServiceConsts.cs new file mode 100644 index 0000000000..aa0412f026 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/CmsKitCommonRemoteServiceConsts.cs @@ -0,0 +1,7 @@ +namespace Volo.CmsKit +{ + public class CmsKitCommonRemoteServiceConsts + { + public const string RemoteServiceName = "CmsKitCommon"; + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CheckUrlInputDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CheckUrlInputDto.cs index 6047526e03..e46dca2353 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CheckUrlInputDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CheckUrlInputDto.cs @@ -6,7 +6,6 @@ namespace Volo.CmsKit.Pages public class CheckUrlInputDto { [Required] - [DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxUrlLength))] public string Url { get; set; } } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CreatePageInputDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CreatePageInputDto.cs index 7f5ce67260..b6ce4990f9 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CreatePageInputDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CreatePageInputDto.cs @@ -6,14 +6,11 @@ namespace Volo.CmsKit.Pages public class CreatePageInputDto { [Required] - [DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxTitleLength))] public string Title { get; set; } [Required] - [DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxUrlLength))] public string Url { get; set; } - [DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxDescriptionLength))] public string Description { get; set; } } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CreatePageWithContentInputDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CreatePageWithContentInputDto.cs index ddbf7ce373..d9905b83a5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CreatePageWithContentInputDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CreatePageWithContentInputDto.cs @@ -7,18 +7,14 @@ namespace Volo.CmsKit.Pages public class CreatePageWithContentInputDto { [Required] - [DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxTitleLength))] public string Title { get; set; } [Required] - [DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxUrlLength))] public string Url { get; set; } - [DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxDescriptionLength))] public string Description { get; set; } [Required] - [DynamicMaxLength(typeof(ContentConsts), nameof(ContentConsts.MaxValueLength))] public string Content { get; set; } } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/IPageAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/IPageAppService.cs index 0b0cf7d182..f684fff57b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/IPageAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/IPageAppService.cs @@ -5,6 +5,8 @@ namespace Volo.CmsKit.Pages { public interface IPageAppService { + Task GetAsync(Guid id); + Task CreatePageAsync(CreatePageInputDto input); Task CreatePageWithContentAsync(CreatePageWithContentInputDto input); @@ -15,6 +17,6 @@ namespace Volo.CmsKit.Pages Task UpdatePageContentAsync(Guid id, UpdatePageContentInputDto input); - Task DeletePageAsync(Guid id); + Task DeleteAsync(Guid id); } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/UpdatePageContentInputDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/UpdatePageContentInputDto.cs index ba50ae9f30..7a1a89b955 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/UpdatePageContentInputDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/UpdatePageContentInputDto.cs @@ -7,7 +7,6 @@ namespace Volo.CmsKit.Pages public class UpdatePageContentInputDto { [Required] - [DynamicMaxLength(typeof(ContentConsts), nameof(ContentConsts.MaxValueLength))] public string Content { get; set; } } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/UpdatePageInputDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/UpdatePageInputDto.cs index be84b97f4f..7180d296a3 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/UpdatePageInputDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/UpdatePageInputDto.cs @@ -6,14 +6,11 @@ namespace Volo.CmsKit.Pages public class UpdatePageInputDto { [Required] - [DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxTitleLength))] public string Title { get; set; } [Required] - [DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxUrlLength))] public string Url { get; set; } - [DynamicMaxLength(typeof(PageConsts), nameof(PageConsts.MaxDescriptionLength))] public string Description { get; set; } } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Pages/PageAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Pages/PageAppService.cs index 435be73ecd..2cc93e2988 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Pages/PageAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Pages/PageAppService.cs @@ -17,6 +17,13 @@ namespace Volo.CmsKit.Pages ContentRepository = contentRepository; } + public virtual async Task GetAsync(Guid id) + { + var page = await PageRepository.GetAsync(id); + + return ObjectMapper.Map(page); + } + public virtual async Task CreatePageAsync(CreatePageInputDto input) { var page = await CreatePageAsync(input.Title, input.Url, input.Description); @@ -76,7 +83,7 @@ namespace Volo.CmsKit.Pages await ContentRepository.UpdateAsync(pageContent); } - public virtual async Task DeletePageAsync(Guid id) + public virtual async Task DeleteAsync(Guid id) { await ContentRepository.DeleteAsync(nameof(Page), id.ToString(), CurrentTenant?.Id, CancellationToken.None); await PageRepository.DeleteAsync(id, cancellationToken: CancellationToken.None); diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Contents/ContentController.cs b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Contents/ContentController.cs index ba108a605c..8e9612b506 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Contents/ContentController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Contents/ContentController.cs @@ -1,12 +1,14 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Volo.Abp; using Volo.CmsKit.Contents; namespace Volo.CmsKit.Controllers.Contents { + + [RemoteService(Name = CmsKitCommonRemoteServiceConsts.RemoteServiceName)] + [Area("cms-kit")] + [Route("api/cms-kit/contents")] public class ContentController : CmsKitControllerBase, IContentAppService { protected readonly IContentAppService _contentAppService; @@ -16,6 +18,7 @@ namespace Volo.CmsKit.Controllers.Contents _contentAppService = contentAppService; } + [HttpGet] public virtual Task GetAsync(GetContentInput input) { return _contentAppService.GetAsync(input); diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Pages/PageController.cs b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Pages/PageController.cs new file mode 100644 index 0000000000..8c33819ac0 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Pages/PageController.cs @@ -0,0 +1,70 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Volo.Abp; +using Volo.CmsKit.Pages; + +namespace Volo.CmsKit.Controllers.Pages +{ + [RemoteService(Name = CmsKitCommonRemoteServiceConsts.RemoteServiceName)] + [Area("cms-kit")] + [Route("api/cms-kit/pages")] + public class PageController : CmsKitControllerBase, IPageAppService + { + protected readonly IPageAppService PageAppService; + + public PageController(IPageAppService pageAppService) + { + PageAppService = pageAppService; + } + + [HttpGet] + [Route("{id}")] + public virtual Task GetAsync(Guid id) + { + return PageAppService.GetAsync(id); + } + + [HttpPost] + [Route("create")] + public virtual Task CreatePageAsync(CreatePageInputDto input) + { + return PageAppService.CreatePageAsync(input); + } + + [HttpPost] + [Route("create-with-content")] + public virtual Task CreatePageWithContentAsync(CreatePageWithContentInputDto input) + { + return PageAppService.CreatePageWithContentAsync(input); + } + + [HttpPut] + [Route("{id}")] + public virtual Task UpdatePageAsync(Guid id, UpdatePageInputDto input) + { + return PageAppService.UpdatePageAsync(id, input); + } + + [HttpPost] + [Route("does-url-exist")] + public virtual Task DoesUrlExistAsync(CheckUrlInputDto input) + { + return PageAppService.DoesUrlExistAsync(input); + } + + [HttpPut] + [Route("update-content/{id}")] + public virtual Task UpdatePageContentAsync(Guid id, UpdatePageContentInputDto input) + { + return PageAppService.UpdatePageContentAsync(id, input); + } + + [HttpDelete] + [Route("{id}")] + public virtual Task DeleteAsync(Guid id) + { + return PageAppService.DeleteAsync(id); + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Tags/TagController.cs b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Tags/TagController.cs index b45d7fc6d4..89f469ef93 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Tags/TagController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Tags/TagController.cs @@ -1,10 +1,14 @@ using System.Collections.Generic; using System.Threading.Tasks; -using Volo.CmsKit.Controllers; +using Microsoft.AspNetCore.Mvc; +using Volo.Abp; using Volo.CmsKit.Tags; -namespace Volo.CmsKit.Common.HttpApi.Volo.CmsKit.Controllers.Tags +namespace Volo.CmsKit.Controllers.Tags { + [RemoteService(Name = CmsKitCommonRemoteServiceConsts.RemoteServiceName)] + [Area("cms-kit")] + [Route("api/cms-kit/tags")] public class TagController : CmsKitControllerBase, ITagAppService { protected readonly ITagAppService TagAppService; @@ -14,6 +18,7 @@ namespace Volo.CmsKit.Common.HttpApi.Volo.CmsKit.Controllers.Tags TagAppService = tagAppService; } + [HttpGet] public Task> GetAllRelatedTagsAsync(GetRelatedTagsInput input) { return TagAppService.GetAllRelatedTagsAsync(input); diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Pages/Default.cshtml b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Pages/Default.cshtml new file mode 100644 index 0000000000..87a326c7ff --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Pages/Default.cshtml @@ -0,0 +1,21 @@ +@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI.Bootstrap + +@using Microsoft.AspNetCore.Mvc.RazorPages +@using Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.Contents +@model Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.Pages.PageViewModel + + + +

+ @Model.Title +

+
+ + +

+ @Model.Description +

+ + @await Component.InvokeAsync(typeof(ContentViewComponent), new { entityType = nameof(Page), entityId = Model.Id.ToString() }) +
+
diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Pages/DefaultPageViewComponent.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Pages/DefaultPageViewComponent.cs new file mode 100644 index 0000000000..62689f6bc1 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Pages/DefaultPageViewComponent.cs @@ -0,0 +1,40 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc; +using Volo.CmsKit.Pages; + +namespace Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.Pages +{ + [ViewComponent(Name = "CmsDefaultPage")] + public class DefaultPageViewComponent : AbpViewComponent + { + protected readonly IPageAppService PageAppService; + + public DefaultPageViewComponent(IPageAppService pageAppService) + { + PageAppService = pageAppService; + } + + public virtual async Task InvokeAsync(Guid pageId, string title, string description) + { + var model = new PageViewModel + { + Id = pageId, + Title = title, + Description = description + }; + + return View("~/Pages/CmsKit/Shared/Components/Pages/Default.cshtml", model); + } + } + + public class PageViewModel + { + public Guid Id { get; set; } + + public string Title { get; set; } + + public string Description { get; set; } + } +} \ No newline at end of file From dc0e83d74fa690c8b8a65afec2f42a3b60508564 Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Fri, 25 Dec 2020 17:11:19 +0300 Subject: [PATCH 071/217] added GetAllRelatedTagsAsync implementation --- .../CmsKit/MongoDB/Tags/MongoTagRepository.cs | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs index ca88721460..1d5a089da4 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs @@ -1,4 +1,5 @@ using JetBrains.Annotations; +using MongoDB.Driver; using MongoDB.Driver.Linq; using System; using System.Collections.Generic; @@ -10,7 +11,7 @@ using Volo.CmsKit.Tags; namespace Volo.CmsKit.MongoDB.Tags { - public class MongoTagRepository : MongoDbRepository, ITagRepository + public class MongoTagRepository : MongoDbRepository, ITagRepository { public MongoTagRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) { @@ -30,7 +31,7 @@ namespace Volo.CmsKit.MongoDB.Tags cancellationToken); } - public Task GetAsync( + public Task GetAsync( [NotNull] string entityType, [NotNull] string name, Guid? tenantId, @@ -43,7 +44,7 @@ namespace Volo.CmsKit.MongoDB.Tags cancellationToken: cancellationToken); } - public Task FindAsync( + public Task FindAsync( [NotNull] string entityType, [NotNull] string name, Guid? tenantId, @@ -56,9 +57,24 @@ namespace Volo.CmsKit.MongoDB.Tags cancellationToken: cancellationToken); } - public Task> GetAllRelatedTagsAsync([NotNull] string entityType, [NotNull] string entityId, Guid? tenantId = null, CancellationToken cancellationToken = default) + public virtual async Task> GetAllRelatedTagsAsync( + [NotNull] string entityType, + [NotNull] string entityId, + Guid? tenantId = null, + CancellationToken cancellationToken = default) { - throw new NotImplementedException(); + var entityTagIds = await DbContext.EntityTags.AsQueryable() + .Where(q => q.EntityId == entityId) + .Select(q => q.EntityId) + .ToListAsync(cancellationToken: GetCancellationToken(cancellationToken)); + + var query = GetMongoQueryable() + .Where(x => x.EntityType == entityType && + x.TenantId == tenantId && + entityTagIds.Contains(x.Id.ToString())); + + var result = await query.ToListAsync(cancellationToken: GetCancellationToken(cancellationToken)); + return result; } } } From 42616f470f14480208184b6ff40a23275cbefc3b Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Fri, 25 Dec 2020 17:32:46 +0300 Subject: [PATCH 072/217] Update modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs Co-authored-by: Enis Necipoglu --- .../Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs index 1d5a089da4..555dad444e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs @@ -64,7 +64,7 @@ namespace Volo.CmsKit.MongoDB.Tags CancellationToken cancellationToken = default) { var entityTagIds = await DbContext.EntityTags.AsQueryable() - .Where(q => q.EntityId == entityId) + .Where(q => q.EntityId == entityId && q.TenantId == tenantId) .Select(q => q.EntityId) .ToListAsync(cancellationToken: GetCancellationToken(cancellationToken)); From ad49f51c351ba9963d434c4d9ac15791636f4714 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 25 Dec 2020 20:53:22 +0300 Subject: [PATCH 073/217] Better warning message --- .../UnitOfWorkDbContextProvider.cs | 8 ++++++-- .../Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs | 13 +++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs index 7490862b95..143a5659cc 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/UnitOfWorkDbContextProvider.cs @@ -39,8 +39,12 @@ namespace Volo.Abp.Uow.EntityFrameworkCore [Obsolete("Use GetDbContextAsync method.")] public TDbContext GetDbContext() { - Logger.LogWarning("UnitOfWorkDbContextProvider.GetDbContext is deprecated. Use GetDbContextAsync instead!"); - Logger.LogWarning(Environment.StackTrace); + Logger.LogWarning( + "UnitOfWorkDbContextProvider.GetDbContext is deprecated. Use GetDbContextAsync instead! " + + "You are probably using LINQ (LINQ extensions) directly on a repository. In this case, use repository.GetQueryableAsync() method " + + "to obtain an IQueryable instance and use LINQ (LINQ extensions) on this object. " + ); + Logger.LogWarning(Environment.StackTrace.Truncate(2048)); var unitOfWork = _unitOfWorkManager.Current; if (unitOfWork == null) diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs index a3d6fe7cf4..724e7673fc 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs @@ -2,6 +2,8 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; using MongoDB.Bson; using MongoDB.Driver; using Volo.Abp.Data; @@ -13,6 +15,8 @@ namespace Volo.Abp.Uow.MongoDB public class UnitOfWorkMongoDbContextProvider : IMongoDbContextProvider where TMongoDbContext : IAbpMongoDbContext { + public ILogger> Logger { get; set; } + private readonly IUnitOfWorkManager _unitOfWorkManager; private readonly IConnectionStringResolver _connectionStringResolver; private readonly ICancellationTokenProvider _cancellationTokenProvider; @@ -25,11 +29,20 @@ namespace Volo.Abp.Uow.MongoDB _unitOfWorkManager = unitOfWorkManager; _connectionStringResolver = connectionStringResolver; _cancellationTokenProvider = cancellationTokenProvider; + + Logger = NullLogger>.Instance; } [Obsolete("Use CreateDbContextAsync")] public TMongoDbContext GetDbContext() { + Logger.LogWarning( + "UnitOfWorkDbContextProvider.GetDbContext is deprecated. Use GetDbContextAsync instead! " + + "You are probably using LINQ (LINQ extensions) directly on a repository. In this case, use repository.GetQueryableAsync() method " + + "to obtain an IQueryable instance and use LINQ (LINQ extensions) on this object. " + ); + Logger.LogWarning(Environment.StackTrace.Truncate(2048)); + var unitOfWork = _unitOfWorkManager.Current; if (unitOfWork == null) { From 65c4f199637a6484320ab20185d92c1b7a9ec255 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 25 Dec 2020 20:53:55 +0300 Subject: [PATCH 074/217] Convert to singleton for a better DI performance. --- .../Uow/AspNetCoreUnitOfWorkTransactionBehaviourProvider.cs | 2 +- .../Abp/EntityFrameworkCore/EfCoreAsyncQueryableProvider.cs | 2 +- .../Volo/Abp/MongoDB/MongoDbAsyncQueryableProvider.cs | 2 +- .../Volo.Abp.Threading/Volo/Abp/Linq/AsyncQueryableExecuter.cs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Uow/AspNetCoreUnitOfWorkTransactionBehaviourProvider.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Uow/AspNetCoreUnitOfWorkTransactionBehaviourProvider.cs index 061bc62018..d827b41101 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Uow/AspNetCoreUnitOfWorkTransactionBehaviourProvider.cs +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Uow/AspNetCoreUnitOfWorkTransactionBehaviourProvider.cs @@ -6,7 +6,7 @@ using Volo.Abp.Uow; namespace Volo.Abp.AspNetCore.Uow { - public class AspNetCoreUnitOfWorkTransactionBehaviourProvider : IUnitOfWorkTransactionBehaviourProvider, ITransientDependency + public class AspNetCoreUnitOfWorkTransactionBehaviourProvider : IUnitOfWorkTransactionBehaviourProvider, ISingletonDependency { private readonly IHttpContextAccessor _httpContextAccessor; diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EfCoreAsyncQueryableProvider.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EfCoreAsyncQueryableProvider.cs index 68ff261588..2a0400c578 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EfCoreAsyncQueryableProvider.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EfCoreAsyncQueryableProvider.cs @@ -11,7 +11,7 @@ using Volo.Abp.Linq; namespace Volo.Abp.EntityFrameworkCore { - public class EfCoreAsyncQueryableProvider : IAsyncQueryableProvider, ITransientDependency + public class EfCoreAsyncQueryableProvider : IAsyncQueryableProvider, ISingletonDependency { public bool CanExecute(IQueryable queryable) { diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoDbAsyncQueryableProvider.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoDbAsyncQueryableProvider.cs index a8dc34e83a..52c5edd1d3 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoDbAsyncQueryableProvider.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoDbAsyncQueryableProvider.cs @@ -12,7 +12,7 @@ using Volo.Abp.DynamicProxy; namespace Volo.Abp.MongoDB { - public class MongoDbAsyncQueryableProvider : IAsyncQueryableProvider, ITransientDependency + public class MongoDbAsyncQueryableProvider : IAsyncQueryableProvider, ISingletonDependency { public bool CanExecute(IQueryable queryable) { diff --git a/framework/src/Volo.Abp.Threading/Volo/Abp/Linq/AsyncQueryableExecuter.cs b/framework/src/Volo.Abp.Threading/Volo/Abp/Linq/AsyncQueryableExecuter.cs index f5b3cf3a6d..b7ac83dc5f 100644 --- a/framework/src/Volo.Abp.Threading/Volo/Abp/Linq/AsyncQueryableExecuter.cs +++ b/framework/src/Volo.Abp.Threading/Volo/Abp/Linq/AsyncQueryableExecuter.cs @@ -8,7 +8,7 @@ using Volo.Abp.DependencyInjection; namespace Volo.Abp.Linq { - public class AsyncQueryableExecuter : IAsyncQueryableExecuter, ITransientDependency + public class AsyncQueryableExecuter : IAsyncQueryableExecuter, ISingletonDependency { protected IEnumerable Providers { get; } From 95b7b0693b3f55038843b599402b434233f7ef78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 25 Dec 2020 21:17:01 +0300 Subject: [PATCH 075/217] Extract AspNetCoreUnitOfWorkTransactionBehaviourProviderOptions. --- ...eUnitOfWorkTransactionBehaviourProvider.cs | 19 +++++++++++++++---- ...WorkTransactionBehaviourProviderOptions.cs | 17 +++++++++++++++++ 2 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Uow/AspNetCoreUnitOfWorkTransactionBehaviourProviderOptions.cs diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Uow/AspNetCoreUnitOfWorkTransactionBehaviourProvider.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Uow/AspNetCoreUnitOfWorkTransactionBehaviourProvider.cs index d827b41101..fd1d20d905 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Uow/AspNetCoreUnitOfWorkTransactionBehaviourProvider.cs +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Uow/AspNetCoreUnitOfWorkTransactionBehaviourProvider.cs @@ -1,6 +1,7 @@ using System; using System.Net.Http; using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Options; using Volo.Abp.DependencyInjection; using Volo.Abp.Uow; @@ -9,6 +10,7 @@ namespace Volo.Abp.AspNetCore.Uow public class AspNetCoreUnitOfWorkTransactionBehaviourProvider : IUnitOfWorkTransactionBehaviourProvider, ISingletonDependency { private readonly IHttpContextAccessor _httpContextAccessor; + private readonly AspNetCoreUnitOfWorkTransactionBehaviourProviderOptions _options; public virtual bool? IsTransactional { @@ -20,10 +22,16 @@ namespace Volo.Abp.AspNetCore.Uow return null; } - //IdentityServer endpoint (TODO: Better to move to the IDS module) - if (httpContext.Request.Path.Value?.StartsWith("/connect/", StringComparison.OrdinalIgnoreCase) == true) + var currentUrl = httpContext.Request.Path.Value; + if (currentUrl != null) { - return false; + foreach (var url in _options.NonTransactionalUrls) + { + if (currentUrl.StartsWith(url, StringComparison.OrdinalIgnoreCase)) + { + return false; + } + } } return !string.Equals( @@ -33,9 +41,12 @@ namespace Volo.Abp.AspNetCore.Uow } } - public AspNetCoreUnitOfWorkTransactionBehaviourProvider(IHttpContextAccessor httpContextAccessor) + public AspNetCoreUnitOfWorkTransactionBehaviourProvider( + IHttpContextAccessor httpContextAccessor, + IOptions options) { _httpContextAccessor = httpContextAccessor; + _options = options.Value; } } } diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Uow/AspNetCoreUnitOfWorkTransactionBehaviourProviderOptions.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Uow/AspNetCoreUnitOfWorkTransactionBehaviourProviderOptions.cs new file mode 100644 index 0000000000..dd612a008d --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Uow/AspNetCoreUnitOfWorkTransactionBehaviourProviderOptions.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; + +namespace Volo.Abp.AspNetCore.Uow +{ + public class AspNetCoreUnitOfWorkTransactionBehaviourProviderOptions + { + public List NonTransactionalUrls { get; } + + public AspNetCoreUnitOfWorkTransactionBehaviourProviderOptions() + { + NonTransactionalUrls = new List + { + "/connect/" + }; + } + } +} From 03d68743413c02d2f01d9f96acb5fd0975610f58 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Mon, 28 Dec 2020 10:17:12 +0300 Subject: [PATCH 076/217] Fix SolutionModuleAdder.RemoveProjectByPostFix --- .../Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs index 4eae8ace8f..acb723236b 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs @@ -206,6 +206,12 @@ namespace Volo.Abp.Cli.ProjectModification { var srcPath = Path.Combine(Path.GetDirectoryName(moduleSolutionFile), targetFolder); var projectFolderPath = Directory.GetDirectories(srcPath).FirstOrDefault(d=> d.EndsWith(postFix)); + + if(projectFolderPath == null) + { + return; + } + await SolutionFileModifier.RemoveProjectFromSolutionFileAsync(moduleSolutionFile, new DirectoryInfo(projectFolderPath).Name); if (Directory.Exists(projectFolderPath)) From cb7e65ccc751c47d63da9ce33008ae314d89a30b Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Mon, 28 Dec 2020 10:34:20 +0300 Subject: [PATCH 077/217] Remove commandLineArgs & workingDirectory from launchSettings.json --- framework/src/Volo.Abp.Cli/Properties/launchSettings.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.Cli/Properties/launchSettings.json b/framework/src/Volo.Abp.Cli/Properties/launchSettings.json index 6846f7adbd..e7f99eea04 100644 --- a/framework/src/Volo.Abp.Cli/Properties/launchSettings.json +++ b/framework/src/Volo.Abp.Cli/Properties/launchSettings.json @@ -1,9 +1,7 @@ { "profiles": { "Volo.Abp.Cli": { - "commandName": "Project", - "commandLineArgs": "bundle --skip-version-check", - "workingDirectory": "C:\\Github\\volo\\abp\\templates\\app-pro\\aspnet-core\\src\\MyCompanyName.MyProjectName.Blazor" + "commandName": "Project" } } } \ No newline at end of file From 5edd578eb789dbca74f6ab63b54283b1f348141e Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Mon, 28 Dec 2020 10:36:21 +0300 Subject: [PATCH 078/217] Delete launchSettings.json --- framework/src/Volo.Abp.Cli/Properties/launchSettings.json | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 framework/src/Volo.Abp.Cli/Properties/launchSettings.json diff --git a/framework/src/Volo.Abp.Cli/Properties/launchSettings.json b/framework/src/Volo.Abp.Cli/Properties/launchSettings.json deleted file mode 100644 index e7f99eea04..0000000000 --- a/framework/src/Volo.Abp.Cli/Properties/launchSettings.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "profiles": { - "Volo.Abp.Cli": { - "commandName": "Project" - } - } -} \ No newline at end of file From 0d9880eb8a5ebc2110aa7576dd887735e1875f45 Mon Sep 17 00:00:00 2001 From: enisn Date: Mon, 28 Dec 2020 11:32:04 +0300 Subject: [PATCH 079/217] Remove HexColor from Tag --- ...0_Updated_Tag_Removed_HexColor.Designer.cs | 1643 +++++++++++++++++ ...1228083120_Updated_Tag_Removed_HexColor.cs | 24 + .../UnifiedDbContextModelSnapshot.cs | 4 - .../Volo/CmsKit/Tags/TagDto.cs | 2 - .../Shared/Components/Tags/Default.cshtml | 2 +- .../CmsKit/Shared/Components/Tags/default.css | 4 - .../Volo.CmsKit.Common.Web.csproj | 4 - .../Volo/CmsKit/Tags/TagConsts.cs | 2 - .../Volo/CmsKit/Tags/ITagManager.cs | 3 - .../Volo/CmsKit/Tags/Tag.cs | 9 - .../Volo/CmsKit/Tags/TagManager.cs | 7 +- .../CmsKitDbContextModelCreatingExtensions.cs | 1 - 12 files changed, 1669 insertions(+), 36 deletions(-) create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201228083120_Updated_Tag_Removed_HexColor.Designer.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201228083120_Updated_Tag_Removed_HexColor.cs delete mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/default.css diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201228083120_Updated_Tag_Removed_HexColor.Designer.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201228083120_Updated_Tag_Removed_HexColor.Designer.cs new file mode 100644 index 0000000000..8f90204baa --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201228083120_Updated_Tag_Removed_HexColor.Designer.cs @@ -0,0 +1,1643 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Volo.Abp.EntityFrameworkCore; +using Volo.CmsKit.EntityFrameworkCore; + +namespace Volo.CmsKit.Migrations +{ + [DbContext(typeof(UnifiedDbContext))] + [Migration("20201228083120_Updated_Tag_Removed_HexColor")] + partial class Updated_Tag_Removed_HexColor + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .UseIdentityColumns() + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("ProductVersion", "5.0.1"); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)") + .HasColumnName("ApplicationName"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("BrowserInfo"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("ClientId"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("ClientIpAddress"); + + b.Property("ClientName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("ClientName"); + + b.Property("Comments") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Comments"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("CorrelationId"); + + b.Property("Exceptions") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("Exceptions"); + + b.Property("ExecutionDuration") + .HasColumnType("int") + .HasColumnName("ExecutionDuration"); + + b.Property("ExecutionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("HttpMethod") + .HasMaxLength(16) + .HasColumnType("nvarchar(16)") + .HasColumnName("HttpMethod"); + + b.Property("HttpStatusCode") + .HasColumnType("int") + .HasColumnName("HttpStatusCode"); + + b.Property("ImpersonatorTenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("ImpersonatorTenantId"); + + b.Property("ImpersonatorUserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("ImpersonatorUserId"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("TenantName") + .HasColumnType("nvarchar(max)"); + + b.Property("Url") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Url"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("UserId"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ExecutionTime"); + + b.HasIndex("TenantId", "UserId", "ExecutionTime"); + + b.ToTable("AbpAuditLogs"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnType("uniqueidentifier") + .HasColumnName("AuditLogId"); + + b.Property("ExecutionDuration") + .HasColumnType("int") + .HasColumnName("ExecutionDuration"); + + b.Property("ExecutionTime") + .HasColumnType("datetime2") + .HasColumnName("ExecutionTime"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("MethodName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("MethodName"); + + b.Property("Parameters") + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasColumnName("Parameters"); + + b.Property("ServiceName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("ServiceName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime"); + + b.ToTable("AbpAuditLogActions"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnType("uniqueidentifier") + .HasColumnName("AuditLogId"); + + b.Property("ChangeTime") + .HasColumnType("datetime2") + .HasColumnName("ChangeTime"); + + b.Property("ChangeType") + .HasColumnType("tinyint") + .HasColumnName("ChangeType"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("EntityId"); + + b.Property("EntityTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("EntityTypeFullName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("EntityTypeFullName"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "EntityTypeFullName", "EntityId"); + + b.ToTable("AbpEntityChanges"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("EntityChangeId") + .HasColumnType("uniqueidentifier"); + + b.Property("NewValue") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("NewValue"); + + b.Property("OriginalValue") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("OriginalValue"); + + b.Property("PropertyName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("PropertyName"); + + b.Property("PropertyTypeFullName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("PropertyTypeFullName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("EntityChangeId"); + + b.ToTable("AbpEntityPropertyChanges"); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpFeatureValues"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsStatic") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("Regex") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("RegexDescription") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Required") + .HasColumnType("bit"); + + b.Property("ValueType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("AbpClaimTypes"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityLinkUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("SourceTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("SourceUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("TargetTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("TargetUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId") + .IsUnique() + .HasFilter("[SourceTenantId] IS NOT NULL AND [TargetTenantId] IS NOT NULL"); + + b.ToTable("AbpLinkUsers"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDefault") + .HasColumnType("bit") + .HasColumnName("IsDefault"); + + b.Property("IsPublic") + .HasColumnType("bit") + .HasColumnName("IsPublic"); + + b.Property("IsStatic") + .HasColumnType("bit") + .HasColumnName("IsStatic"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpRoles"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AbpRoleClaims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentitySecurityLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Action") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("CreationTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Identity") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Action"); + + b.HasIndex("TenantId", "ApplicationName"); + + b.HasIndex("TenantId", "Identity"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AbpSecurityLogs"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AccessFailedCount") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(0) + .HasColumnName("AccessFailedCount"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Email"); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("EmailConfirmed"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsExternal") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsExternal"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("LockoutEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("LockoutEnabled"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Name"); + + b.Property("NormalizedEmail") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("NormalizedEmail"); + + b.Property("NormalizedUserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("NormalizedUserName"); + + b.Property("PasswordHash") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("PasswordHash"); + + b.Property("PhoneNumber") + .HasMaxLength(16) + .HasColumnType("nvarchar(16)") + .HasColumnName("PhoneNumber"); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("PhoneNumberConfirmed"); + + b.Property("SecurityStamp") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("SecurityStamp"); + + b.Property("Surname") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Surname"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("TwoFactorEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("TwoFactorEnabled"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("Email"); + + b.HasIndex("NormalizedEmail"); + + b.HasIndex("NormalizedUserName"); + + b.HasIndex("UserName"); + + b.ToTable("AbpUsers"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserClaims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderDisplayName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(196) + .HasColumnType("nvarchar(196)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "LoginProvider"); + + b.HasIndex("LoginProvider", "ProviderKey"); + + b.ToTable("AbpUserLogins"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("OrganizationUnitId", "UserId"); + + b.HasIndex("UserId", "OrganizationUnitId"); + + b.ToTable("AbpUserOrganizationUnits"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId", "UserId"); + + b.ToTable("AbpUserRoles"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Name") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AbpUserTokens"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(95) + .HasColumnType("nvarchar(95)") + .HasColumnName("Code"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Code"); + + b.HasIndex("ParentId"); + + b.ToTable("AbpOrganizationUnits"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uniqueidentifier"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("OrganizationUnitId", "RoleId"); + + b.HasIndex("RoleId", "OrganizationUnitId"); + + b.ToTable("AbpOrganizationUnitRoles"); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpPermissionGrants"); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpSettings"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("AbpTenants"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); + + b.HasKey("TenantId", "Name"); + + b.ToTable("AbpTenantConnectionStrings"); + }); + + modelBuilder.Entity("Volo.CmsKit.Comments.Comment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("RepliedCommentId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Text") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "RepliedCommentId"); + + b.HasIndex("TenantId", "EntityType", "EntityId"); + + b.ToTable("CmsComments"); + }); + + modelBuilder.Entity("Volo.CmsKit.Contents.Content", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(2147483647) + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "EntityType", "EntityId"); + + b.ToTable("CmsContents"); + }); + + modelBuilder.Entity("Volo.CmsKit.Pages.Page", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(515) + .HasColumnType("nvarchar(515)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("Url") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Url"); + + b.ToTable("CmsPages"); + }); + + modelBuilder.Entity("Volo.CmsKit.Ratings.Rating", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("StarCount") + .HasColumnType("smallint"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "EntityType", "EntityId", "CreatorId"); + + b.ToTable("CmsRatings"); + }); + + modelBuilder.Entity("Volo.CmsKit.Reactions.UserReaction", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ReactionName") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("nvarchar(32)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "EntityType", "EntityId", "ReactionName"); + + b.HasIndex("TenantId", "CreatorId", "EntityType", "EntityId", "ReactionName"); + + b.ToTable("CmsUserReactions"); + }); + + modelBuilder.Entity("Volo.CmsKit.Tags.EntityTag", b => + { + b.Property("EntityId") + .HasColumnType("nvarchar(450)"); + + b.Property("TagId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("EntityId", "TagId"); + + b.HasIndex("TenantId", "EntityId", "TagId"); + + b.ToTable("CmsEntityTags"); + }); + + modelBuilder.Entity("Volo.CmsKit.Tags.Tag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("nvarchar(32)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name"); + + b.ToTable("CmsTags"); + }); + + modelBuilder.Entity("Volo.CmsKit.Users.CmsUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Email"); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("EmailConfirmed"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Name"); + + b.Property("PhoneNumber") + .HasMaxLength(16) + .HasColumnType("nvarchar(16)") + .HasColumnName("PhoneNumber"); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("PhoneNumberConfirmed"); + + b.Property("Surname") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Surname"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Email"); + + b.HasIndex("TenantId", "UserName"); + + b.ToTable("CmsUsers"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("Actions") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("EntityChanges") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.EntityChange", null) + .WithMany("PropertyChanges") + .HasForeignKey("EntityChangeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany("Claims") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Claims") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Logins") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("OrganizationUnits") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Roles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Tokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("ParentId"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany("Roles") + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.HasOne("Volo.Abp.TenantManagement.Tenant", null) + .WithMany("ConnectionStrings") + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Navigation("Actions"); + + b.Navigation("EntityChanges"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Navigation("PropertyChanges"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Navigation("Claims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Navigation("Claims"); + + b.Navigation("Logins"); + + b.Navigation("OrganizationUnits"); + + b.Navigation("Roles"); + + b.Navigation("Tokens"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Navigation("Roles"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => + { + b.Navigation("ConnectionStrings"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201228083120_Updated_Tag_Removed_HexColor.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201228083120_Updated_Tag_Removed_HexColor.cs new file mode 100644 index 0000000000..476f4ea87e --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20201228083120_Updated_Tag_Removed_HexColor.cs @@ -0,0 +1,24 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace Volo.CmsKit.Migrations +{ + public partial class Updated_Tag_Removed_HexColor : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "HexColor", + table: "CmsTags"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "HexColor", + table: "CmsTags", + type: "nvarchar(6)", + maxLength: 6, + nullable: true); + } + } +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs index 592e827b82..37622217c5 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs @@ -1374,10 +1374,6 @@ namespace Volo.CmsKit.Migrations .HasColumnType("nvarchar(max)") .HasColumnName("ExtraProperties"); - b.Property("HexColor") - .HasMaxLength(6) - .HasColumnType("nvarchar(6)"); - b.Property("IsDeleted") .ValueGeneratedOnAdd() .HasColumnType("bit") diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/TagDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/TagDto.cs index 4b9e4a5897..e7d41e6657 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/TagDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/TagDto.cs @@ -8,7 +8,5 @@ namespace Volo.CmsKit.Tags public string EntityType { get; set; } public string Name { get; protected set; } - - public string HexColor { get; protected set; } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/Default.cshtml b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/Default.cshtml index e0e9a034a3..f1dd2008ac 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/Default.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/Default.cshtml @@ -6,7 +6,7 @@ { foreach (var tag in Model.Tags) { - + @tag.Name } diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/default.css b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/default.css deleted file mode 100644 index e3f6d69107..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/default.css +++ /dev/null @@ -1,4 +0,0 @@ -.cmskit-tag { - border-radius: 2px; - border: 1px solid; -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.csproj b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.csproj index 132e584fc0..620274f4f3 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.csproj +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.csproj @@ -35,8 +35,4 @@ - - - - diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Tags/TagConsts.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Tags/TagConsts.cs index 5affee9c15..4e6c0b38cc 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Tags/TagConsts.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Tags/TagConsts.cs @@ -7,7 +7,5 @@ namespace Volo.CmsKit.Tags public static int MaxEntityTypeLength { get; set; } = CmsEntityConsts.MaxEntityTypeLength; public static int MaxNameLength { get; set; } = 32; - - public static int MaxColorHexLength { get; set; } = 6; } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagManager.cs index b1562a341d..18fea113c0 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagManager.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagManager.cs @@ -12,20 +12,17 @@ namespace Volo.CmsKit.Tags Task InsertAsync( [NotNull] string entityType, [NotNull] string name, - [CanBeNull] string hexColor, Guid? tenantId = null, CancellationToken cancellationToken = default); Task UpdateAsync( Guid id, [NotNull] string name, - [CanBeNull] string hexColor, CancellationToken cancellationToken = default); Task GetOrAddAsync( [NotNull] string entityType, [NotNull] string name, - [CanBeNull] string hexColor = null, Guid? tenantId = null, CancellationToken cancellationToken = default); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/Tag.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/Tag.cs index a13ea70ba0..9920fa5a3e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/Tag.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/Tag.cs @@ -12,8 +12,6 @@ namespace Volo.CmsKit.Tags public string Name { get; protected set; } - public string HexColor { get; protected set; } - public Guid? TenantId { get; } protected Tag() @@ -23,12 +21,10 @@ namespace Volo.CmsKit.Tags public Tag( [NotNull] string entityType, [NotNull] string name, - [CanBeNull] string hexColor, Guid? tenantId = null) { EntityType = Check.NotNullOrWhiteSpace(entityType, nameof(entityType), TagConsts.MaxEntityTypeLength); SetName(name); - SetHexColor(hexColor); TenantId = tenantId; } @@ -36,10 +32,5 @@ namespace Volo.CmsKit.Tags { Name = Check.NotNullOrWhiteSpace(name, nameof(name), TagConsts.MaxNameLength); } - - public void SetHexColor(string hexColor) - { - HexColor = Check.Length(hexColor, nameof(hexColor), TagConsts.MaxColorHexLength); - } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs index c62317cd64..f669298441 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs @@ -19,7 +19,6 @@ namespace Volo.CmsKit.Tags public async Task GetOrAddAsync( [NotNull] string entityType, [NotNull] string name, - [CanBeNull] string hexColor = null, Guid? tenantId = null, CancellationToken cancellationToken = default) { @@ -27,7 +26,7 @@ namespace Volo.CmsKit.Tags if (entity == null) { - entity = await InsertAsync(entityType, name, hexColor, tenantId, cancellationToken); + entity = await InsertAsync(entityType, name, tenantId, cancellationToken); } return entity; @@ -36,7 +35,6 @@ namespace Volo.CmsKit.Tags public async Task InsertAsync( [NotNull] string entityType, [NotNull] string name, - [CanBeNull] string hexColor, Guid? tenantId = null, CancellationToken cancellationToken = default) { @@ -49,7 +47,6 @@ namespace Volo.CmsKit.Tags new Tag( entityType, name, - hexColor, tenantId), cancellationToken: cancellationToken); } @@ -57,13 +54,11 @@ namespace Volo.CmsKit.Tags public async Task UpdateAsync( Guid id, [NotNull] string name, - [CanBeNull] string hexColor, CancellationToken cancellationToken = default) { var entity = await _tagRepository.GetAsync(id, cancellationToken: cancellationToken); entity.SetName(name); - entity.SetHexColor(hexColor); if (await _tagRepository.AnyAsync(entity.EntityType, name, entity.TenantId, cancellationToken)) { diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs index 200401e4c2..8d32de7958 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs @@ -118,7 +118,6 @@ namespace Volo.CmsKit.EntityFrameworkCore b.Property(x => x.EntityType).IsRequired().HasMaxLength(TagConsts.MaxEntityTypeLength); b.Property(x => x.Name).IsRequired().HasMaxLength(TagConsts.MaxNameLength); - b.Property(x => x.HexColor).HasMaxLength(TagConsts.MaxColorHexLength); b.HasIndex(x => new { x.TenantId, x.Name }); }); From 49f3b6a8f4929a11c03f547fb3a340e76ab64fb7 Mon Sep 17 00:00:00 2001 From: enisn Date: Mon, 28 Dec 2020 11:35:05 +0300 Subject: [PATCH 080/217] Remove static tags logic --- .../Pages/Index.cshtml | 6 ++-- .../Volo/CmsKit/Tags/GetRelatedTagsInput.cs | 2 -- .../Volo/CmsKit/Tags/TagAppService.cs | 28 ++----------------- .../Components/Tags/TagViewComponent.cs | 6 ++-- 4 files changed, 6 insertions(+), 36 deletions(-) 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 b6ce055737..453ef5619e 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 @@ -22,8 +22,7 @@ @await Component.InvokeAsync(typeof(TagViewComponent), new { entityType = "quote", - entityId = "1", - tags = new List { "a", "b" } + entityId = "1" }) @@ -89,8 +88,7 @@ @await Component.InvokeAsync(typeof(TagViewComponent), new { entityType = "IndexPage", - entityId = Guid.Empty.ToString(), - tags = new List { "a", "b" } + entityId = Guid.Empty.ToString() }) diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/GetRelatedTagsInput.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/GetRelatedTagsInput.cs index 0019bbd661..ca9cd31b16 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/GetRelatedTagsInput.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/GetRelatedTagsInput.cs @@ -10,7 +10,5 @@ namespace Volo.CmsKit.Tags [Required] public string EntityId { get; set; } - - public List Tags { get; set; } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Tags/TagAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Tags/TagAppService.cs index c9ddef9629..4e096d9bf6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Tags/TagAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Tags/TagAppService.cs @@ -13,7 +13,8 @@ namespace Volo.CmsKit.Tags public TagAppService( ITagManager tagManager, - ITagRepository tagRepository, IEntityTagRepository entityTagRepository) + ITagRepository tagRepository, + IEntityTagRepository entityTagRepository) { TagManager = tagManager; TagRepository = tagRepository; @@ -27,31 +28,6 @@ namespace Volo.CmsKit.Tags input.EntityId, CurrentTenant.Id); - if (input.Tags?.Count > 0) - { - var nonExisting = input.Tags - .Where(x => - !entities.Any(a => - a.Name.Equals(x.Trim(), - StringComparison.InvariantCultureIgnoreCase))); - - foreach (var tag in nonExisting) - { - var insertedTag = await TagManager.GetOrAddAsync( - input.EntityType, - tag, - tenantId: CurrentTenant?.Id); - - await EntityTagRepository.InsertAsync( - new EntityTag( - insertedTag.Id, - input.EntityId, - CurrentTenant?.Id)); - - entities.Add(insertedTag); - } - } - return ObjectMapper.Map, List>(entities); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/TagViewComponent.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/TagViewComponent.cs index 83ad0e7e3a..9e787c4d4c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/TagViewComponent.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/TagViewComponent.cs @@ -21,14 +21,12 @@ namespace Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.Tags public virtual async Task InvokeAsync( string entityType, - string entityId, - IEnumerable tags = null) + string entityId) { var tagDtos = await TagAppService.GetAllRelatedTagsAsync(new GetRelatedTagsInput { EntityId = entityId, - EntityType = entityType, - Tags = tags?.ToList() + EntityType = entityType }); var viewModel = new TagViewModel From dd95488cb0a50d30637168e3154a485f70715054 Mon Sep 17 00:00:00 2001 From: enisn Date: Mon, 28 Dec 2020 11:52:21 +0300 Subject: [PATCH 081/217] CmsKit - EfCore Tag Query Update - Convert Join query to seperated queries --- .../Volo/CmsKit/Tags/EfCoreTagRepository.cs | 21 ++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs index 5bbecd3629..ea3b3c5bf9 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs @@ -64,20 +64,17 @@ namespace Volo.CmsKit.Tags Guid? tenantId = null, CancellationToken cancellationToken = default) { + var entityTagIds = await DbContext.Set() + .Where(q => q.EntityId == entityId && q.TenantId == tenantId) + .Select(q => q.EntityId) + .ToListAsync(cancellationToken: GetCancellationToken(cancellationToken)); - var query = DbContext.Set() - .Where(x => - x.EntityId == entityId && - x.TenantId == tenantId - ) - .Join( - DbSet, - o => o.TagId, - i => i.Id, - (entityTag, tag) => tag) - .Where(x => x.EntityType == entityType); + var query = DbSet + .Where(x => x.EntityType == entityType && + x.TenantId == tenantId && + entityTagIds.Contains(x.Id.ToString())); - return await query.ToListAsync(); + return await query.ToListAsync(cancellationToken: GetCancellationToken(cancellationToken)); } } } From 2cf68eed2ec4e1f4ca33b120d852e432c485df9a Mon Sep 17 00:00:00 2001 From: Ahmet Date: Mon, 28 Dec 2020 12:45:22 +0300 Subject: [PATCH 082/217] Added CmsKit Page --- .../Volo/CmsKit/Pages/IPageAppService.cs | 3 +++ .../Volo/CmsKit/Pages/PageAppService.cs | 7 +++++ .../Controllers/Pages/PageController.cs | 7 +++++ .../Pages/CmsKit/Pages/Index.cshtml | 15 +++++++++++ .../Pages/CmsKit/Pages/Index.cshtml.cs | 26 +++++++++++++++++++ .../Pages/CmsKit/_ViewImports.cshtml | 4 +++ .../Pages/CommonPageModel.cs | 13 ++++++++++ 7 files changed, 75 insertions(+) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Pages/Index.cshtml create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Pages/Index.cshtml.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/_ViewImports.cshtml create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CommonPageModel.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/IPageAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/IPageAppService.cs index f684fff57b..ef9c8082df 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/IPageAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/IPageAppService.cs @@ -1,11 +1,14 @@ using System; using System.Threading.Tasks; +using JetBrains.Annotations; namespace Volo.CmsKit.Pages { public interface IPageAppService { Task GetAsync(Guid id); + + Task GetByUrlAsync([NotNull] string url); Task CreatePageAsync(CreatePageInputDto input); diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Pages/PageAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Pages/PageAppService.cs index 2cc93e2988..cc7c177873 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Pages/PageAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Pages/PageAppService.cs @@ -24,6 +24,13 @@ namespace Volo.CmsKit.Pages return ObjectMapper.Map(page); } + public virtual async Task GetByUrlAsync(string url) + { + var page = await PageRepository.GetByUrlAsync(url); + + return ObjectMapper.Map(page); + } + public virtual async Task CreatePageAsync(CreatePageInputDto input) { var page = await CreatePageAsync(input.Title, input.Url, input.Description); diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Pages/PageController.cs b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Pages/PageController.cs index 8c33819ac0..d16dc97ef1 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Pages/PageController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Pages/PageController.cs @@ -25,6 +25,13 @@ namespace Volo.CmsKit.Controllers.Pages return PageAppService.GetAsync(id); } + [HttpGet] + [Route("url/{url}")] + public Task GetByUrlAsync(string url) + { + return PageAppService.GetByUrlAsync(url); + } + [HttpPost] [Route("create")] public virtual Task CreatePageAsync(CreatePageInputDto input) diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Pages/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Pages/Index.cshtml new file mode 100644 index 0000000000..486b1c78c1 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Pages/Index.cshtml @@ -0,0 +1,15 @@ +@page "{pageUrl}" +@using Microsoft.AspNetCore.Mvc.Localization +@using Volo.CmsKit.Localization +@using Volo.CmsKit.Web.Pages.CmsKit.Pages +@using Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.Pages +@model IndexModel +@inject IHtmlLocalizer L + +@await Component.InvokeAsync(typeof(DefaultPageViewComponent), + new + { + pageId = Model.Page.Id, + title = Model.Page.Title, + description = Model.Page.Description + }) \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Pages/Index.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Pages/Index.cshtml.cs new file mode 100644 index 0000000000..f0ecfbc9c2 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Pages/Index.cshtml.cs @@ -0,0 +1,26 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Volo.CmsKit.Pages; + +namespace Volo.CmsKit.Web.Pages.CmsKit.Pages +{ + public class IndexModel : CommonPageModel + { + [BindProperty(SupportsGet = true)] + public string PageUrl { get; set; } + + protected readonly IPageAppService PageAppService; + + public PageDto Page; + + public IndexModel(IPageAppService pageAppService) + { + PageAppService = pageAppService; + } + + public async Task OnGetAsync() + { + Page = await PageAppService.GetByUrlAsync(PageUrl); + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/_ViewImports.cshtml b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/_ViewImports.cshtml new file mode 100644 index 0000000000..c1da1f5f10 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/_ViewImports.cshtml @@ -0,0 +1,4 @@ +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers +@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI +@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI.Bootstrap +@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI.Bundling \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CommonPageModel.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CommonPageModel.cs new file mode 100644 index 0000000000..1148bb0436 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CommonPageModel.cs @@ -0,0 +1,13 @@ +using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; +using Volo.CmsKit.Localization; + +namespace Volo.CmsKit.Web.Pages +{ + public abstract class CommonPageModel : AbpPageModel + { + protected CommonPageModel() + { + LocalizationResourceType = typeof(CmsKitResource); + } + } +} \ No newline at end of file From 8845c81a6da9091728ea68d03c01e740918d5b35 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Mon, 28 Dec 2020 13:47:57 +0300 Subject: [PATCH 083/217] Created content-test-data --- .../CmsKitDataSeedContributor.cs | 29 +++++++++++++++++-- .../Volo.CmsKit.TestBase/CmsKitTestData.cs | 12 ++++++++ 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs index 2237ecc064..088056dc05 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs @@ -5,6 +5,7 @@ using Volo.Abp.Guids; using Volo.Abp.MultiTenancy; using Volo.Abp.Users; using Volo.CmsKit.Comments; +using Volo.CmsKit.Contents; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; using Volo.CmsKit.Users; @@ -20,7 +21,7 @@ namespace Volo.CmsKit private readonly ReactionManager _reactionManager; private readonly IRatingRepository _ratingRepository; private readonly ICurrentTenant _currentTenant; - + private readonly IContentRepository _contentRepository; public CmsKitDataSeedContributor( IGuidGenerator guidGenerator, ICmsUserRepository cmsUserRepository, @@ -28,7 +29,8 @@ namespace Volo.CmsKit ICommentRepository commentRepository, ReactionManager reactionManager, IRatingRepository ratingRepository, - ICurrentTenant currentTenant) + ICurrentTenant currentTenant, + IContentRepository contentRepository) { _guidGenerator = guidGenerator; _cmsUserRepository = cmsUserRepository; @@ -37,6 +39,7 @@ namespace Volo.CmsKit _reactionManager = reactionManager; _ratingRepository = ratingRepository; _currentTenant = currentTenant; + _contentRepository = contentRepository; } public async Task SeedAsync(DataSeedContext context) @@ -50,6 +53,8 @@ namespace Volo.CmsKit await SeedReactionsAsync(); await SeedRatingsAsync(); + + await SeedContentsAsync(); } } @@ -177,5 +182,25 @@ namespace Volo.CmsKit _cmsKitTestData.User2Id )); } + + private async Task SeedContentsAsync() + { + var content1 = new Content( + _guidGenerator.Create(), + _cmsKitTestData.Content_1_EntityType, + _cmsKitTestData.Content_1_Id, + _cmsKitTestData.Content_1 + ); + + var content2 = new Content( + _guidGenerator.Create(), + _cmsKitTestData.Content_2_EntityType, + _cmsKitTestData.Content_2_Id, + _cmsKitTestData.Content_2 + ); + + await _contentRepository.InsertAsync(content1); + await _contentRepository.InsertAsync(content2); + } } } diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs index 4e1472a3d8..0477711cd3 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs @@ -18,5 +18,17 @@ namespace Volo.CmsKit public string EntityId1 { get; } = "1"; public string EntityId2 { get; } = "2"; + + public string Content_1_EntityType = "Lyrics"; + + public string Content_1 { get; } = "First things first\nI'ma say all the words inside my head\nI'm fired up and tired of the way that things have been, oh-ooh\nThe way that things have been, oh-ooh"; + + public string Content_1_Id = "1"; + + public string Content_2_EntityType = "LyricsAlso"; + + public string Content_2 { get; } = "Second thing second\nDon't you tell me what you think that I could be\nI'm the one at the sail, I'm the master of my sea, oh-ooh\nThe master of my sea, oh-ooh"; + + public string Content_2_Id = "2"; } } From f2641509c4b09b20f1a5da9a92026eff8afe288c Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Mon, 28 Dec 2020 14:17:32 +0300 Subject: [PATCH 084/217] Cli new command: change connection string by dbms --- .../Volo/Abp/Cli/Commands/NewCommand.cs | 25 +++++++++++++++++++ .../TemplateProjectBuildPipelineBuilder.cs | 11 ++++---- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs index 3bd8aecbc1..3b2666695e 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs @@ -150,6 +150,13 @@ namespace Volo.Abp.Cli.Commands Logger.LogInformation("Output folder: " + outputFolder); + if (connectionString == null && + databaseManagementSystem != DatabaseManagementSystem.NotSpecified && + databaseManagementSystem != DatabaseManagementSystem.SQLServer) + { + connectionString = GetNewConnectionStringByDbms(databaseManagementSystem, outputFolder); + } + commandLineArgs.Options.Add(CliConsts.Command, commandLineArgs.Command); var result = await TemplateProjectBuilder.BuildAsync( @@ -219,6 +226,24 @@ namespace Volo.Abp.Cli.Commands } } + private string GetNewConnectionStringByDbms(DatabaseManagementSystem databaseManagementSystem, string outputFolder) + { + switch (databaseManagementSystem) + { + case DatabaseManagementSystem.MySQL: + return "Server=localhost;Port=3306;Database=MyProjectName;Uid=root;Pwd=myPassword;"; + case DatabaseManagementSystem.PostgreSQL: + return "User ID=root;Password=myPassword;Host=localhost;Port=5432;Database=MyProjectName;Pooling=true;Min Pool Size=0;Max Pool Size=100;Connection Lifetime=0;"; + case DatabaseManagementSystem.Oracle: + case DatabaseManagementSystem.OracleDevart: + return "Data Source=MyProjectName;Integrated Security=yes;"; + case DatabaseManagementSystem.SQLite: + return $"Data Source={Path.Combine(outputFolder,"database\\MyProjectName.db")};Version=3;"; + default: + return null; + } + } + private void DeleteMigrationsIfNeeded(DatabaseProvider databaseProvider, DatabaseManagementSystem databaseManagementSystem, string outputFolder) { if (databaseManagementSystem == DatabaseManagementSystem.NotSpecified || databaseManagementSystem == DatabaseManagementSystem.SQLServer) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/TemplateProjectBuildPipelineBuilder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/TemplateProjectBuildPipelineBuilder.cs index 9590001ea4..513c2b4198 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/TemplateProjectBuildPipelineBuilder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/TemplateProjectBuildPipelineBuilder.cs @@ -17,6 +17,12 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building pipeline.Steps.Add(new ProjectReferenceReplaceStep()); pipeline.Steps.Add(new TemplateCodeDeleteStep()); + + if (context.BuildArgs.ConnectionString != null) + { + pipeline.Steps.Add(new ConnectionStringChangeStep()); + } + pipeline.Steps.Add(new SolutionRenameStep()); if (context.Template.Name == AppProTemplate.TemplateName || @@ -37,11 +43,6 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building pipeline.Steps.Add(new RemoveRootFolderStep()); } - if (context.BuildArgs.ConnectionString != null) - { - pipeline.Steps.Add(new ConnectionStringChangeStep()); - } - pipeline.Steps.Add(new CreateProjectResultZipStep()); return pipeline; From cfa005fcd7265b32a0d0a8af97c35001b0966c00 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Mon, 28 Dec 2020 14:18:25 +0300 Subject: [PATCH 085/217] Update NewCommand.cs --- .../src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs index 3b2666695e..c4942d04ab 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs @@ -234,7 +234,7 @@ namespace Volo.Abp.Cli.Commands return "Server=localhost;Port=3306;Database=MyProjectName;Uid=root;Pwd=myPassword;"; case DatabaseManagementSystem.PostgreSQL: return "User ID=root;Password=myPassword;Host=localhost;Port=5432;Database=MyProjectName;Pooling=true;Min Pool Size=0;Max Pool Size=100;Connection Lifetime=0;"; - case DatabaseManagementSystem.Oracle: + //case DatabaseManagementSystem.Oracle: case DatabaseManagementSystem.OracleDevart: return "Data Source=MyProjectName;Integrated Security=yes;"; case DatabaseManagementSystem.SQLite: From 055a7a91c863213250f6d6d5ab4988105002196f Mon Sep 17 00:00:00 2001 From: Ahmet Date: Mon, 28 Dec 2020 15:12:29 +0300 Subject: [PATCH 086/217] Added content repository tests --- .../Contents/ContentRepository_Test.cs | 9 +++ .../Contents/ContentRepository_Test.cs | 11 ++++ .../Contents/ContentRepository_Tests.cs | 64 +++++++++++++++++++ 3 files changed, 84 insertions(+) create mode 100644 modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Contents/ContentRepository_Test.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Contents/ContentRepository_Test.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.TestBase/Contents/ContentRepository_Tests.cs diff --git a/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Contents/ContentRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Contents/ContentRepository_Test.cs new file mode 100644 index 0000000000..72f0b47485 --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Contents/ContentRepository_Test.cs @@ -0,0 +1,9 @@ +using Volo.CmsKit.Contents; + +namespace Volo.CmsKit.EntityFrameworkCore.Contents +{ + public class ContentRepository_Test : ContentRepository_Tests + { + + } +} \ No newline at end of file diff --git a/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Contents/ContentRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Contents/ContentRepository_Test.cs new file mode 100644 index 0000000000..bb467a4844 --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Contents/ContentRepository_Test.cs @@ -0,0 +1,11 @@ +using Volo.CmsKit.Contents; +using Xunit; + +namespace Volo.CmsKit.MongoDB.Contents +{ + [Collection(MongoTestCollection.Name)] + public class ContentRepository_Test : ContentRepository_Tests + { + + } +} \ No newline at end of file diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/Contents/ContentRepository_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/Contents/ContentRepository_Tests.cs new file mode 100644 index 0000000000..6cec5786e2 --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/Contents/ContentRepository_Tests.cs @@ -0,0 +1,64 @@ +using System; +using System.Threading.Tasks; +using Shouldly; +using Volo.Abp.Domain.Entities; +using Volo.Abp.Modularity; +using Volo.Abp.Uow; +using Xunit; + +namespace Volo.CmsKit.Contents +{ + public abstract class ContentRepository_Tests : CmsKitTestBase + where TStartupModule : IAbpModule + { + private readonly CmsKitTestData _cmsKitTestData; + private readonly IContentRepository _contentRepository; + + public ContentRepository_Tests() + { + _cmsKitTestData = GetRequiredService(); + _contentRepository = GetRequiredService(); + } + + [Theory] + [InlineData("Lyrics", "1", "First things first")] + [InlineData("LyricsAlso", "2", "Second thing second")] + public async Task ShouldGetAsync(string entityType, string entityId, string contentStartsWith = null) + { + var content = await _contentRepository.GetAsync(entityType, entityId); + + content.ShouldNotBeNull(); + + if (contentStartsWith != null) + { + content.Value.ShouldStartWith(contentStartsWith); + } + } + + [Fact] + public async Task ShouldNotGetAsync() + { + Should.Throw( + async () + => + await _contentRepository.GetAsync("not_exist_entity", Guid.NewGuid().ToString())); + } + + [Fact] + public async Task ShouldFindAsync() + { + var content = + await _contentRepository.FindAsync(_cmsKitTestData.Content_1_EntityType, _cmsKitTestData.Content_1_Id); + + content.ShouldNotBeNull(); + } + + [Fact] + public async Task ShouldNotFindAsync() + { + var content = await _contentRepository.FindAsync("not_exist_entity", Guid.NewGuid().ToString()); + + content.ShouldBeNull(); + } + } +} \ No newline at end of file From dfe9ea40dd398dea89098005dc5c5248f5590f5f Mon Sep 17 00:00:00 2001 From: Ahmet Date: Mon, 28 Dec 2020 15:24:40 +0300 Subject: [PATCH 087/217] added id parameter to tag constructor --- .../src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagManager.cs | 1 + .../cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/Tag.cs | 3 ++- .../src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs | 4 +++- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagManager.cs index 18fea113c0..943fd6af00 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagManager.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagManager.cs @@ -10,6 +10,7 @@ namespace Volo.CmsKit.Tags public interface ITagManager : IDomainService { Task InsertAsync( + Guid id, [NotNull] string entityType, [NotNull] string name, Guid? tenantId = null, diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/Tag.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/Tag.cs index 9920fa5a3e..09d9fe6c3c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/Tag.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/Tag.cs @@ -19,9 +19,10 @@ namespace Volo.CmsKit.Tags } public Tag( + Guid id, [NotNull] string entityType, [NotNull] string name, - Guid? tenantId = null) + Guid? tenantId = null) : base(id) { EntityType = Check.NotNullOrWhiteSpace(entityType, nameof(entityType), TagConsts.MaxEntityTypeLength); SetName(name); diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs index f669298441..bc450ebf7b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs @@ -26,13 +26,14 @@ namespace Volo.CmsKit.Tags if (entity == null) { - entity = await InsertAsync(entityType, name, tenantId, cancellationToken); + entity = await InsertAsync(GuidGenerator.Create(), entityType, name, tenantId, cancellationToken); } return entity; } public async Task InsertAsync( + Guid id, [NotNull] string entityType, [NotNull] string name, Guid? tenantId = null, @@ -45,6 +46,7 @@ namespace Volo.CmsKit.Tags return await _tagRepository.InsertAsync( new Tag( + id, entityType, name, tenantId), From c84aaf1e7b84eba75e25a34816551c4e3d7ec90e Mon Sep 17 00:00:00 2001 From: Ahmet Date: Mon, 28 Dec 2020 15:41:24 +0300 Subject: [PATCH 088/217] created tag test data and fix some bugs --- .../Volo/CmsKit/Contents/Content.cs | 2 +- .../Volo/CmsKit/Pages/Page.cs | 2 +- .../Volo/CmsKit/Tags/EntityTag.cs | 2 +- .../Volo/CmsKit/Tags/Tag.cs | 2 +- .../Tags/TagRepository_Test.cs | 9 ++++++ .../MongoDB/Tags/TagRepository_Test.cs | 11 +++++++ .../CmsKitDataSeedContributor.cs | 32 +++++++++++++++++-- .../Volo.CmsKit.TestBase/CmsKitTestData.cs | 5 +++ .../Contents/ContentRepository_Tests.cs | 3 +- .../Tags/TagRepository_Test.cs | 17 ++++++++++ 10 files changed, 77 insertions(+), 8 deletions(-) create mode 100644 modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Tags/TagRepository_Test.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Tags/TagRepository_Test.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.TestBase/Tags/TagRepository_Test.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/Content.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/Content.cs index 354041b51b..6f4175daad 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/Content.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/Content.cs @@ -8,7 +8,7 @@ namespace Volo.CmsKit.Contents { public class Content : FullAuditedAggregateRoot, IMultiTenant { - public virtual Guid? TenantId { get; } + public virtual Guid? TenantId { get; set; } public virtual string EntityType { get; set; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/Page.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/Page.cs index c02617c8d3..16ec7df3a5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/Page.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/Page.cs @@ -8,7 +8,7 @@ namespace Volo.CmsKit.Pages { public class Page : FullAuditedAggregateRoot, IMultiTenant { - public Guid? TenantId { get; } + public Guid? TenantId { get; set; } public virtual string Title { get; set; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/EntityTag.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/EntityTag.cs index e69dbf53aa..5d27e8b15f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/EntityTag.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/EntityTag.cs @@ -10,7 +10,7 @@ namespace Volo.CmsKit.Tags public virtual string EntityId { get; set; } - public virtual Guid? TenantId { get; } + public virtual Guid? TenantId { get; set; } protected EntityTag() { diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/Tag.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/Tag.cs index 09d9fe6c3c..fab09ed521 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/Tag.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/Tag.cs @@ -12,7 +12,7 @@ namespace Volo.CmsKit.Tags public string Name { get; protected set; } - public Guid? TenantId { get; } + public Guid? TenantId { get; set; } protected Tag() { diff --git a/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Tags/TagRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Tags/TagRepository_Test.cs new file mode 100644 index 0000000000..205379e2b3 --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Tags/TagRepository_Test.cs @@ -0,0 +1,9 @@ +using Volo.CmsKit.Tags; + +namespace Volo.CmsKit.EntityFrameworkCore.Tags +{ + public class TagRepository_Test : TagRepository_Test + { + + } +} \ No newline at end of file diff --git a/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Tags/TagRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Tags/TagRepository_Test.cs new file mode 100644 index 0000000000..1c2f063989 --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Tags/TagRepository_Test.cs @@ -0,0 +1,11 @@ +using Volo.CmsKit.Tags; +using Xunit; + +namespace Volo.CmsKit.MongoDB.Tags +{ + [Collection(MongoTestCollection.Name)] + public class TagRepository_Test : TagRepository_Test + { + + } +} \ No newline at end of file diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs index 088056dc05..a33253406e 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs @@ -1,4 +1,5 @@ -using System.Threading.Tasks; +using System.Linq; +using System.Threading.Tasks; using Volo.Abp.Data; using Volo.Abp.DependencyInjection; using Volo.Abp.Guids; @@ -8,6 +9,7 @@ using Volo.CmsKit.Comments; using Volo.CmsKit.Contents; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; +using Volo.CmsKit.Tags; using Volo.CmsKit.Users; namespace Volo.CmsKit @@ -22,6 +24,8 @@ namespace Volo.CmsKit private readonly IRatingRepository _ratingRepository; private readonly ICurrentTenant _currentTenant; private readonly IContentRepository _contentRepository; + private readonly ITagRepository _tagRepository; + public CmsKitDataSeedContributor( IGuidGenerator guidGenerator, ICmsUserRepository cmsUserRepository, @@ -30,7 +34,8 @@ namespace Volo.CmsKit ReactionManager reactionManager, IRatingRepository ratingRepository, ICurrentTenant currentTenant, - IContentRepository contentRepository) + IContentRepository contentRepository, + ITagRepository tagRepository) { _guidGenerator = guidGenerator; _cmsUserRepository = cmsUserRepository; @@ -40,6 +45,7 @@ namespace Volo.CmsKit _ratingRepository = ratingRepository; _currentTenant = currentTenant; _contentRepository = contentRepository; + _tagRepository = tagRepository; } public async Task SeedAsync(DataSeedContext context) @@ -55,6 +61,8 @@ namespace Volo.CmsKit await SeedRatingsAsync(); await SeedContentsAsync(); + + await SeedTagsAsync(); } } @@ -202,5 +210,25 @@ namespace Volo.CmsKit await _contentRepository.InsertAsync(content1); await _contentRepository.InsertAsync(content2); } + + private async Task SeedTagsAsync() + { + var content_1_tags = + _cmsKitTestData.Content_1_Tags + .Select(x => + new Tag(_guidGenerator.Create(), _cmsKitTestData.Content_1_EntityType, x)).ToList(); + + var content_2_tags = + _cmsKitTestData.Content_2_Tags + .Select(x => + new Tag(_guidGenerator.Create(), _cmsKitTestData.Content_2_EntityType, x)).ToList(); + + content_1_tags.AddRange(content_2_tags); + + foreach (var tag in content_1_tags) + { + await _tagRepository.InsertAsync(tag); + } + } } } diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs index 0477711cd3..6589e79d9c 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs @@ -1,4 +1,5 @@ using System; +using JetBrains.Annotations; using Volo.Abp.DependencyInjection; namespace Volo.CmsKit @@ -24,11 +25,15 @@ namespace Volo.CmsKit public string Content_1 { get; } = "First things first\nI'ma say all the words inside my head\nI'm fired up and tired of the way that things have been, oh-ooh\nThe way that things have been, oh-ooh"; public string Content_1_Id = "1"; + + public string[] Content_1_Tags => new string[] {"Imagine Dragons", "Music"}; public string Content_2_EntityType = "LyricsAlso"; public string Content_2 { get; } = "Second thing second\nDon't you tell me what you think that I could be\nI'm the one at the sail, I'm the master of my sea, oh-ooh\nThe master of my sea, oh-ooh"; public string Content_2_Id = "2"; + + public string[] Content_2_Tags => new string[] {"Imagine Dragons", "Music", "Most Loved Part"}; } } diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/Contents/ContentRepository_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/Contents/ContentRepository_Tests.cs index 6cec5786e2..c92383694e 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/Contents/ContentRepository_Tests.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/Contents/ContentRepository_Tests.cs @@ -3,7 +3,6 @@ using System.Threading.Tasks; using Shouldly; using Volo.Abp.Domain.Entities; using Volo.Abp.Modularity; -using Volo.Abp.Uow; using Xunit; namespace Volo.CmsKit.Contents @@ -14,7 +13,7 @@ namespace Volo.CmsKit.Contents private readonly CmsKitTestData _cmsKitTestData; private readonly IContentRepository _contentRepository; - public ContentRepository_Tests() + protected ContentRepository_Tests() { _cmsKitTestData = GetRequiredService(); _contentRepository = GetRequiredService(); diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/Tags/TagRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/Tags/TagRepository_Test.cs new file mode 100644 index 0000000000..2843c864ef --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/Tags/TagRepository_Test.cs @@ -0,0 +1,17 @@ +using Volo.Abp.Modularity; + +namespace Volo.CmsKit.Tags +{ + public abstract class TagRepository_Test : CmsKitTestBase + where TStartupModule : IAbpModule + { + private readonly CmsKitTestData _cmsKitTestData; + private readonly ITagRepository _tagRepository; + + protected TagRepository_Test() + { + _cmsKitTestData = GetRequiredService(); + _tagRepository = GetRequiredService(); + } + } +} \ No newline at end of file From 4e355428899fbd8abc7658f0eeba71225877336d Mon Sep 17 00:00:00 2001 From: Ahmet Date: Mon, 28 Dec 2020 15:49:51 +0300 Subject: [PATCH 089/217] fix TagRepository --- .../Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs | 2 +- .../Volo/CmsKit/Tags/EfCoreTagRepository.cs | 6 +++--- .../Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs index c33c577422..b6de5631d4 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs @@ -12,7 +12,7 @@ namespace Volo.CmsKit.Tags Task GetAsync( [NotNull] string entityType, [NotNull] string name, - Guid? tenantId, + Guid? tenantId = null, CancellationToken cancellationToken = default); Task AnyAsync( diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs index 5bbecd3629..da5eb4bb2a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs @@ -22,7 +22,7 @@ namespace Volo.CmsKit.Tags public virtual Task AnyAsync( [NotNull] string entityType, [NotNull] string name, - Guid? tenantId, + Guid? tenantId = null, CancellationToken cancellationToken = default) { return DbSet.AnyAsync(x => @@ -35,7 +35,7 @@ namespace Volo.CmsKit.Tags public virtual Task GetAsync( [NotNull] string entityType, [NotNull] string name, - Guid? tenantId, + Guid? tenantId = null, CancellationToken cancellationToken = default) { return GetAsync(x => @@ -48,7 +48,7 @@ namespace Volo.CmsKit.Tags public virtual Task FindAsync( [NotNull] string entityType, [NotNull] string name, - Guid? tenantId, + Guid? tenantId = null, CancellationToken cancellationToken = default) { return FindAsync(x => diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs index 555dad444e..6844c9a064 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs @@ -20,7 +20,7 @@ namespace Volo.CmsKit.MongoDB.Tags public Task AnyAsync( [NotNull] string entityType, [NotNull] string name, - Guid? tenantId, + Guid? tenantId = null, CancellationToken cancellationToken = default) { return GetMongoQueryable() @@ -34,7 +34,7 @@ namespace Volo.CmsKit.MongoDB.Tags public Task GetAsync( [NotNull] string entityType, [NotNull] string name, - Guid? tenantId, + Guid? tenantId = null, CancellationToken cancellationToken = default) { return GetAsync(x => @@ -47,7 +47,7 @@ namespace Volo.CmsKit.MongoDB.Tags public Task FindAsync( [NotNull] string entityType, [NotNull] string name, - Guid? tenantId, + Guid? tenantId = null, CancellationToken cancellationToken = default) { return FindAsync(x => From 7dc1bdbe137220a71cc72674a5a5b2b077309894 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Mon, 28 Dec 2020 15:59:00 +0300 Subject: [PATCH 090/217] Update ITagRepository.cs --- .../src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs index b6de5631d4..8493fe8401 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs @@ -24,7 +24,7 @@ namespace Volo.CmsKit.Tags Task FindAsync( [NotNull] string entityType, [NotNull] string name, - Guid? tenantId, + Guid? tenantId = null, CancellationToken cancellationToken = default); Task> GetAllRelatedTagsAsync( From 6cc5cd4bd9b7dc200d47e3b5ffa9f0e57948c92f Mon Sep 17 00:00:00 2001 From: Ahmet Date: Mon, 28 Dec 2020 16:21:25 +0300 Subject: [PATCH 091/217] Added Tag tests --- .../CmsKitDataSeedContributor.cs | 36 +++--- .../Tags/TagRepository_Test.cs | 103 +++++++++++++++++- 2 files changed, 119 insertions(+), 20 deletions(-) diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs index a33253406e..8a1ab616d1 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs @@ -24,8 +24,9 @@ namespace Volo.CmsKit private readonly IRatingRepository _ratingRepository; private readonly ICurrentTenant _currentTenant; private readonly IContentRepository _contentRepository; - private readonly ITagRepository _tagRepository; - + private readonly IEntityTagRepository _entityTagRepository; + private readonly ITagManager _tagManager; + public CmsKitDataSeedContributor( IGuidGenerator guidGenerator, ICmsUserRepository cmsUserRepository, @@ -34,8 +35,9 @@ namespace Volo.CmsKit ReactionManager reactionManager, IRatingRepository ratingRepository, ICurrentTenant currentTenant, - IContentRepository contentRepository, - ITagRepository tagRepository) + IContentRepository contentRepository, + ITagManager tagManager, + IEntityTagRepository entityTagRepository) { _guidGenerator = guidGenerator; _cmsUserRepository = cmsUserRepository; @@ -45,7 +47,8 @@ namespace Volo.CmsKit _ratingRepository = ratingRepository; _currentTenant = currentTenant; _contentRepository = contentRepository; - _tagRepository = tagRepository; + _tagManager = tagManager; + _entityTagRepository = entityTagRepository; } public async Task SeedAsync(DataSeedContext context) @@ -213,21 +216,18 @@ namespace Volo.CmsKit private async Task SeedTagsAsync() { - var content_1_tags = - _cmsKitTestData.Content_1_Tags - .Select(x => - new Tag(_guidGenerator.Create(), _cmsKitTestData.Content_1_EntityType, x)).ToList(); - - var content_2_tags = - _cmsKitTestData.Content_2_Tags - .Select(x => - new Tag(_guidGenerator.Create(), _cmsKitTestData.Content_2_EntityType, x)).ToList(); - - content_1_tags.AddRange(content_2_tags); + foreach (var tag in _cmsKitTestData.Content_1_Tags) + { + var tagEntity = await _tagManager.InsertAsync(_guidGenerator.Create(), _cmsKitTestData.Content_1_EntityType, tag); - foreach (var tag in content_1_tags) + await _entityTagRepository.InsertAsync(new EntityTag(tagEntity.Id, _cmsKitTestData.Content_1_Id)); + } + + foreach (var tag in _cmsKitTestData.Content_2_Tags) { - await _tagRepository.InsertAsync(tag); + var tagEntity = await _tagManager.InsertAsync(_guidGenerator.Create(), _cmsKitTestData.Content_2_EntityType, tag); + + await _entityTagRepository.InsertAsync(new EntityTag(tagEntity.Id, _cmsKitTestData.Content_2_Id)); } } } diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/Tags/TagRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/Tags/TagRepository_Test.cs index 2843c864ef..4a7070a20a 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/Tags/TagRepository_Test.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/Tags/TagRepository_Test.cs @@ -1,4 +1,10 @@ -using Volo.Abp.Modularity; +using System; +using System.Linq; +using System.Threading.Tasks; +using Shouldly; +using Volo.Abp.Domain.Entities; +using Volo.Abp.Modularity; +using Xunit; namespace Volo.CmsKit.Tags { @@ -7,11 +13,104 @@ namespace Volo.CmsKit.Tags { private readonly CmsKitTestData _cmsKitTestData; private readonly ITagRepository _tagRepository; - + protected TagRepository_Test() { _cmsKitTestData = GetRequiredService(); _tagRepository = GetRequiredService(); } + + [Theory] + [InlineData("Lyrics", "Imagine Dragons")] + [InlineData("Lyrics", "Music")] + [InlineData("LyricsAlso", "Imagine Dragons")] + [InlineData("LyricsAlso", "Music")] + [InlineData("LyricsAlso", "Most Loved Part")] + public async Task ShouldGetAsync(string entityType, string name) + { + var tag = await _tagRepository.GetAsync(entityType, name); + + tag.ShouldNotBeNull(); + } + + [Fact] + public async Task ShouldNotGetAsync() + { + Should.Throw( + async () => await _tagRepository.GetAsync("not_exist_entity", Guid.NewGuid().ToString()) + ); + } + + [Theory] + [InlineData("Lyrics", "Imagine Dragons")] + [InlineData("Lyrics", "Music")] + [InlineData("LyricsAlso", "Imagine Dragons")] + [InlineData("LyricsAlso", "Music")] + [InlineData("LyricsAlso", "Most Loved Part")] + public async Task ShouldExistAsync(string entityType, string name) + { + var tag = await _tagRepository.AnyAsync(entityType, name); + + tag.ShouldBeTrue(); + } + + [Fact] + public async Task ShouldNotExistAsync() + { + var tag = await _tagRepository.AnyAsync("not_exist_entity", Guid.NewGuid().ToString()); + + tag.ShouldBeFalse(); + } + + [Theory] + [InlineData("Lyrics", "Imagine Dragons")] + [InlineData("Lyrics", "Music")] + [InlineData("LyricsAlso", "Imagine Dragons")] + [InlineData("LyricsAlso", "Music")] + [InlineData("LyricsAlso", "Most Loved Part")] + public async Task ShouldFindAsync(string entityType, string name) + { + var tag = await _tagRepository.FindAsync(entityType, name); + + tag.ShouldNotBeNull(); + } + + [Fact] + public async Task ShouldNotFindAsync() + { + var tag = await _tagRepository.FindAsync("not_exist_entity", Guid.NewGuid().ToString()); + + tag.ShouldBeNull(); + } + + [Fact] + public async Task Should_Get_Related_Tags() + { + var content_1_tags = await _tagRepository.GetAllRelatedTagsAsync(_cmsKitTestData.Content_1_EntityType, _cmsKitTestData.Content_1_EntityType); + + content_1_tags.Count.ShouldBe(_cmsKitTestData.Content_1_Tags.Length); + + foreach (var tag in content_1_tags) + { + _cmsKitTestData.Content_1_Tags.Contains(tag.Name).ShouldBeTrue(); + } + + var content_2_tags = await _tagRepository.GetAllRelatedTagsAsync(_cmsKitTestData.Content_2_EntityType, _cmsKitTestData.Content_2_EntityType); + + content_2_tags.Count.ShouldBe(_cmsKitTestData.Content_2_Tags.Length); + + foreach (var tag in content_2_tags) + { + _cmsKitTestData.Content_2_Tags.Contains(tag.Name).ShouldBeTrue(); + } + } + + [Fact] + public async Task Should_Not_Get_Related_Tags() + { + var tags = await _tagRepository.GetAllRelatedTagsAsync("not_exist_entity", Guid.NewGuid().ToString()); + + tags.Count.ShouldBe(0); + } } } \ No newline at end of file From d1c4438143001046b1878f4227febdad2e78eac2 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Mon, 28 Dec 2020 16:35:21 +0300 Subject: [PATCH 092/217] Update modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs --- .../Volo/CmsKit/Tags/EfCoreTagRepository.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs index 6f8ae1504b..49240f0d9a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs @@ -66,7 +66,7 @@ namespace Volo.CmsKit.Tags { var entityTagIds = await DbContext.Set() .Where(q => q.EntityId == entityId && q.TenantId == tenantId) - .Select(q => q.EntityId) + .Select(q => q.TagId) .ToListAsync(cancellationToken: GetCancellationToken(cancellationToken)); var query = DbSet From 3b7657bb0b0629c9c6fd3d7f76e847552bc7f2cf Mon Sep 17 00:00:00 2001 From: enisn Date: Mon, 28 Dec 2020 16:40:34 +0300 Subject: [PATCH 093/217] CmsKit - Fix Unsupported mongo query --- .../CmsKit/MongoDB/Tags/MongoTagRepository.cs | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs index 6844c9a064..5f57d835f5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs @@ -8,6 +8,7 @@ using System.Threading.Tasks; using Volo.Abp.Domain.Repositories.MongoDB; using Volo.Abp.MongoDB; using Volo.CmsKit.Tags; +using Tag = Volo.CmsKit.Tags.Tag; namespace Volo.CmsKit.MongoDB.Tags { @@ -31,7 +32,7 @@ namespace Volo.CmsKit.MongoDB.Tags cancellationToken); } - public Task GetAsync( + public Task GetAsync( [NotNull] string entityType, [NotNull] string name, Guid? tenantId = null, @@ -44,7 +45,7 @@ namespace Volo.CmsKit.MongoDB.Tags cancellationToken: cancellationToken); } - public Task FindAsync( + public Task FindAsync( [NotNull] string entityType, [NotNull] string name, Guid? tenantId = null, @@ -57,7 +58,7 @@ namespace Volo.CmsKit.MongoDB.Tags cancellationToken: cancellationToken); } - public virtual async Task> GetAllRelatedTagsAsync( + public virtual async Task> GetAllRelatedTagsAsync( [NotNull] string entityType, [NotNull] string entityId, Guid? tenantId = null, @@ -65,13 +66,15 @@ namespace Volo.CmsKit.MongoDB.Tags { var entityTagIds = await DbContext.EntityTags.AsQueryable() .Where(q => q.EntityId == entityId && q.TenantId == tenantId) - .Select(q => q.EntityId) + .Select(q => q.TagId) .ToListAsync(cancellationToken: GetCancellationToken(cancellationToken)); - var query = GetMongoQueryable() - .Where(x => x.EntityType == entityType && - x.TenantId == tenantId && - entityTagIds.Contains(x.Id.ToString())); + var query = await Collection.FindAsync(Builders.Filter.And(new[] + { + Builders.Filter.Eq(x =>x.EntityType, entityType), + Builders.Filter.Eq(x =>x.TenantId, tenantId), + Builders.Filter.In(x => x.Id, entityTagIds), + })); var result = await query.ToListAsync(cancellationToken: GetCancellationToken(cancellationToken)); return result; From 3f76c8d2d21d9baa16bc35f47c23ad25a8a570ed Mon Sep 17 00:00:00 2001 From: Ahmet Date: Mon, 28 Dec 2020 16:41:56 +0300 Subject: [PATCH 094/217] Update TagManager.cs --- .../src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs index bc450ebf7b..2dc1f0b28c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs @@ -59,14 +59,14 @@ namespace Volo.CmsKit.Tags CancellationToken cancellationToken = default) { var entity = await _tagRepository.GetAsync(id, cancellationToken: cancellationToken); - - entity.SetName(name); - - if (await _tagRepository.AnyAsync(entity.EntityType, name, entity.TenantId, cancellationToken)) + + if (name != entity.Name && await _tagRepository.AnyAsync(entity.EntityType, name, entity.TenantId, cancellationToken)) { throw new BusinessException(message: "Tag already exist!"); // Already Exist } + entity.SetName(name); + return await _tagRepository.UpdateAsync(entity); } } From 68f9c3f7ca5fc2a5454ddae053ab38a89281f8e3 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Mon, 28 Dec 2020 16:42:01 +0300 Subject: [PATCH 095/217] Create TagManager_Tests.cs --- .../Tags/TagManager_Tests.cs | 104 ++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Tags/TagManager_Tests.cs diff --git a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Tags/TagManager_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Tags/TagManager_Tests.cs new file mode 100644 index 0000000000..aa31b015cc --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Tags/TagManager_Tests.cs @@ -0,0 +1,104 @@ +using System; +using System.Threading.Tasks; +using Shouldly; +using Xunit; + +namespace Volo.CmsKit.Tags +{ + public class TagManager_Tests : CmsKitDomainTestBase + { + private readonly CmsKitTestData _cmsKitTestData; + private readonly TagManager _tagManager; + + private readonly ITagRepository _tagRepository; + + public TagManager_Tests() + { + _cmsKitTestData = GetRequiredService(); + _tagManager = GetRequiredService(); + _tagRepository = GetRequiredService(); + } + + [Fact] + public async Task ShouldAddWhenGettingAsync() + { + var newTagEntityType = "testEntity"; + var newTagName = "test_tag_2123"; + + var doesExist = await _tagRepository.AnyAsync(newTagEntityType, newTagName); + + doesExist.ShouldBeFalse(); + + var newTag = await _tagManager.GetOrAddAsync(newTagEntityType, newTagName); + + newTag.ShouldNotBeNull(); + + var doesExistAgain = await _tagRepository.AnyAsync(newTagEntityType, newTagName); + + doesExistAgain.ShouldBeTrue(); + } + + [Fact] + public async Task ShouldNotAddWhenGettingAsync() + { + var tagName = _cmsKitTestData.Content_1_Tags[0]; + + var tag = await _tagRepository.GetAsync(_cmsKitTestData.Content_1_EntityType, tagName); + + var newTag = await _tagManager.GetOrAddAsync(_cmsKitTestData.Content_1_EntityType, tag.Name); + + newTag.ShouldNotBeNull(); + + newTag.Id.ShouldBe(tag.Id); + } + + [Fact] + public async Task ShouldInsert() + { + var tag = await _tagManager.InsertAsync(Guid.NewGuid(), "test", "test"); + + tag.ShouldNotBeNull(); + + var doesExist = await _tagRepository.AnyAsync("test", "test"); + + doesExist.ShouldBeTrue(); + } + + [Fact] + public async Task ShouldNotInsert() + { + var type = _cmsKitTestData.Content_1_EntityType; + var name = _cmsKitTestData.Content_1_Tags[0]; + + Should.Throw(async () => await _tagManager.InsertAsync(Guid.NewGuid(), type, name)); + } + + [Fact] + public async Task ShouldUpdate() + { + var type = _cmsKitTestData.Content_1_EntityType; + var name = _cmsKitTestData.Content_1_Tags[0]; + var newName = name + "-updated"; + + var tag = await _tagRepository.GetAsync(type, name); + + await _tagManager.UpdateAsync(tag.Id, newName); + + var updatedTag = await _tagRepository.GetAsync(type, newName); + + updatedTag.Id.ShouldBe(tag.Id); + } + + [Fact] + public async Task ShouldNotUpdate() + { + var type = _cmsKitTestData.Content_1_EntityType; + var name = _cmsKitTestData.Content_1_Tags[0]; + var newName = _cmsKitTestData.Content_1_Tags[1]; + + var tag = await _tagRepository.GetAsync(type, name); + + Should.Throw(async () => await _tagManager.UpdateAsync(tag.Id, newName)); + } + } +} \ No newline at end of file From 2fa7fd24b913f396e78eaa5c8e02a3cf4b0bf543 Mon Sep 17 00:00:00 2001 From: enisn Date: Mon, 28 Dec 2020 17:21:14 +0300 Subject: [PATCH 096/217] Update EfCoreTagRepository.cs --- .../Volo/CmsKit/Tags/EfCoreTagRepository.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs index 49240f0d9a..593905cc95 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs @@ -72,7 +72,7 @@ namespace Volo.CmsKit.Tags var query = DbSet .Where(x => x.EntityType == entityType && x.TenantId == tenantId && - entityTagIds.Contains(x.Id.ToString())); + entityTagIds.Contains(x.Id)); return await query.ToListAsync(cancellationToken: GetCancellationToken(cancellationToken)); } From f192860fa34fb96f944f3d4939b895a23bd45524 Mon Sep 17 00:00:00 2001 From: enisn Date: Mon, 28 Dec 2020 17:25:53 +0300 Subject: [PATCH 097/217] Fix mismatching parameter in TagRepository_Test --- .../test/Volo.CmsKit.TestBase/Tags/TagRepository_Test.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/Tags/TagRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/Tags/TagRepository_Test.cs index 4a7070a20a..18cc12df68 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/Tags/TagRepository_Test.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/Tags/TagRepository_Test.cs @@ -86,7 +86,7 @@ namespace Volo.CmsKit.Tags [Fact] public async Task Should_Get_Related_Tags() { - var content_1_tags = await _tagRepository.GetAllRelatedTagsAsync(_cmsKitTestData.Content_1_EntityType, _cmsKitTestData.Content_1_EntityType); + var content_1_tags = await _tagRepository.GetAllRelatedTagsAsync(_cmsKitTestData.Content_1_EntityType, _cmsKitTestData.EntityId1); content_1_tags.Count.ShouldBe(_cmsKitTestData.Content_1_Tags.Length); @@ -95,7 +95,7 @@ namespace Volo.CmsKit.Tags _cmsKitTestData.Content_1_Tags.Contains(tag.Name).ShouldBeTrue(); } - var content_2_tags = await _tagRepository.GetAllRelatedTagsAsync(_cmsKitTestData.Content_2_EntityType, _cmsKitTestData.Content_2_EntityType); + var content_2_tags = await _tagRepository.GetAllRelatedTagsAsync(_cmsKitTestData.Content_2_EntityType, _cmsKitTestData.EntityId2); content_2_tags.Count.ShouldBe(_cmsKitTestData.Content_2_Tags.Length); From 55f8c1670c8faecc3bbbb1c9c4968e6f9baf71b0 Mon Sep 17 00:00:00 2001 From: Ilkay Ilknur Date: Mon, 28 Dec 2020 17:27:10 +0300 Subject: [PATCH 098/217] set lookup property display name to the text field. --- .../ObjectExtending/Modularity/EntityExtensionConfiguration.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/Modularity/EntityExtensionConfiguration.cs b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/Modularity/EntityExtensionConfiguration.cs index 6733688a91..c2b56515b4 100644 --- a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/Modularity/EntityExtensionConfiguration.cs +++ b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/Modularity/EntityExtensionConfiguration.cs @@ -67,7 +67,8 @@ namespace Volo.Abp.ObjectExtending.Modularity lookupTextPropertyName, () => new ExtensionPropertyConfiguration(this, typeof(string), lookupTextPropertyName) ); - lookupTextPropertyInfo.DisplayName = propertyInfo.DisplayName ?? new FixedLocalizableString(propertyInfo.Name); + + lookupTextPropertyInfo.DisplayName = propertyInfo.DisplayName; } [NotNull] From 5c91b5af8ef95fc447f0ab35457de387eac53b1e Mon Sep 17 00:00:00 2001 From: Ilkay Ilknur Date: Mon, 28 Dec 2020 17:27:47 +0300 Subject: [PATCH 099/217] handle lookup property table header localization. --- .../ui-extensions.js | 40 ++++++++++++++----- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/ui-extensions.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/ui-extensions.js index eacfecc867..e6061219b0 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/ui-extensions.js +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/ui-extensions.js @@ -96,7 +96,7 @@ get: _get }; })(); - + function initializeObjectExtensions() { var getShortEnumTypeName = function (enumType) { @@ -149,7 +149,7 @@ return defaultValue; } - + function localizeEnumMember(property, enumMemberValue) { var enumType = property.config.type; var enumInfo = abp.objectExtensions.enums[enumType]; @@ -188,10 +188,28 @@ var propertyName = propertyNames[i]; var propertyConfig = objectConfig.properties[propertyName]; if (propertyConfig.ui.onTable.isVisible) { - tableProperties.push({ - name: propertyName, - config: propertyConfig - }); + if (propertyName.endsWith("_Text")) { + var lookupPropertyName = propertyName.replace("_Text", ""); + var lookupProperty = objectConfig.properties[lookupPropertyName]; + if (lookupProperty) { + tableProperties.push({ + name: propertyName, + config: propertyConfig, + lookupPropertyName: lookupPropertyName, + lookupPropertyDisplayName: lookupProperty.displayName + }); + } else { + tableProperties.push({ + name: propertyName, + config: propertyConfig, + }); + } + } else { + tableProperties.push({ + name: propertyName, + config: propertyConfig, + }); + } } } @@ -199,19 +217,23 @@ } function getValueFromRow(property, row) { - return row.extraProperties[property.name];; + return row.extraProperties[property.name]; } function convertPropertyToColumnConfig(property) { var columnConfig = { - title: localizeDisplayName(property.name, property.config.displayName), data: "extraProperties." + property.name, orderable: false }; + if (property.lookupPropertyName) { + columnConfig.title = localizeDisplayName(property.lookupPropertyName, property.lookupPropertyDisplayName); + } else { + columnConfig.title = localizeDisplayName(property.name, property.config.displayName); + } if (property.config.typeSimple === 'enum') { - columnConfig.render = function(data, type, row) { + columnConfig.render = function (data, type, row) { var value = getValueFromRow(property, row); return localizeEnumMember(property, value); } From f819e3c679c156247eb3706ede39cea56f6ee859 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 29 Dec 2020 09:16:39 +0300 Subject: [PATCH 100/217] fix condition for recursive DeepPartial type --- npm/ng-packs/packages/core/src/lib/models/utility.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/models/utility.ts b/npm/ng-packs/packages/core/src/lib/models/utility.ts index f1cfbdb6da..6d9b44ceb6 100644 --- a/npm/ng-packs/packages/core/src/lib/models/utility.ts +++ b/npm/ng-packs/packages/core/src/lib/models/utility.ts @@ -1,14 +1,9 @@ import { TemplateRef, Type } from '@angular/core'; export type DeepPartial = { - [P in keyof T]?: T[P] extends Serializable ? DeepPartial : T[P]; + [P in keyof T]?: T[P] extends Record ? DeepPartial : T[P]; }; -type Serializable = Record< - string | number | symbol, - string | number | boolean | Record ->; - export type InferredInstanceOf = T extends Type ? U : never; export type InferredContextOf = T extends TemplateRef ? U : never; From 27fb31e530309d72b88d896c27263ff138bd6884 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 29 Dec 2020 09:17:34 +0300 Subject: [PATCH 101/217] fix sliceUpdate selector type --- .../packages/core/src/lib/utils/internal-store-utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/core/src/lib/utils/internal-store-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/internal-store-utils.ts index ea4af9ddfb..924c48d988 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/internal-store-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/internal-store-utils.ts @@ -19,7 +19,7 @@ export class InternalStore { ) => this.state$.pipe(map(selector), distinctUntilChanged(compareFn)); sliceUpdate = ( - selector: (state: DeepPartial) => Slice, + selector: (state: State) => Slice, filterFn = (x: Slice) => x !== undefined, ) => this.update$.pipe(map(selector), filter(filterFn)); From 13e06959243b6acd426f7a40c6ef5cd1ca1f8321 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 29 Dec 2020 09:18:17 +0300 Subject: [PATCH 102/217] make PermissionService props and methods protected --- .../core/src/lib/services/permission.service.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/services/permission.service.ts b/npm/ng-packs/packages/core/src/lib/services/permission.service.ts index c89949b064..c549c5a7a8 100644 --- a/npm/ng-packs/packages/core/src/lib/services/permission.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/permission.service.ts @@ -6,7 +6,7 @@ import { ConfigStateService } from './config-state.service'; @Injectable({ providedIn: 'root' }) export class PermissionService { - constructor(private configState: ConfigStateService) {} + constructor(protected configState: ConfigStateService) {} getGrantedPolicy$(key: string) { return this.getStream().pipe( @@ -19,7 +19,7 @@ export class PermissionService { return this.isPolicyGranted(key, policies); } - private isPolicyGranted(key: string, grantedPolicies: Record) { + protected isPolicyGranted(key: string, grantedPolicies: Record) { if (!key) return true; const orRegexp = /\|\|/g; @@ -43,19 +43,19 @@ export class PermissionService { return this.getPolicy(key, grantedPolicies); } - private getStream() { + protected getStream() { return this.configState.getAll$().pipe(map(this.mapToPolicies)); } - private getSnapshot() { + protected getSnapshot() { return this.mapToPolicies(this.configState.getAll()); } - private mapToPolicies(applicationConfiguration: ApplicationConfigurationDto) { - return snq(() => applicationConfiguration.auth.grantedPolicies); + protected mapToPolicies(applicationConfiguration: ApplicationConfigurationDto) { + return snq(() => applicationConfiguration.auth.grantedPolicies, {}); } - private getPolicy(key: string, grantedPolicies: Record) { + protected getPolicy(key: string, grantedPolicies: Record) { return snq(() => grantedPolicies[key], false); } } From 255922244ae8ebe904c898382391eade72c944dc Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 29 Dec 2020 09:18:48 +0300 Subject: [PATCH 103/217] add mock permission service to core testing lib --- .../core/testing/src/lib/services/index.ts | 1 + .../lib/services/mock-permission.service.ts | 34 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 npm/ng-packs/packages/core/testing/src/lib/services/mock-permission.service.ts diff --git a/npm/ng-packs/packages/core/testing/src/lib/services/index.ts b/npm/ng-packs/packages/core/testing/src/lib/services/index.ts index 24206d7c5d..128750c0bc 100644 --- a/npm/ng-packs/packages/core/testing/src/lib/services/index.ts +++ b/npm/ng-packs/packages/core/testing/src/lib/services/index.ts @@ -1 +1,2 @@ +export * from './mock-permission.service'; export * from './mock-rest.service'; diff --git a/npm/ng-packs/packages/core/testing/src/lib/services/mock-permission.service.ts b/npm/ng-packs/packages/core/testing/src/lib/services/mock-permission.service.ts new file mode 100644 index 0000000000..81bbdcc625 --- /dev/null +++ b/npm/ng-packs/packages/core/testing/src/lib/services/mock-permission.service.ts @@ -0,0 +1,34 @@ +import { ConfigStateService, PermissionService } from '@abp/ng.core'; +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root', +}) +export class MockPermissionService extends PermissionService { + constructor(protected configState: ConfigStateService) { + super(configState); + this.grantAllPolicies(); + } + + grantAllPolicies() { + const grantedPolicies = new Proxy( + {}, + { + get() { + return true; + }, + }, + ); + + this.configState['store'].deepPatch({ auth: { grantedPolicies } }); + } + + grantPolicies(keys: string[]) { + const grantedPolicies = keys.reduce((policies, key) => { + policies[key] = true; + return policies; + }, {}); + + this.configState['store'].deepPatch({ auth: { grantedPolicies } }); + } +} From a55c79519f4d591b2fb7c946cbf1d2aef60fa3e5 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 29 Dec 2020 09:19:13 +0300 Subject: [PATCH 104/217] provide MockPermissionService as PermissionService --- .../packages/core/testing/src/lib/core-testing.module.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/npm/ng-packs/packages/core/testing/src/lib/core-testing.module.ts b/npm/ng-packs/packages/core/testing/src/lib/core-testing.module.ts index 7fa32a1b89..adfbaca816 100644 --- a/npm/ng-packs/packages/core/testing/src/lib/core-testing.module.ts +++ b/npm/ng-packs/packages/core/testing/src/lib/core-testing.module.ts @@ -4,6 +4,7 @@ import { coreOptionsFactory, CORE_OPTIONS, LIST_QUERY_DEBOUNCE_TIME, + PermissionService, RestService, } from '@abp/ng.core'; import { APP_BASE_HREF } from '@angular/common'; @@ -11,6 +12,7 @@ import { ModuleWithProviders, NgModule } from '@angular/core'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { provideRoutes } from '@angular/router'; import { RouterTestingModule } from '@angular/router/testing'; +import { MockPermissionService } from './services/mock-permission.service'; import { MockRestService } from './services/mock-rest.service'; /** @@ -42,6 +44,10 @@ export class CoreTestingModule { provide: LIST_QUERY_DEBOUNCE_TIME, useValue: listQueryDebounceTime, }, + { + provide: PermissionService, + useClass: MockPermissionService, + }, { provide: RestService, useClass: MockRestService, From f0cdf83357b2a3c4c60df3aae4ee68244da3f452 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 29 Dec 2020 09:21:57 +0300 Subject: [PATCH 105/217] make mock services of core testing public --- npm/ng-packs/packages/core/testing/src/public-api.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/npm/ng-packs/packages/core/testing/src/public-api.ts b/npm/ng-packs/packages/core/testing/src/public-api.ts index 3b48853680..bf95ae9ece 100644 --- a/npm/ng-packs/packages/core/testing/src/public-api.ts +++ b/npm/ng-packs/packages/core/testing/src/public-api.ts @@ -1 +1,2 @@ export * from './lib/core-testing.module'; +export * from './lib/services'; From 03551252f6c2864370373c5571309bffa31834fc Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 29 Dec 2020 15:55:34 +0800 Subject: [PATCH 106/217] DI support of AutoMapper --- .../Abp/AutoMapper/AbpAutoMapperModule.cs | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs index 214872e371..89092faed4 100644 --- a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs +++ b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs @@ -13,7 +13,7 @@ namespace Volo.Abp.AutoMapper typeof(AbpObjectMappingModule), typeof(AbpObjectExtendingModule), typeof(AbpAuditingModule) - )] + )] public class AbpAutoMapperModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) @@ -21,16 +21,11 @@ namespace Volo.Abp.AutoMapper context.Services.AddAutoMapperObjectMapper(); var mapperAccessor = new MapperAccessor(); - context.Services.AddSingleton(_ => mapperAccessor); - context.Services.AddSingleton(_ => mapperAccessor); + context.Services.AddSingleton(_ => mapperAccessor); + context.Services.Add(new ServiceDescriptor(typeof(IMapperAccessor), CreateMappings, ServiceLifetime.Singleton)); } - public override void OnPreApplicationInitialization(ApplicationInitializationContext context) - { - CreateMappings(context.ServiceProvider); - } - - private void CreateMappings(IServiceProvider serviceProvider) + private IMapperAccessor CreateMappings(IServiceProvider serviceProvider) { using (var scope = serviceProvider.CreateScope()) { @@ -48,7 +43,7 @@ namespace Volo.Abp.AutoMapper { foreach (var profileType in options.ValidatingProfiles) { - config.AssertConfigurationIsValid(((Profile)Activator.CreateInstance(profileType)).ProfileName); + config.AssertConfigurationIsValid(((Profile) Activator.CreateInstance(profileType)).ProfileName); } } @@ -59,7 +54,10 @@ namespace Volo.Abp.AutoMapper ValidateAll(mapperConfiguration); - scope.ServiceProvider.GetRequiredService().Mapper = mapperConfiguration.CreateMapper(); + var mapperAccessor = scope.ServiceProvider.GetRequiredService(); + mapperAccessor.Mapper = new Mapper(mapperConfiguration, serviceProvider.GetService); + + return mapperAccessor; } } } From d4dbbca024b34cf5dc80a672c2027160a0a5e94c Mon Sep 17 00:00:00 2001 From: enisn Date: Tue, 29 Dec 2020 11:06:10 +0300 Subject: [PATCH 107/217] CmsKit - Convert Tag Mongo Query to LINQ --- .../Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs index 5f57d835f5..de543d4666 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs @@ -69,12 +69,11 @@ namespace Volo.CmsKit.MongoDB.Tags .Select(q => q.TagId) .ToListAsync(cancellationToken: GetCancellationToken(cancellationToken)); - var query = await Collection.FindAsync(Builders.Filter.And(new[] - { - Builders.Filter.Eq(x =>x.EntityType, entityType), - Builders.Filter.Eq(x =>x.TenantId, tenantId), - Builders.Filter.In(x => x.Id, entityTagIds), - })); + var query = GetMongoQueryable() + .Where(x => + x.EntityType == entityType && + x.TenantId == tenantId && + entityTagIds.Contains(x.Id)); var result = await query.ToListAsync(cancellationToken: GetCancellationToken(cancellationToken)); return result; From 364732114c3e798f69d0af1bbadcfd136a474962 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 29 Dec 2020 16:46:53 +0800 Subject: [PATCH 108/217] Add AbpAutoMapperConventionalRegistrar --- .../AbpAutoMapperConventionalRegistrar.cs | 34 +++++++++++++++++++ .../Abp/AutoMapper/AbpAutoMapperModule.cs | 5 +++ 2 files changed, 39 insertions(+) create mode 100644 framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperConventionalRegistrar.cs diff --git a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperConventionalRegistrar.cs b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperConventionalRegistrar.cs new file mode 100644 index 0000000000..f6af2f566f --- /dev/null +++ b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperConventionalRegistrar.cs @@ -0,0 +1,34 @@ +using System; +using System.Linq; +using AutoMapper; +using AutoMapper.Internal; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.AutoMapper +{ + public class AbpAutoMapperConventionalRegistrar : ConventionalRegistrarBase + { + protected readonly Type[] OpenTypes = { + typeof(IValueResolver<,,>), + typeof(IMemberValueResolver<,,,>), + typeof(ITypeConverter<,>), + typeof(IValueConverter<,>), + typeof(IMappingAction<,>) + }; + + public override void AddType(IServiceCollection services, Type type) + { + if (IsConventionalRegistrationDisabled(type)) + { + return; + } + + if (OpenTypes.Any(type.ImplementsGenericInterface)) + { + services.TryAddTransient(type); + } + } + } +} diff --git a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs index 89092faed4..479173b72d 100644 --- a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs +++ b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs @@ -16,6 +16,11 @@ namespace Volo.Abp.AutoMapper )] public class AbpAutoMapperModule : AbpModule { + public override void PreConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddConventionalRegistrar(new AbpAutoMapperConventionalRegistrar()); + } + public override void ConfigureServices(ServiceConfigurationContext context) { context.Services.AddAutoMapperObjectMapper(); From 82888df9bcab287246e37fc871776a5bce56d3c6 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 29 Dec 2020 16:49:03 +0800 Subject: [PATCH 109/217] Update AbpAutoMapperConventionalRegistrar --- .../Volo/Abp/AutoMapper/AbpAutoMapperConventionalRegistrar.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperConventionalRegistrar.cs b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperConventionalRegistrar.cs index f6af2f566f..86fc494676 100644 --- a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperConventionalRegistrar.cs +++ b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperConventionalRegistrar.cs @@ -25,7 +25,7 @@ namespace Volo.Abp.AutoMapper return; } - if (OpenTypes.Any(type.ImplementsGenericInterface)) + if (type.IsClass && !type.IsAbstract && OpenTypes.Any(type.ImplementsGenericInterface)) { services.TryAddTransient(type); } From 881f19d7c371201efce08baf78b00423cd2f6ddc Mon Sep 17 00:00:00 2001 From: enisn Date: Tue, 29 Dec 2020 12:21:54 +0300 Subject: [PATCH 110/217] Add Tag Admin app services --- .../CmsKit/Admin/Tags/ITagAdminAppService.cs | 10 +++ .../Volo/CmsKit/Admin/Tags/TagCreateDto.cs | 12 ++++ .../Volo/CmsKit/Admin/Tags/TagGetListInput.cs | 9 +++ .../Volo/CmsKit/Admin/Tags/TagUpdateDto.cs | 10 +++ ...CmsKitAdminPermissionDefinitionProvider.cs | 25 +++++++ .../Permissions/CmsKitAdminPermissions.cs | 21 ++++++ .../CmsKit/Admin/Tags/TagAdminAppService.cs | 70 +++++++++++++++++++ .../Volo/CmsKit/Admin/Tags/TagController.cs | 56 +++++++++++++++ .../CmsKit/Localization/Resources/en.json | 27 ++++--- .../CmsKit/Localization/Resources/tr.json | 27 ++++--- 10 files changed, 247 insertions(+), 20 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/ITagAdminAppService.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagCreateDto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagGetListInput.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagUpdateDto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissionDefinitionProvider.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/TagAdminAppService.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Tags/TagController.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/ITagAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/ITagAdminAppService.cs new file mode 100644 index 0000000000..e677a54c28 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/ITagAdminAppService.cs @@ -0,0 +1,10 @@ +using System; +using Volo.Abp.Application.Services; +using Volo.CmsKit.Tags; + +namespace Volo.CmsKit.Admin.Tags +{ + public interface ITagAdminAppService : ICrudAppService + { + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagCreateDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagCreateDto.cs new file mode 100644 index 0000000000..3eb75bec07 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagCreateDto.cs @@ -0,0 +1,12 @@ +using System.ComponentModel.DataAnnotations; + +namespace Volo.CmsKit.Admin.Tags +{ + public class TagCreateDto + { + [Required] + public string EntityType { get; set; } + [Required] + public string Name { get; set; } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagGetListInput.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagGetListInput.cs new file mode 100644 index 0000000000..23e7041134 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagGetListInput.cs @@ -0,0 +1,9 @@ +using Volo.Abp.Application.Dtos; + +namespace Volo.CmsKit.Admin.Tags +{ + public class TagGetListInput : PagedAndSortedResultRequestDto + { + public string Filter { get; set; } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagUpdateDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagUpdateDto.cs new file mode 100644 index 0000000000..4df242a997 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagUpdateDto.cs @@ -0,0 +1,10 @@ +using System.ComponentModel.DataAnnotations; + +namespace Volo.CmsKit.Admin.Tags +{ + public class TagUpdateDto + { + [Required] + public string Name { get; set; } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissionDefinitionProvider.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissionDefinitionProvider.cs new file mode 100644 index 0000000000..2cb6a53b58 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissionDefinitionProvider.cs @@ -0,0 +1,25 @@ +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.Localization; +using Volo.CmsKit.Localization; + +namespace Volo.CmsKit.Permissions +{ + public class CmsKitAdminPermissionDefinitionProvider : PermissionDefinitionProvider + { + public override void Define(IPermissionDefinitionContext context) + { + var cmsGroup = context.GetGroupOrNull(CmsKitAdminPermissions.GroupName) ?? context.AddGroup(CmsKitAdminPermissions.GroupName, L("Permission:CmsKit")); + + cmsGroup + .AddPermission(CmsKitAdminPermissions.Tags.Default, L("Permission:TagManagement")) + .AddChild(CmsKitAdminPermissions.Tags.Create, L("Permission:TagManagement.Create")) + .AddChild(CmsKitAdminPermissions.Tags.Update, L("Permission:TagManagement.Update")) + .AddChild(CmsKitAdminPermissions.Tags.Delete, L("Permission:TagManagement.Delete")); + } + + private static LocalizableString L(string name) + { + return LocalizableString.Create(name); + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs new file mode 100644 index 0000000000..1cdf0291ef --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs @@ -0,0 +1,21 @@ +using Volo.Abp.Reflection; + +namespace Volo.CmsKit.Permissions +{ + public class CmsKitAdminPermissions + { + public const string GroupName = "CmsKit"; + public static class Tags + { + public const string Default = GroupName + ".Tags"; + public const string Create = Default + ".Create"; + public const string Update = Default + ".Update"; + public const string Delete = Default + ".Delete"; + } + + public static string[] GetAll() + { + return ReflectionHelper.GetPublicConstantsRecursively(typeof(CmsKitAdminPermissions)); + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/TagAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/TagAdminAppService.cs new file mode 100644 index 0000000000..382e14b688 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/TagAdminAppService.cs @@ -0,0 +1,70 @@ +using Microsoft.AspNetCore.Authorization; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Application.Services; +using Volo.Abp.Domain.Repositories; +using Volo.CmsKit.Admin.Tags; +using Volo.CmsKit.Permissions; +using Volo.CmsKit.Tags; + +namespace Volo.CmsKit.Admin.Tags +{ + public class TagAdminAppService : + CrudAppService< + Tag, + TagDto, + Guid, + TagGetListInput, + TagCreateDto, + TagUpdateDto>, + ITagAdminAppService + { + protected ITagManager TagManager { get; } + + public TagAdminAppService( + IRepository repository, + ITagManager tagManager) : base(repository) + { + TagManager = tagManager; + + GetListPolicyName = CmsKitAdminPermissions.Tags.Default; + GetPolicyName = CmsKitAdminPermissions.Tags.Default; + CreatePolicyName = CmsKitAdminPermissions.Tags.Create; + UpdatePolicyName = CmsKitAdminPermissions.Tags.Update; + DeletePolicyName = CmsKitAdminPermissions.Tags.Delete; + } + + [Authorize(CmsKitAdminPermissions.Tags.Create)] + public override async Task CreateAsync(TagCreateDto input) + { + var inserted = await TagManager.InsertAsync( + GuidGenerator.Create(), + input.EntityType, + input.Name, + CurrentTenant?.Id); + return MapToGetOutputDto(inserted); + } + + [Authorize(CmsKitAdminPermissions.Tags.Update)] + public override async Task UpdateAsync(Guid id, TagUpdateDto input) + { + var updated = await TagManager.UpdateAsync( + id, + input.Name); + + return MapToGetOutputDto(updated); + } + protected override IQueryable CreateFilteredQuery(TagGetListInput input) + { + return base.CreateFilteredQuery(input) + .WhereIf( + !string.IsNullOrEmpty(input.Filter), + x => + x.Name.ToLower().Contains(input.Filter) || + x.EntityType.ToLower().Contains(input.Filter)); + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Tags/TagController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Tags/TagController.cs new file mode 100644 index 0000000000..11dcc9a846 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Tags/TagController.cs @@ -0,0 +1,56 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.CmsKit.Admin.Tags; +using Volo.CmsKit.Permissions; +using Volo.CmsKit.Tags; + +namespace Volo.CmsKit.Admin.Tags +{ + public class TagController : CmsKitAdminController, ITagAdminAppService + { + protected ITagAdminAppService TagAdminAppService { get; } + + public TagController(ITagAdminAppService tagAdminAppService) + { + TagAdminAppService = tagAdminAppService; + } + + [HttpPost] + [Authorize(CmsKitAdminPermissions.Tags.Create)] + public Task CreateAsync(TagCreateDto input) + { + return TagAdminAppService.CreateAsync(input); + } + + [HttpDelete("{id}")] + [Authorize(CmsKitAdminPermissions.Tags.Delete)] + public Task DeleteAsync(Guid id) + { + return TagAdminAppService.DeleteAsync(id); + } + + [HttpGet("{id}")] + [Authorize(CmsKitAdminPermissions.Tags.Default)] + public Task GetAsync(Guid id) + { + return TagAdminAppService.GetAsync(id); + } + + [HttpGet] + [Authorize(CmsKitAdminPermissions.Tags.Default)] + public Task> GetListAsync(TagGetListInput input) + { + return TagAdminAppService.GetListAsync(input); + } + + [HttpPut("{id}")] + [Authorize(CmsKitAdminPermissions.Tags.Update)] + public Task UpdateAsync(Guid id, [FromBody] TagUpdateDto input) + { + return TagAdminAppService.UpdateAsync(id, input); + } + } +} 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 73fd2d52b6..42d56b8d16 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 @@ -1,22 +1,29 @@ { "culture": "en", "texts": { - "PickYourReaction": "Pick your reaction", - "YourComment": "Your comment", - "YourReply": "Your reply", + "CommentAuthorizationExceptionMessage": "Those comments are not allowed for public display.", "Comments": "Comments", - "Send": "Send", "Delete": "Delete", - "Reply": "Reply", - "Update": "Update", "Edit": "Edit", "LoginToAddComment": "Login to add comment", + "LoginToRate": "Login to rate", "LoginToReply": "Login to reply", "MessageDeletionConfirmationMessage": "This comment will be deleted completely.", - "CommentAuthorizationExceptionMessage": "Those comments are not allowed for public display.", - "Undo": "Undo", + "Permission:CmsKit": "CmsKit", + "Permission:TagManagement": "Tag Management", + "Permission:TagManagement.Create": "Create Tag", + "Permission:TagManagement.Delete": "Delete Tag", + "Permission:TagManagement.Update": "Update Tag", + "PickYourReaction": "Pick your reaction", "RatingUndoMessage": "Your rating will be undo.", - "LoginToRate": "Login to rate", - "Star": "Star" + "Reply": "Reply", + "Send": "Send", + "Star": "Star", + "TagDeletionConfirmationMessage": "Are you sure to delete '{0}' tag?", + "Tags": "Tags", + "Undo": "Undo", + "Update": "Update", + "YourComment": "Your comment", + "YourReply": "Your reply" } } 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 777e89c979..ac8bd98a9f 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 @@ -1,22 +1,29 @@ { "culture": "tr", "texts": { - "PickYourReaction": "Tepkinizi seçin", - "YourComment": "Yorumunuz", - "YourReply": "Cevabınız", + "CommentAuthorizationExceptionMessage": "Bu yorumları görebilmek için yetki gerekir.", "Comments": "Yorumlar", - "Send": "Gönder", "Delete": "Sil", - "Reply": "Cevapla", - "Update": "Güncelle", "Edit": "Düzenle", "LoginToAddComment": "Yorum yapmak için giriş yap", + "LoginToRate": "Oylamak için giriş yapın", "LoginToReply": "Cevap vermek için giriş yap", "MessageDeletionConfirmationMessage": "Bu yorum tamamen silinecektir", - "CommentAuthorizationExceptionMessage": "Bu yorumları görebilmek için yetki gerekir.", - "Undo": "Geri al", + "Permission:CmsKit": "CmsKit", + "Permission:TagManagement": "Etiket Yönetimi", + "Permission:TagManagement.Create": "Etiket Oluşturma", + "Permission:TagManagement.Delete": "Etiket Silme", + "Permission:TagManagement.Update": "Etiket Güncelleme", + "PickYourReaction": "Tepkinizi seçin", "RatingUndoMessage": "Oylamanız geri alınacak.", - "LoginToRate": "Oylamak için giriş yapın", - "Star": "Yıldız" + "Reply": "Cevapla", + "Send": "Gönder", + "Star": "Yıldız", + "TagDeletionConfirmationMessage": "'{0}' etiketini silmek istediğinize emin misiniz?", + "Tags": "Etiketler", + "Undo": "Geri al", + "Update": "Güncelle", + "YourComment": "Yorumunuz", + "YourReply": "Cevabınız" } } From 91595ee0ca0816654ec780c46bae9ba2ef055887 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 29 Dec 2020 17:51:57 +0800 Subject: [PATCH 111/217] add unit tests --- .../AutoMapper_MapperAction_Tests.cs | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_MapperAction_Tests.cs diff --git a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_MapperAction_Tests.cs b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_MapperAction_Tests.cs new file mode 100644 index 0000000000..aa1324927a --- /dev/null +++ b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_MapperAction_Tests.cs @@ -0,0 +1,87 @@ +using AutoMapper; +using Microsoft.Extensions.DependencyInjection; +using Shouldly; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Testing; +using Xunit; +using IObjectMapper = Volo.Abp.ObjectMapping.IObjectMapper; + +namespace Volo.Abp.AutoMapper +{ + public class AutoMapper_MapperAction_Tests : AbpIntegratedTest + { + private readonly IObjectMapper _objectMapper; + + public AutoMapper_MapperAction_Tests() + { + _objectMapper = ServiceProvider.GetRequiredService(); + } + + [Fact] + public void Should_Name_DIMappingAction() + { + var mapperActionEntity = new MapperActionModel {Name = "MapperActionEntity"}; + _objectMapper.Map(mapperActionEntity) + .Name.ShouldBe(nameof(DIMappingAction)); + } + + [Fact] + public void Should_Name_NotDIMappingAction() + { + var mapperActionEntity = new MapperActionModel2 {Name = "MapperActionEntity"}; + _objectMapper.Map(mapperActionEntity) + .Name.ShouldBe(nameof(NotDIMapperAction)); + } + + public class MapperActionModel + { + public string Name { get; set; } + } + + public class MapperActionModel2 + { + public string Name { get; set; } + } + + public class MapperActionProfile : Profile + { + public MapperActionProfile() + { + CreateMap().AfterMap(); + CreateMap().AfterMap(); + } + } + + public class DIMappingAction : IMappingAction + { + private readonly MapperActionService _mapperActionService; + + public DIMappingAction(MapperActionService mapperActionService) + { + _mapperActionService = mapperActionService; + } + + public void Process(MapperActionModel source, MapperActionModel2 destination, ResolutionContext context) + { + destination.Name = _mapperActionService.GetName(); + } + } + + public class NotDIMapperAction : IMappingAction + { + public void Process(MapperActionModel2 source, MapperActionModel destination, + ResolutionContext context) + { + destination.Name = nameof(NotDIMapperAction); + } + } + + public class MapperActionService : ITransientDependency + { + public string GetName() + { + return nameof(DIMappingAction); + } + } + } +} From 08a43351d96d5c8791d9a0462d4639cb767a8987 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 29 Dec 2020 13:15:40 +0300 Subject: [PATCH 112/217] Cli: Change NuGet.config file path for module source-code download --- .../Cli/ProjectBuilding/Templates/Module/ModuleTemplateBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Module/ModuleTemplateBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Module/ModuleTemplateBase.cs index ef8385d479..5e8db9a346 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Module/ModuleTemplateBase.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Module/ModuleTemplateBase.cs @@ -75,7 +75,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.Module private static void UpdateNuGetConfig(ProjectBuildContext context, List steps) { - steps.Add(new UpdateNuGetConfigStep("/aspnet-core/NuGet.Config")); + steps.Add(new UpdateNuGetConfigStep("/NuGet.Config")); } private void CleanupFolderHierarchy(ProjectBuildContext context, List steps) From 37bff78ced4020bf5ed64a15af4d518578ba2fa1 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Tue, 29 Dec 2020 14:41:21 +0300 Subject: [PATCH 113/217] page application services are seperated to admin and public --- .../CmsKit/Admin}/Pages/CheckUrlInputDto.cs | 3 +- .../CmsKit/Admin}/Pages/CreatePageInputDto.cs | 3 +- .../Pages/CreatePageWithContentInputDto.cs | 4 +- .../Admin/Pages/IPageAdminAppService.cs} | 7 +--- .../Volo/CmsKit/Admin}/Pages/PageDto.cs | 2 +- .../CmsKit/Admin}/Pages/PageWithContentDto.cs | 2 +- .../Admin}/Pages/UpdatePageContentInputDto.cs | 4 +- .../CmsKit/Admin}/Pages/UpdatePageInputDto.cs | 3 +- ...CmsKitAdminApplicationAutoMapperProfile.cs | 6 +-- .../Admin/Pages/PageAdminAppService.cs} | 14 ++----- .../CmsKit/Admin/Page/PageAdminController.cs} | 37 ++++++++----------- ...msKitCommonApplicationAutoMapperProfile.cs | 2 - .../CmsKit/Public/Pages/IPageAppService.cs | 10 +++++ .../Volo/CmsKit/Public/Pages/PageDto.cs | 14 +++++++ .../CmsKit/Public/Pages/PageAppService.cs | 22 +++++++++++ .../PublicApplicationAutoMapperProfile.cs | 4 ++ .../Public/Pages/PagesPublicController.cs | 26 +++++++++++++ .../Pages/CmsKit/Pages/Index.cshtml | 5 +-- .../Pages/CmsKit/Pages/Index.cshtml.cs | 5 ++- .../Shared/Components/Pages/Default.cshtml | 2 +- .../Pages/DefaultPageViewComponent.cs | 4 +- 21 files changed, 115 insertions(+), 64 deletions(-) rename modules/cms-kit/src/{Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit => Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin}/Pages/CheckUrlInputDto.cs (73%) rename modules/cms-kit/src/{Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit => Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin}/Pages/CreatePageInputDto.cs (82%) rename modules/cms-kit/src/{Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit => Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin}/Pages/CreatePageWithContentInputDto.cs (80%) rename modules/cms-kit/src/{Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/IPageAppService.cs => Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/IPageAdminAppService.cs} (77%) rename modules/cms-kit/src/{Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit => Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin}/Pages/PageDto.cs (87%) rename modules/cms-kit/src/{Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit => Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin}/Pages/PageWithContentDto.cs (90%) rename modules/cms-kit/src/{Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit => Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin}/Pages/UpdatePageContentInputDto.cs (66%) rename modules/cms-kit/src/{Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit => Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin}/Pages/UpdatePageInputDto.cs (82%) rename modules/cms-kit/src/{Volo.CmsKit.Common.Application/Volo/CmsKit/Pages/PageAppService.cs => Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Pages/PageAdminAppService.cs} (88%) rename modules/cms-kit/src/{Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Pages/PageController.cs => Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Page/PageAdminController.cs} (57%) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Pages/IPageAppService.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Pages/PageDto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Pages/PageAppService.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Pages/PagesPublicController.cs rename modules/cms-kit/src/{Volo.CmsKit.Common.Web => Volo.CmsKit.Public.Web}/Pages/CmsKit/Pages/Index.cshtml (71%) rename modules/cms-kit/src/{Volo.CmsKit.Common.Web => Volo.CmsKit.Public.Web}/Pages/CmsKit/Pages/Index.cshtml.cs (83%) rename modules/cms-kit/src/{Volo.CmsKit.Common.Web => Volo.CmsKit.Public.Web}/Pages/CmsKit/Shared/Components/Pages/Default.cshtml (86%) rename modules/cms-kit/src/{Volo.CmsKit.Common.Web => Volo.CmsKit.Public.Web}/Pages/CmsKit/Shared/Components/Pages/DefaultPageViewComponent.cs (90%) diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CheckUrlInputDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/CheckUrlInputDto.cs similarity index 73% rename from modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CheckUrlInputDto.cs rename to modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/CheckUrlInputDto.cs index e46dca2353..abb1d81c12 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CheckUrlInputDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/CheckUrlInputDto.cs @@ -1,7 +1,6 @@ using System.ComponentModel.DataAnnotations; -using Volo.Abp.Validation; -namespace Volo.CmsKit.Pages +namespace Volo.CmsKit.Admin.Pages { public class CheckUrlInputDto { diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CreatePageInputDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/CreatePageInputDto.cs similarity index 82% rename from modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CreatePageInputDto.cs rename to modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/CreatePageInputDto.cs index b6ce4990f9..50c7a68f32 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CreatePageInputDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/CreatePageInputDto.cs @@ -1,7 +1,6 @@ using System.ComponentModel.DataAnnotations; -using Volo.Abp.Validation; -namespace Volo.CmsKit.Pages +namespace Volo.CmsKit.Admin.Pages { public class CreatePageInputDto { diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CreatePageWithContentInputDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/CreatePageWithContentInputDto.cs similarity index 80% rename from modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CreatePageWithContentInputDto.cs rename to modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/CreatePageWithContentInputDto.cs index d9905b83a5..bff09b595b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/CreatePageWithContentInputDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/CreatePageWithContentInputDto.cs @@ -1,8 +1,6 @@ using System.ComponentModel.DataAnnotations; -using Volo.Abp.Validation; -using Volo.CmsKit.Contents; -namespace Volo.CmsKit.Pages +namespace Volo.CmsKit.Admin.Pages { public class CreatePageWithContentInputDto { diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/IPageAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/IPageAdminAppService.cs similarity index 77% rename from modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/IPageAppService.cs rename to modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/IPageAdminAppService.cs index ef9c8082df..048d2d89c7 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/IPageAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/IPageAdminAppService.cs @@ -1,14 +1,11 @@ using System; using System.Threading.Tasks; -using JetBrains.Annotations; -namespace Volo.CmsKit.Pages +namespace Volo.CmsKit.Admin.Pages { - public interface IPageAppService + public interface IPageAdminAppService { Task GetAsync(Guid id); - - Task GetByUrlAsync([NotNull] string url); Task CreatePageAsync(CreatePageInputDto input); diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/PageDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/PageDto.cs similarity index 87% rename from modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/PageDto.cs rename to modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/PageDto.cs index e2a10d39b5..e8750ce07b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/PageDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/PageDto.cs @@ -1,7 +1,7 @@ using System; using Volo.Abp.Application.Dtos; -namespace Volo.CmsKit.Pages +namespace Volo.CmsKit.Admin.Pages { public class PageDto : EntityDto { diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/PageWithContentDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/PageWithContentDto.cs similarity index 90% rename from modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/PageWithContentDto.cs rename to modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/PageWithContentDto.cs index b9ed14ab0d..2d592c5bba 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/PageWithContentDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/PageWithContentDto.cs @@ -2,7 +2,7 @@ using Volo.Abp.Application.Dtos; using Volo.CmsKit.Contents; -namespace Volo.CmsKit.Pages +namespace Volo.CmsKit.Admin.Pages { public class PageWithContentDto : EntityDto { diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/UpdatePageContentInputDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/UpdatePageContentInputDto.cs similarity index 66% rename from modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/UpdatePageContentInputDto.cs rename to modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/UpdatePageContentInputDto.cs index 7a1a89b955..f6d46167c8 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/UpdatePageContentInputDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/UpdatePageContentInputDto.cs @@ -1,8 +1,6 @@ using System.ComponentModel.DataAnnotations; -using Volo.Abp.Validation; -using Volo.CmsKit.Contents; -namespace Volo.CmsKit.Pages +namespace Volo.CmsKit.Admin.Pages { public class UpdatePageContentInputDto { diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/UpdatePageInputDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/UpdatePageInputDto.cs similarity index 82% rename from modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/UpdatePageInputDto.cs rename to modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/UpdatePageInputDto.cs index 7180d296a3..eb831fee45 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Pages/UpdatePageInputDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/UpdatePageInputDto.cs @@ -1,7 +1,6 @@ using System.ComponentModel.DataAnnotations; -using Volo.Abp.Validation; -namespace Volo.CmsKit.Pages +namespace Volo.CmsKit.Admin.Pages { public class UpdatePageInputDto { diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs index 59c8058590..e1062daa92 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs @@ -1,4 +1,6 @@ using AutoMapper; +using Volo.CmsKit.Admin.Pages; +using Volo.CmsKit.Pages; namespace Volo.CmsKit.Admin { @@ -6,9 +8,7 @@ namespace Volo.CmsKit.Admin { public CmsKitAdminApplicationAutoMapperProfile() { - /* You can configure your AutoMapper mapping configuration here. - * Alternatively, you can split your mapping configurations - * into multiple profile classes for a better organization. */ + CreateMap(); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Pages/PageAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Pages/PageAdminAppService.cs similarity index 88% rename from modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Pages/PageAppService.cs rename to modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Pages/PageAdminAppService.cs index cc7c177873..6778dd7916 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Pages/PageAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Pages/PageAdminAppService.cs @@ -3,15 +3,16 @@ using System.Threading; using System.Threading.Tasks; using Volo.Abp; using Volo.CmsKit.Contents; +using Volo.CmsKit.Pages; -namespace Volo.CmsKit.Pages +namespace Volo.CmsKit.Admin.Pages { - public class PageAppService : CmsKitAppServiceBase, IPageAppService + public class PageAdminAppService : CmsKitAdminAppServiceBase, IPageAdminAppService { protected readonly IPageRepository PageRepository; protected readonly IContentRepository ContentRepository; - public PageAppService(IPageRepository pageRepository, IContentRepository contentRepository) + public PageAdminAppService(IPageRepository pageRepository, IContentRepository contentRepository) { PageRepository = pageRepository; ContentRepository = contentRepository; @@ -24,13 +25,6 @@ namespace Volo.CmsKit.Pages return ObjectMapper.Map(page); } - public virtual async Task GetByUrlAsync(string url) - { - var page = await PageRepository.GetByUrlAsync(url); - - return ObjectMapper.Map(page); - } - public virtual async Task CreatePageAsync(CreatePageInputDto input) { var page = await CreatePageAsync(input.Title, input.Url, input.Description); diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Pages/PageController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Page/PageAdminController.cs similarity index 57% rename from modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Pages/PageController.cs rename to modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Page/PageAdminController.cs index d16dc97ef1..4e37848e37 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Pages/PageController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Page/PageAdminController.cs @@ -2,76 +2,69 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Volo.Abp; -using Volo.CmsKit.Pages; +using Volo.CmsKit.Admin.Pages; -namespace Volo.CmsKit.Controllers.Pages +namespace Volo.CmsKit.Admin.Page { [RemoteService(Name = CmsKitCommonRemoteServiceConsts.RemoteServiceName)] [Area("cms-kit")] - [Route("api/cms-kit/pages")] - public class PageController : CmsKitControllerBase, IPageAppService + [Route("api/cms-kit-admin/pages")] + public class PageAdminController : CmsKitAdminController, IPageAdminAppService { - protected readonly IPageAppService PageAppService; + protected readonly IPageAdminAppService PageAdminAppService; - public PageController(IPageAppService pageAppService) + public PageAdminController(IPageAdminAppService pageAdminAppService) { - PageAppService = pageAppService; + PageAdminAppService = pageAdminAppService; } [HttpGet] [Route("{id}")] public virtual Task GetAsync(Guid id) { - return PageAppService.GetAsync(id); + return PageAdminAppService.GetAsync(id); } - - [HttpGet] - [Route("url/{url}")] - public Task GetByUrlAsync(string url) - { - return PageAppService.GetByUrlAsync(url); - } - + [HttpPost] [Route("create")] public virtual Task CreatePageAsync(CreatePageInputDto input) { - return PageAppService.CreatePageAsync(input); + return PageAdminAppService.CreatePageAsync(input); } [HttpPost] [Route("create-with-content")] public virtual Task CreatePageWithContentAsync(CreatePageWithContentInputDto input) { - return PageAppService.CreatePageWithContentAsync(input); + return PageAdminAppService.CreatePageWithContentAsync(input); } [HttpPut] [Route("{id}")] public virtual Task UpdatePageAsync(Guid id, UpdatePageInputDto input) { - return PageAppService.UpdatePageAsync(id, input); + return PageAdminAppService.UpdatePageAsync(id, input); } [HttpPost] [Route("does-url-exist")] public virtual Task DoesUrlExistAsync(CheckUrlInputDto input) { - return PageAppService.DoesUrlExistAsync(input); + return PageAdminAppService.DoesUrlExistAsync(input); } [HttpPut] [Route("update-content/{id}")] public virtual Task UpdatePageContentAsync(Guid id, UpdatePageContentInputDto input) { - return PageAppService.UpdatePageContentAsync(id, input); + return PageAdminAppService.UpdatePageContentAsync(id, input); } [HttpDelete] [Route("{id}")] public virtual Task DeleteAsync(Guid id) { - return PageAppService.DeleteAsync(id); + return PageAdminAppService.DeleteAsync(id); } } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationAutoMapperProfile.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationAutoMapperProfile.cs index b0c6388c30..67242c71de 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationAutoMapperProfile.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationAutoMapperProfile.cs @@ -12,8 +12,6 @@ namespace Volo.CmsKit CreateMap(); CreateMap(); - - CreateMap(); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Pages/IPageAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Pages/IPageAppService.cs new file mode 100644 index 0000000000..d8ea8f1751 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Pages/IPageAppService.cs @@ -0,0 +1,10 @@ +using System.Threading.Tasks; +using JetBrains.Annotations; + +namespace Volo.CmsKit.Public.Pages +{ + public interface IPageAppService + { + Task GetByUrlAsync([NotNull] string url); + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Pages/PageDto.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Pages/PageDto.cs new file mode 100644 index 0000000000..49798d5202 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Pages/PageDto.cs @@ -0,0 +1,14 @@ +using System; +using Volo.Abp.Application.Dtos; + +namespace Volo.CmsKit.Public.Pages +{ + public class PageDto : EntityDto + { + public string Title { get; set; } + + public string Url { get; set; } + + public string Description { get; set; } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Pages/PageAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Pages/PageAppService.cs new file mode 100644 index 0000000000..38f4406cab --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Pages/PageAppService.cs @@ -0,0 +1,22 @@ +using System.Threading.Tasks; +using Volo.CmsKit.Pages; + +namespace Volo.CmsKit.Public.Pages +{ + public class PageAppService : CmsKitPublicAppServiceBase, IPageAppService + { + protected readonly IPageRepository PageRepository; + + public PageAppService(IPageRepository pageRepository) + { + PageRepository = pageRepository; + } + + public virtual async Task GetByUrlAsync(string url) + { + var page = await PageRepository.GetByUrlAsync(url); + + return ObjectMapper.Map(page); + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs index 3ac2d1949b..6da6723829 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs @@ -1,7 +1,9 @@ using AutoMapper; using Volo.Abp.AutoMapper; using Volo.CmsKit.Comments; +using Volo.CmsKit.Pages; using Volo.CmsKit.Public.Comments; +using Volo.CmsKit.Public.Pages; using Volo.CmsKit.Public.Ratings; using Volo.CmsKit.Ratings; using Volo.CmsKit.Users; @@ -22,6 +24,8 @@ namespace Volo.CmsKit.Public .Ignore(x=> x.Author); CreateMap(); + + CreateMap(); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Pages/PagesPublicController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Pages/PagesPublicController.cs new file mode 100644 index 0000000000..45dda25ab5 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Pages/PagesPublicController.cs @@ -0,0 +1,26 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Volo.Abp; + +namespace Volo.CmsKit.Public.Pages +{ + [RemoteService(Name = CmsKitPublicRemoteServiceConsts.RemoteServiceName)] + [Area("cms-kit")] + [Route("api/cms-kit-public/comments")] + public class PagesPublicController + { + protected readonly IPageAppService PageAppService; + + public PagesPublicController(IPageAppService pageAppService) + { + PageAppService = pageAppService; + } + + [HttpGet] + [Route("url/{url}")] + public Task GetByUrlAsync(string url) + { + return PageAppService.GetByUrlAsync(url); + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Pages/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Pages/Index.cshtml similarity index 71% rename from modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Pages/Index.cshtml rename to modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Pages/Index.cshtml index 486b1c78c1..47e73b8b19 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Pages/Index.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Pages/Index.cshtml @@ -1,9 +1,8 @@ @page "{pageUrl}" @using Microsoft.AspNetCore.Mvc.Localization @using Volo.CmsKit.Localization -@using Volo.CmsKit.Web.Pages.CmsKit.Pages -@using Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.Pages -@model IndexModel +@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Pages +@model Volo.CmsKit.Public.Web.Pages.CmsKit.Pages.IndexModel @inject IHtmlLocalizer L @await Component.InvokeAsync(typeof(DefaultPageViewComponent), diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Pages/Index.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Pages/Index.cshtml.cs similarity index 83% rename from modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Pages/Index.cshtml.cs rename to modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Pages/Index.cshtml.cs index f0ecfbc9c2..1d5dca0940 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Pages/Index.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Pages/Index.cshtml.cs @@ -1,8 +1,9 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; -using Volo.CmsKit.Pages; +using Volo.CmsKit.Public.Pages; +using Volo.CmsKit.Web.Pages; -namespace Volo.CmsKit.Web.Pages.CmsKit.Pages +namespace Volo.CmsKit.Public.Web.Pages.CmsKit.Pages { public class IndexModel : CommonPageModel { diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Pages/Default.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Pages/Default.cshtml similarity index 86% rename from modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Pages/Default.cshtml rename to modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Pages/Default.cshtml index 87a326c7ff..6691880ad5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Pages/Default.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Pages/Default.cshtml @@ -2,7 +2,7 @@ @using Microsoft.AspNetCore.Mvc.RazorPages @using Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.Contents -@model Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.Pages.PageViewModel +@model Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Pages.PageViewModel diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Pages/DefaultPageViewComponent.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Pages/DefaultPageViewComponent.cs similarity index 90% rename from modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Pages/DefaultPageViewComponent.cs rename to modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Pages/DefaultPageViewComponent.cs index 62689f6bc1..450b7ad97e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Pages/DefaultPageViewComponent.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Pages/DefaultPageViewComponent.cs @@ -2,9 +2,9 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc; -using Volo.CmsKit.Pages; +using Volo.CmsKit.Public.Pages; -namespace Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.Pages +namespace Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Pages { [ViewComponent(Name = "CmsDefaultPage")] public class DefaultPageViewComponent : AbpViewComponent From 2964ded7e80eb8f740c5c38876f4dfb59fb67e05 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Tue, 29 Dec 2020 15:24:31 +0300 Subject: [PATCH 114/217] added test page data and pagerepository tests --- .../Pages/PageRepository_Test.cs | 9 +++ .../MongoDB/Pages/PageRepository_Test.cs | 11 ++++ .../CmsKitDataSeedContributor.cs | 24 ++++++- .../Volo.CmsKit.TestBase/CmsKitTestData.cs | 28 +++++++-- .../Pages/PageRepository_Test.cs | 62 +++++++++++++++++++ 5 files changed, 128 insertions(+), 6 deletions(-) create mode 100644 modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Pages/PageRepository_Test.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Pages/PageRepository_Test.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.TestBase/Pages/PageRepository_Test.cs diff --git a/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Pages/PageRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Pages/PageRepository_Test.cs new file mode 100644 index 0000000000..d78d10911c --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Pages/PageRepository_Test.cs @@ -0,0 +1,9 @@ +using Volo.CmsKit.Pages; + +namespace Volo.CmsKit.EntityFrameworkCore.Pages +{ + public class PageRepository_Test : PageRepository_Test + { + + } +} \ No newline at end of file diff --git a/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Pages/PageRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Pages/PageRepository_Test.cs new file mode 100644 index 0000000000..1a379f4e95 --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Pages/PageRepository_Test.cs @@ -0,0 +1,11 @@ +using Volo.CmsKit.Pages; +using Xunit; + +namespace Volo.CmsKit.MongoDB.Pages +{ + [Collection(MongoTestCollection.Name)] + public class PageRepository_Test : PageRepository_Test + { + + } +} \ No newline at end of file diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs index 8a1ab616d1..b0f820a4f2 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs @@ -7,6 +7,7 @@ using Volo.Abp.MultiTenancy; using Volo.Abp.Users; using Volo.CmsKit.Comments; using Volo.CmsKit.Contents; +using Volo.CmsKit.Pages; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; using Volo.CmsKit.Tags; @@ -26,7 +27,7 @@ namespace Volo.CmsKit private readonly IContentRepository _contentRepository; private readonly IEntityTagRepository _entityTagRepository; private readonly ITagManager _tagManager; - + private readonly IPageRepository _pageRepository; public CmsKitDataSeedContributor( IGuidGenerator guidGenerator, ICmsUserRepository cmsUserRepository, @@ -37,7 +38,8 @@ namespace Volo.CmsKit ICurrentTenant currentTenant, IContentRepository contentRepository, ITagManager tagManager, - IEntityTagRepository entityTagRepository) + IEntityTagRepository entityTagRepository, + IPageRepository pageRepository) { _guidGenerator = guidGenerator; _cmsUserRepository = cmsUserRepository; @@ -49,6 +51,7 @@ namespace Volo.CmsKit _contentRepository = contentRepository; _tagManager = tagManager; _entityTagRepository = entityTagRepository; + _pageRepository = pageRepository; } public async Task SeedAsync(DataSeedContext context) @@ -66,6 +69,8 @@ namespace Volo.CmsKit await SeedContentsAsync(); await SeedTagsAsync(); + + await SeedPagesAsync(); } } @@ -230,5 +235,20 @@ namespace Volo.CmsKit await _entityTagRepository.InsertAsync(new EntityTag(tagEntity.Id, _cmsKitTestData.Content_2_Id)); } } + + private async Task SeedPagesAsync() + { + var page1 = new Page(_cmsKitTestData.Page_1_Id, _cmsKitTestData.Page_1_Title, _cmsKitTestData.Page_1_Url, _cmsKitTestData.Page_1_Description); + var page1Content = new Content(_guidGenerator.Create(), nameof(Page), page1.Id.ToString(), _cmsKitTestData.Page_1_Content); + + await _pageRepository.InsertAsync(page1); + await _contentRepository.InsertAsync(page1Content); + + var page2 = new Page(_cmsKitTestData.Page_2_Id, _cmsKitTestData.Page_2_Title, _cmsKitTestData.Page_2_Url, _cmsKitTestData.Page_2_Description); + var page2Content = new Content(_guidGenerator.Create(), nameof(Page), page2.Id.ToString(), _cmsKitTestData.Page_2_Content); + + await _pageRepository.InsertAsync(page2); + await _contentRepository.InsertAsync(page2Content); + } } } diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs index 6589e79d9c..11aa185ddd 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs @@ -20,20 +20,40 @@ namespace Volo.CmsKit public string EntityId2 { get; } = "2"; - public string Content_1_EntityType = "Lyrics"; + public string Content_1_EntityType { get; } = "Lyrics"; public string Content_1 { get; } = "First things first\nI'ma say all the words inside my head\nI'm fired up and tired of the way that things have been, oh-ooh\nThe way that things have been, oh-ooh"; - public string Content_1_Id = "1"; + public string Content_1_Id { get; } = "1"; public string[] Content_1_Tags => new string[] {"Imagine Dragons", "Music"}; - public string Content_2_EntityType = "LyricsAlso"; + public string Content_2_EntityType { get; } = "LyricsAlso"; public string Content_2 { get; } = "Second thing second\nDon't you tell me what you think that I could be\nI'm the one at the sail, I'm the master of my sea, oh-ooh\nThe master of my sea, oh-ooh"; - public string Content_2_Id = "2"; + public string Content_2_Id { get; } = "2"; public string[] Content_2_Tags => new string[] {"Imagine Dragons", "Music", "Most Loved Part"}; + + public string Page_1_Title { get; } = "Imagine Dragons - Believer Lyrics"; + + public string Page_1_Url { get; } = "imagine-dragons-believer-lyrics"; + + public string Page_1_Description { get; } = "You can get the lyrics of the music."; + + public Guid Page_1_Id { get; } = Guid.NewGuid(); + + public string Page_1_Content => Content_1; + + public string Page_2_Title { get; } = "Imagine Dragons - Believer Lyrics (Page 2)"; + + public string Page_2_Url { get; } = "imagine-dragons-believer-lyrics-2"; + + public string Page_2_Description { get; } = "You can get the lyrics of the music."; + + public Guid Page_2_Id { get; } = Guid.NewGuid(); + + public string Page_2_Content => Content_2; } } diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/Pages/PageRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/Pages/PageRepository_Test.cs new file mode 100644 index 0000000000..68b91f72a9 --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/Pages/PageRepository_Test.cs @@ -0,0 +1,62 @@ +using System.Threading.Tasks; +using Shouldly; +using Volo.Abp.Modularity; +using Xunit; + +namespace Volo.CmsKit.Pages +{ + public abstract class PageRepository_Test : CmsKitTestBase + where TStartupModule : IAbpModule + { + private readonly CmsKitTestData _cmsKitTestData; + private readonly IPageRepository _pageRepository; + + protected PageRepository_Test() + { + _cmsKitTestData = GetRequiredService(); + _pageRepository = GetRequiredService(); + } + + [Fact] + public async Task ShouldGetByUrlAsync() + { + var page = await _pageRepository.GetByUrlAsync(_cmsKitTestData.Page_1_Url); + + page.ShouldNotBeNull(); + page.Description.ShouldBe(_cmsKitTestData.Page_1_Description); + } + + [Fact] + public async Task ShouldFindByUrlAsync() + { + var page = await _pageRepository.FindByUrlAsync(_cmsKitTestData.Page_1_Url); + + page.ShouldNotBeNull(); + page.Description.ShouldBe(_cmsKitTestData.Page_1_Description); + } + + [Fact] + public async Task ShouldNotFindByUrlAsync() + { + var page = await _pageRepository.FindByUrlAsync("not-exist-lyrics"); + + page.ShouldBeNull(); + } + + [Fact] + public async Task ShouldBeExistAsync() + { + var page = await _pageRepository.DoesExistAsync(_cmsKitTestData.Page_1_Url); + + page.ShouldBeTrue(); + } + + [Fact] + public async Task ShouldNotBeExistAsync() + { + var page = await _pageRepository.DoesExistAsync("not-exist-lyrics"); + + page.ShouldBeFalse(); + } + } +} \ No newline at end of file From 9f48463f60e0695aa92488f4b828f14a89cb6092 Mon Sep 17 00:00:00 2001 From: enisn Date: Tue, 29 Dec 2020 15:30:24 +0300 Subject: [PATCH 115/217] Move TagAppService to Public from common --- .../Volo/CmsKit/Public}/Tags/GetRelatedTagsInput.cs | 5 ++--- .../Volo/CmsKit/Public}/Tags/ITagAppService.cs | 3 ++- .../Volo/CmsKit/Public}/Tags/TagAppService.cs | 6 ++++-- 3 files changed, 8 insertions(+), 6 deletions(-) rename modules/cms-kit/src/{Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit => Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public}/Tags/GetRelatedTagsInput.cs (62%) rename modules/cms-kit/src/{Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit => Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public}/Tags/ITagAppService.cs (81%) rename modules/cms-kit/src/{Volo.CmsKit.Common.Application/Volo/CmsKit => Volo.CmsKit.Public.Application/Volo/CmsKit/Public}/Tags/TagAppService.cs (90%) diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/GetRelatedTagsInput.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Tags/GetRelatedTagsInput.cs similarity index 62% rename from modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/GetRelatedTagsInput.cs rename to modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Tags/GetRelatedTagsInput.cs index ca9cd31b16..b8df8ec439 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/GetRelatedTagsInput.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Tags/GetRelatedTagsInput.cs @@ -1,7 +1,6 @@ -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations; -namespace Volo.CmsKit.Tags +namespace Volo.CmsKit.Public.Tags { public class GetRelatedTagsInput { diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/ITagAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Tags/ITagAppService.cs similarity index 81% rename from modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/ITagAppService.cs rename to modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Tags/ITagAppService.cs index f831d0f735..29d786f086 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/ITagAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Tags/ITagAppService.cs @@ -1,8 +1,9 @@ using System.Collections.Generic; using System.Threading.Tasks; using Volo.Abp.Application.Services; +using Volo.CmsKit.Tags; -namespace Volo.CmsKit.Tags +namespace Volo.CmsKit.Public.Tags { public interface ITagAppService : IApplicationService { diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Tags/TagAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Tags/TagAppService.cs similarity index 90% rename from modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Tags/TagAppService.cs rename to modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Tags/TagAppService.cs index 4e096d9bf6..8feaaa0130 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Tags/TagAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Tags/TagAppService.cs @@ -1,9 +1,11 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Text; using System.Threading.Tasks; +using Volo.CmsKit.Tags; -namespace Volo.CmsKit.Tags +namespace Volo.CmsKit.Public.Tags { public class TagAppService : CmsKitAppServiceBase, ITagAppService { @@ -13,7 +15,7 @@ namespace Volo.CmsKit.Tags public TagAppService( ITagManager tagManager, - ITagRepository tagRepository, + ITagRepository tagRepository, IEntityTagRepository entityTagRepository) { TagManager = tagManager; From 7a28a63c3659bf996787a4388dd3147c845d611a Mon Sep 17 00:00:00 2001 From: enisn Date: Tue, 29 Dec 2020 15:31:24 +0300 Subject: [PATCH 116/217] Move TagViewComponent to Public from Common --- .../cms-kit/host/Volo.CmsKit.Web.Unified/Pages/Index.cshtml | 2 +- .../Pages/CmsKit/Shared/Components/Tags/Default.cshtml | 0 .../Pages/CmsKit/Shared/Components/Tags/TagViewComponent.cs | 3 ++- 3 files changed, 3 insertions(+), 2 deletions(-) rename modules/cms-kit/src/{Volo.CmsKit.Common.Web => Volo.CmsKit.Public.Web}/Pages/CmsKit/Shared/Components/Tags/Default.cshtml (100%) rename modules/cms-kit/src/{Volo.CmsKit.Common.Web => Volo.CmsKit.Public.Web}/Pages/CmsKit/Shared/Components/Tags/TagViewComponent.cs (93%) 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 2a768b4b34..12210f01de 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 @@ -8,7 +8,7 @@ @using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Rating @using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.ReactionSelection @using Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.Contents -@using Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.Tags +@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Tags @model IndexModel @inject IStringLocalizer Localizer

CMS Kit DEMO

diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/Default.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Tags/Default.cshtml similarity index 100% rename from modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/Default.cshtml rename to modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Tags/Default.cshtml diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/TagViewComponent.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Tags/TagViewComponent.cs similarity index 93% rename from modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/TagViewComponent.cs rename to modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Tags/TagViewComponent.cs index 9e787c4d4c..44deaad0ed 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Tags/TagViewComponent.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Tags/TagViewComponent.cs @@ -5,9 +5,10 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Volo.Abp.AspNetCore.Mvc; +using Volo.CmsKit.Public.Tags; using Volo.CmsKit.Tags; -namespace Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.Tags +namespace Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Tags { [ViewComponent(Name = "CmsTags")] public class TagViewComponent : AbpViewComponent From 75c30285ae2b4ef147f86d21de334279d1188ce7 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Tue, 29 Dec 2020 15:58:21 +0300 Subject: [PATCH 117/217] Update Page.cs --- .../cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/Page.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/Page.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/Page.cs index 16ec7df3a5..240fc629d6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/Page.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/Page.cs @@ -21,7 +21,7 @@ namespace Volo.CmsKit.Pages } - public Page(Guid id, [NotNull] string title, [NotNull] string url, [CanBeNull] string description, Guid? tenantId = null) : base(id) + public Page(Guid id, [NotNull] string title, [NotNull] string url, [CanBeNull] string description = null, Guid? tenantId = null) : base(id) { Title = Check.NotNullOrWhiteSpace(title, nameof(title), PageConsts.MaxTitleLength); Url = Check.NotNullOrWhiteSpace(url, nameof(url), PageConsts.MaxUrlLength); From ae1f1ae326da4f2a54919c82b93d197f8e352d30 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Tue, 29 Dec 2020 15:58:28 +0300 Subject: [PATCH 118/217] Created PageAdminAppService tests --- .../Pages/PageAdminAppService_Tests.cs | 186 ++++++++++++++++++ 1 file changed, 186 insertions(+) create mode 100644 modules/cms-kit/test/Volo.CmsKit.Application.Tests/Pages/PageAdminAppService_Tests.cs diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Pages/PageAdminAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Pages/PageAdminAppService_Tests.cs new file mode 100644 index 0000000000..f7187fce04 --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Pages/PageAdminAppService_Tests.cs @@ -0,0 +1,186 @@ +using System; +using System.Threading.Tasks; +using Shouldly; +using Volo.Abp.Uow; +using Volo.CmsKit.Admin.Pages; +using Volo.CmsKit.Contents; +using Xunit; + +namespace Volo.CmsKit.Pages +{ + public class PageAdminAppService_Tests : CmsKitApplicationTestBase + { + private readonly CmsKitTestData _data; + private readonly IPageAdminAppService _pageAdminAppService; + + private readonly IPageRepository _pageRepository; + private readonly IContentRepository _contentRepository; + + private readonly IUnitOfWorkManager _uowManager; + + public PageAdminAppService_Tests() + { + _uowManager = GetRequiredService(); + _data = GetRequiredService(); + _pageAdminAppService = GetRequiredService(); + _pageRepository = GetRequiredService(); + _contentRepository = GetRequiredService(); + } + + [Fact] + public async Task ShouldGetAsync() + { + var page = await _pageAdminAppService.GetAsync(_data.Page_1_Id); + + page.Description.ShouldBe(_data.Page_1_Description); + } + + [Fact] + public async Task ShouldCreateAsync() + { + var dto = new CreatePageInputDto + { + Title = "test", + Url = "test-url" + }; + + await Should.NotThrowAsync(async () => await _pageAdminAppService.CreatePageAsync(dto)); + + var page = await _pageRepository.GetByUrlAsync(dto.Url); + + page.Title.ShouldBe(dto.Title); + } + + [Fact] + public async Task ShouldNotCreateAsync() + { + var dto = new CreatePageInputDto + { + Title = "test", + Url = _data.Page_1_Url + }; + + await Should.ThrowAsync(async () => await _pageAdminAppService.CreatePageAsync(dto)); + } + + [Fact] + public async Task ShouldCreateWithContentAsync() + { + var dto = new CreatePageWithContentInputDto + { + Title = "test", + Url = "test-url", + Content = "my-test-content" + }; + + await Should.NotThrowAsync(async () => await _pageAdminAppService.CreatePageWithContentAsync(dto)); + + var page = await _pageRepository.GetByUrlAsync(dto.Url); + + var content = await _contentRepository.GetAsync(nameof(Page), page.Id.ToString()); + + content.Value.ShouldBe(dto.Content); + } + + [Fact] + public async Task ShouldNotCreateWithContentAsync() + { + var dto = new CreatePageWithContentInputDto + { + Title = "test", + Url = _data.Page_1_Url, + Content = "my-test-content" + }; + + await Should.ThrowAsync(async () => await _pageAdminAppService.CreatePageWithContentAsync(dto)); + } + + [Fact] + public async Task ShouldUpdatePageAsync() + { + var dto = new UpdatePageInputDto + { + Title = _data.Page_1_Title + "++", + Description = "new description", + Url = _data.Page_1_Url+ "test" + }; + + await Should.NotThrowAsync(async () => await _pageAdminAppService.UpdatePageAsync(_data.Page_1_Id, dto)); + + var updatedPage = await _pageRepository.GetAsync(_data.Page_1_Id); + + updatedPage.Title.ShouldNotBe(_data.Page_1_Title); + updatedPage.Title.ShouldBe(dto.Title); + + updatedPage.Url.ShouldNotBe(_data.Page_1_Url); + updatedPage.Url.ShouldBe(dto.Url); + + updatedPage.Description.ShouldNotBe(_data.Page_1_Description); + updatedPage.Description.ShouldBe(dto.Description); + } + + [Fact] + public async Task ShouldNotUpdatePageAsync() + { + var dto = new UpdatePageInputDto + { + Title = _data.Page_1_Title + "++", + Description = "new description", + Url = _data.Page_2_Url + }; + + await Should.ThrowAsync(async () => await _pageAdminAppService.UpdatePageAsync(_data.Page_1_Id, dto)); + } + + [Fact] + public async Task ShouldBeExistAsync() + { + var dto = new CheckUrlInputDto + { + Url = _data.Page_1_Url + }; + + var doesExist = await _pageAdminAppService.DoesUrlExistAsync(dto); + + doesExist.ShouldBeTrue(); + } + + [Fact] + public async Task ShouldNotBeExistAsync() + { + var dto = new CheckUrlInputDto + { + Url = _data.Page_1_Url+ "+" + }; + + var doesExist = await _pageAdminAppService.DoesUrlExistAsync(dto); + + doesExist.ShouldBeFalse(); + } + + [Fact] + public async Task ShouldUpdateContentAsync() + { + var dto = new UpdatePageContentInputDto + { + Content = "my-new-content" + }; + + await Should.NotThrowAsync(async () => await _pageAdminAppService.UpdatePageContentAsync(_data.Page_1_Id, dto)); + + var content = await _contentRepository.GetAsync(nameof(Page), _data.Page_1_Id.ToString()); + + content.Value.ShouldBe(dto.Content); + } + + [Fact] + public async Task ShouldDeleteAsync() + { + await _pageAdminAppService.DeleteAsync(_data.Page_1_Id); + + await Should.ThrowAsync(async () => await _pageRepository.GetAsync(_data.Page_1_Id)); + + await Should.ThrowAsync(async () => await _contentRepository.GetAsync(nameof(Page), _data.Page_1_Id.ToString())); + } + } +} \ No newline at end of file From 4c84d19ea9c378403378741a0bb3947748dd3bc9 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Tue, 29 Dec 2020 16:03:19 +0300 Subject: [PATCH 119/217] Created PagePublicAppService tests --- .../Pages/PageAdminAppService_Tests.cs | 3 -- .../Pages/PagePublicAppService_Tests.cs | 32 +++++++++++++++++++ 2 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 modules/cms-kit/test/Volo.CmsKit.Application.Tests/Pages/PagePublicAppService_Tests.cs diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Pages/PageAdminAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Pages/PageAdminAppService_Tests.cs index f7187fce04..59fcc8c8bd 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Pages/PageAdminAppService_Tests.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Pages/PageAdminAppService_Tests.cs @@ -16,11 +16,8 @@ namespace Volo.CmsKit.Pages private readonly IPageRepository _pageRepository; private readonly IContentRepository _contentRepository; - private readonly IUnitOfWorkManager _uowManager; - public PageAdminAppService_Tests() { - _uowManager = GetRequiredService(); _data = GetRequiredService(); _pageAdminAppService = GetRequiredService(); _pageRepository = GetRequiredService(); diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Pages/PagePublicAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Pages/PagePublicAppService_Tests.cs new file mode 100644 index 0000000000..290f02caff --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Pages/PagePublicAppService_Tests.cs @@ -0,0 +1,32 @@ +using System; +using System.Threading.Tasks; +using Shouldly; +using Volo.CmsKit.Public.Pages; +using Xunit; + +namespace Volo.CmsKit.Pages +{ + public class PagePublicAppService_Tests : CmsKitApplicationTestBase + { + private readonly CmsKitTestData _data; + private readonly IPageAppService _pageAppService; + + public PagePublicAppService_Tests() + { + _data = GetRequiredService(); + _pageAppService = GetRequiredService(); + } + + [Fact] + public async Task ShouldGetByUrlAsync() + { + await Should.NotThrowAsync(async () => await _pageAppService.GetByUrlAsync(_data.Page_1_Url)); + } + + [Fact] + public async Task ShouldNotGetByUrlAsync() + { + await Should.ThrowAsync(async () => await _pageAppService.GetByUrlAsync("not-exist-url")); + } + } +} \ No newline at end of file From ab57b8f68a9d4dcfe1f3f334312360b0121a1989 Mon Sep 17 00:00:00 2001 From: enisn Date: Tue, 29 Dec 2020 16:05:58 +0300 Subject: [PATCH 120/217] Add TagAppService Tests --- .../Tags/TagAppService_Tests.cs | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 modules/cms-kit/test/Volo.CmsKit.Application.Tests/Tags/TagAppService_Tests.cs diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Tags/TagAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Tags/TagAppService_Tests.cs new file mode 100644 index 0000000000..35b46b5a04 --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Tags/TagAppService_Tests.cs @@ -0,0 +1,78 @@ +using Microsoft.Extensions.DependencyInjection; +using NSubstitute; +using Shouldly; +using System.Threading.Tasks; +using Volo.Abp.Clients; +using Volo.Abp.Users; +using Volo.Abp.Validation; +using Volo.CmsKit.Public.Tags; +using Xunit; + +namespace Volo.CmsKit.Tags +{ + public class TagAppService_Tests : CmsKitApplicationTestBase + { + private readonly ITagAppService _tagAppService; + private ICurrentUser _currentUser; + private readonly CmsKitTestData _cmsKitTestData; + + public TagAppService_Tests() + { + _tagAppService = GetRequiredService(); + _cmsKitTestData = GetRequiredService(); + } + + protected override void AfterAddApplication(IServiceCollection services) + { + _currentUser = Substitute.For(); + services.AddSingleton(_currentUser); + } + + [Fact] + public async Task GetAllRelatedTagsAsync() + { + var list = await _tagAppService.GetAllRelatedTagsAsync(new GetRelatedTagsInput + { + EntityType = _cmsKitTestData.Content_1_EntityType, + EntityId = _cmsKitTestData.EntityId1 + }); + + list.ShouldNotBeEmpty(); + list.Count.ShouldBe(2); + } + + [Fact] + public async Task ShouldntGet_GetAllRelatedTagsAsync() + { + var list = await _tagAppService.GetAllRelatedTagsAsync(new GetRelatedTagsInput + { + EntityType = "any_other_type", + EntityId = "1" + }); + + list.ShouldBeEmpty(); + } + + [Fact] + public async Task GetRelatedTagsAsync_ShouldThrowValidationException_WithoutEntityType() + { + await Assert.ThrowsAsync(async () => + await _tagAppService.GetAllRelatedTagsAsync(new GetRelatedTagsInput + { + EntityType = null, + EntityId = _cmsKitTestData.EntityId1 + })); + } + + [Fact] + public async Task GetRelatedTagsAsync_ShouldThrowValidationException_WithoutEntityId() + { + await Assert.ThrowsAsync(async () => + await _tagAppService.GetAllRelatedTagsAsync(new GetRelatedTagsInput + { + EntityType = null, + EntityId = _cmsKitTestData.EntityId1 + })); + } + } +} From a2fbd783708b7b7bcb1a8645fe843b0301e527d3 Mon Sep 17 00:00:00 2001 From: enisn Date: Tue, 29 Dec 2020 16:09:55 +0300 Subject: [PATCH 121/217] Move TagController to Public from Common --- .../Volo/CmsKit/Public}/Tags/TagController.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) rename modules/cms-kit/src/{Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers => Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public}/Tags/TagController.cs (76%) diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Tags/TagController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Tags/TagController.cs similarity index 76% rename from modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Tags/TagController.cs rename to modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Tags/TagController.cs index 89f469ef93..307c5a4247 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Tags/TagController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Tags/TagController.cs @@ -1,15 +1,15 @@ -using System.Collections.Generic; +using Microsoft.AspNetCore.Mvc; +using System.Collections.Generic; using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; using Volo.Abp; using Volo.CmsKit.Tags; -namespace Volo.CmsKit.Controllers.Tags +namespace Volo.CmsKit.Public.Tags { [RemoteService(Name = CmsKitCommonRemoteServiceConsts.RemoteServiceName)] [Area("cms-kit")] [Route("api/cms-kit/tags")] - public class TagController : CmsKitControllerBase, ITagAppService + public class TagController : CmsKitPublicControllerBase, ITagAppService { protected readonly ITagAppService TagAppService; From dd20deead487cd1c7327f3cd8ffca0d09951b0a7 Mon Sep 17 00:00:00 2001 From: enisn Date: Tue, 29 Dec 2020 16:12:27 +0300 Subject: [PATCH 122/217] Fix namesapce for TagViewComponent --- .../Pages/CmsKit/Shared/Components/Tags/Default.cshtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 f1dd2008ac..f7c61dbc81 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 @@ -1,4 +1,4 @@ -@using Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.Tags +@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Tags @model TagViewComponent.TagViewModel From f4917c736ba6e469efab7ca6276073c7df339c2e Mon Sep 17 00:00:00 2001 From: Ahmet Date: Tue, 29 Dec 2020 16:21:40 +0300 Subject: [PATCH 123/217] content is placed to inside right project --- .../host/Volo.CmsKit.Web.Unified/Pages/Index.cshtml | 2 +- .../Volo/CmsKit/Admin/Contents/ContentDto.cs | 10 ++++++++++ .../Volo/CmsKit/Admin/Pages/PageWithContentDto.cs | 2 +- .../CmsKit/CmsKitCommonApplicationAutoMapperProfile.cs | 2 -- .../CmsKit/Shared/Components/Contents/Default.cshtml | 7 ------- .../Volo/CmsKit/Public}/Contents/ContentDto.cs | 0 .../Volo/CmsKit/Public}/Contents/GetContentInput.cs | 2 +- .../Volo/CmsKit/Public}/Contents/IContentAppService.cs | 3 ++- .../Volo/CmsKit/Public}/Contents/ContentAppService.cs | 9 +++------ .../Public/PublicApplicationAutoMapperProfile.cs | 4 ++++ .../Volo/CmsKit/Public}/Contents/ContentController.cs | 5 +++-- .../Shared/Components/Contents/ContentViewComponent.cs | 4 ++-- .../CmsKit/Shared/Components/Contents/Default.cshtml | 3 +++ .../CmsKit/Shared/Components/Pages/Default.cshtml | 2 +- 14 files changed, 31 insertions(+), 24 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Contents/ContentDto.cs delete mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/Default.cshtml rename modules/cms-kit/src/{Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit => Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public}/Contents/ContentDto.cs (100%) rename modules/cms-kit/src/{Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit => Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public}/Contents/GetContentInput.cs (77%) rename modules/cms-kit/src/{Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit => Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public}/Contents/IContentAppService.cs (69%) rename modules/cms-kit/src/{Volo.CmsKit.Common.Application/Volo/CmsKit => Volo.CmsKit.Public.Application/Volo/CmsKit/Public}/Contents/ContentAppService.cs (80%) rename modules/cms-kit/src/{Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers => Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public}/Contents/ContentController.cs (85%) rename modules/cms-kit/src/{Volo.CmsKit.Common.Web => Volo.CmsKit.Public.Web}/Pages/CmsKit/Shared/Components/Contents/ContentViewComponent.cs (93%) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Contents/Default.cshtml 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 2a768b4b34..4818533f44 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 @@ -5,9 +5,9 @@ @using Volo.CmsKit.GlobalFeatures @using Volo.CmsKit.Pages @using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Commenting +@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Contents @using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Rating @using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.ReactionSelection -@using Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.Contents @using Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.Tags @model IndexModel @inject IStringLocalizer Localizer diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Contents/ContentDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Contents/ContentDto.cs new file mode 100644 index 0000000000..aa7a4650b1 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Contents/ContentDto.cs @@ -0,0 +1,10 @@ +using System; +using Volo.Abp.Application.Dtos; + +namespace Volo.CmsKit.Admin.Contents +{ + public class ContentDto : EntityDto + { + public string Value { get; set; } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/PageWithContentDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/PageWithContentDto.cs index 2d592c5bba..119dedb041 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/PageWithContentDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/PageWithContentDto.cs @@ -1,6 +1,6 @@ using System; using Volo.Abp.Application.Dtos; -using Volo.CmsKit.Contents; +using Volo.CmsKit.Admin.Contents; namespace Volo.CmsKit.Admin.Pages { diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationAutoMapperProfile.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationAutoMapperProfile.cs index 67242c71de..e5044dc200 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationAutoMapperProfile.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationAutoMapperProfile.cs @@ -9,8 +9,6 @@ namespace Volo.CmsKit { public CmsKitCommonApplicationAutoMapperProfile() { - CreateMap(); - CreateMap(); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/Default.cshtml b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/Default.cshtml deleted file mode 100644 index eb3cde67b3..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/Default.cshtml +++ /dev/null @@ -1,7 +0,0 @@ -@using Microsoft.AspNetCore.Mvc.Localization -@using Volo.CmsKit.Localization -@model Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.Contents.ContentViewComponent.ContentViewModel - -
- @Html.Raw(Model.Rendered) -
diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/ContentDto.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Contents/ContentDto.cs similarity index 100% rename from modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/ContentDto.cs rename to modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Contents/ContentDto.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/GetContentInput.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Contents/GetContentInput.cs similarity index 77% rename from modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/GetContentInput.cs rename to modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Contents/GetContentInput.cs index ab3bafc51f..0dfd9a1636 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/GetContentInput.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Contents/GetContentInput.cs @@ -1,4 +1,4 @@ -namespace Volo.CmsKit.Contents +namespace Volo.CmsKit.Public.Contents { public class GetContentInput { diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Contents/IContentAppService.cs similarity index 69% rename from modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentAppService.cs rename to modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Contents/IContentAppService.cs index fae0bd5271..6f691ceca1 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Contents/IContentAppService.cs @@ -1,6 +1,7 @@ using System.Threading.Tasks; +using Volo.CmsKit.Contents; -namespace Volo.CmsKit.Contents +namespace Volo.CmsKit.Public.Contents { public interface IContentAppService { diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Contents/ContentAppService.cs similarity index 80% rename from modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs rename to modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Contents/ContentAppService.cs index c91478dd6a..94cffea154 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Contents/ContentAppService.cs @@ -1,10 +1,7 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Threading.Tasks; +using Volo.CmsKit.Contents; -namespace Volo.CmsKit.Contents +namespace Volo.CmsKit.Public.Contents { public class ContentAppService : CmsKitAppServiceBase, IContentAppService { diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs index 6da6723829..a45eaff0b2 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs @@ -1,8 +1,10 @@ using AutoMapper; using Volo.Abp.AutoMapper; using Volo.CmsKit.Comments; +using Volo.CmsKit.Contents; using Volo.CmsKit.Pages; using Volo.CmsKit.Public.Comments; +using Volo.CmsKit.Public.Contents; using Volo.CmsKit.Public.Pages; using Volo.CmsKit.Public.Ratings; using Volo.CmsKit.Ratings; @@ -25,6 +27,8 @@ namespace Volo.CmsKit.Public CreateMap(); + CreateMap(); + CreateMap(); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Contents/ContentController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Contents/ContentController.cs similarity index 85% rename from modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Contents/ContentController.cs rename to modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Contents/ContentController.cs index 8e9612b506..f18326a3d0 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo/CmsKit/Controllers/Contents/ContentController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Contents/ContentController.cs @@ -2,13 +2,14 @@ using Microsoft.AspNetCore.Mvc; using Volo.Abp; using Volo.CmsKit.Contents; +using Volo.CmsKit.Controllers; -namespace Volo.CmsKit.Controllers.Contents +namespace Volo.CmsKit.Public.Contents { [RemoteService(Name = CmsKitCommonRemoteServiceConsts.RemoteServiceName)] [Area("cms-kit")] - [Route("api/cms-kit/contents")] + [Route("api/cms-kit-public/contents")] public class ContentController : CmsKitControllerBase, IContentAppService { protected readonly IContentAppService _contentAppService; diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/ContentViewComponent.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Contents/ContentViewComponent.cs similarity index 93% rename from modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/ContentViewComponent.cs rename to modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Contents/ContentViewComponent.cs index 4e7cc98bd9..129bff61cf 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/ContentViewComponent.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Contents/ContentViewComponent.cs @@ -2,10 +2,10 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc; -using Volo.CmsKit.Contents; +using Volo.CmsKit.Public.Contents; using Volo.CmsKit.Web.Contents; -namespace Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.Contents +namespace Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Contents { [ViewComponent(Name = "CmsContent")] public class ContentViewComponent : AbpViewComponent diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Contents/Default.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Contents/Default.cshtml new file mode 100644 index 0000000000..29f7bfa6a3 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Contents/Default.cshtml @@ -0,0 +1,3 @@ +@model Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Contents.ContentViewComponent.ContentViewModel + +@Html.Raw(Model.Rendered) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Pages/Default.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Pages/Default.cshtml index 6691880ad5..1f90458ee7 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Pages/Default.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Pages/Default.cshtml @@ -1,7 +1,7 @@ @addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI.Bootstrap @using Microsoft.AspNetCore.Mvc.RazorPages -@using Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.Contents +@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Contents @model Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Pages.PageViewModel From 10ab7ba0fce07b2ef203b441596b79f3b440dc96 Mon Sep 17 00:00:00 2001 From: Ilkay Ilknur Date: Tue, 29 Dec 2020 16:33:22 +0300 Subject: [PATCH 124/217] pages feature has been added. --- .../GlobalFeatures/GlobalCmsKitFeatures.cs | 5 ++++ .../CmsKit/GlobalFeatures/PagesFeature.cs | 29 +++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/PagesFeature.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/GlobalCmsKitFeatures.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/GlobalCmsKitFeatures.cs index db987784fd..5a7adc34b2 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/GlobalCmsKitFeatures.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/GlobalCmsKitFeatures.cs @@ -15,6 +15,10 @@ namespace Volo.CmsKit.GlobalFeatures public TagsFeature Tags => GetFeature(); + public ContentsFeature Contents => GetFeature(); + + public PagesFeature Pages => GetFeature(); + public GlobalCmsKitFeatures([NotNull] GlobalFeatureManager featureManager) : base(featureManager) { @@ -23,6 +27,7 @@ namespace Volo.CmsKit.GlobalFeatures AddFeature(new RatingsFeature(this)); AddFeature(new TagsFeature(this)); AddFeature(new ContentsFeature(this)); + AddFeature(new PagesFeature(this)); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/PagesFeature.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/PagesFeature.cs new file mode 100644 index 0000000000..c41e217999 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/PagesFeature.cs @@ -0,0 +1,29 @@ +using JetBrains.Annotations; +using Volo.Abp.GlobalFeatures; + +namespace Volo.CmsKit.GlobalFeatures +{ + [GlobalFeatureName(Name)] + public class PagesFeature:GlobalFeature + { + public const string Name = "CmsKit.Pages"; + + internal PagesFeature( + [NotNull] GlobalCmsKitFeatures cmsKit + ) : base(cmsKit) + { + + } + + public override void Enable() + { + var contentsFeature = FeatureManager.Modules.CmsKit().Contents; + if (!contentsFeature.IsEnabled) + { + contentsFeature.Enable(); + } + + base.Enable(); + } + } +} \ No newline at end of file From bd88ef7b0f2f6aacd88bbccd77e331a4da0de799 Mon Sep 17 00:00:00 2001 From: Ilkay Ilknur Date: Tue, 29 Dec 2020 16:33:40 +0300 Subject: [PATCH 125/217] page feature test has been added. --- .../Features/GlobalCmsKitFeatures_Tests.cs | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Features/GlobalCmsKitFeatures_Tests.cs diff --git a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Features/GlobalCmsKitFeatures_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Features/GlobalCmsKitFeatures_Tests.cs new file mode 100644 index 0000000000..97e53daeb8 --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Features/GlobalCmsKitFeatures_Tests.cs @@ -0,0 +1,30 @@ +using Shouldly; +using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.GlobalFeatures; +using Xunit; + +namespace Volo.CmsKit.Features +{ + public class GlobalCmsKitFeatures_Tests : CmsKitDomainTestBase + { + private readonly GlobalCmsKitFeatures _cmsKitFeatures; + + public GlobalCmsKitFeatures_Tests() + { + _cmsKitFeatures = new GlobalCmsKitFeatures(GlobalFeatureManager.Instance); + } + + [Fact] + public void Page_Feature_Should_Enable_Dependent_Features() + { + _cmsKitFeatures.DisableAll(); + _cmsKitFeatures.Contents.IsEnabled.ShouldBeFalse(); + _cmsKitFeatures.Pages.IsEnabled.ShouldBeFalse(); + + _cmsKitFeatures.Pages.Enable(); + + _cmsKitFeatures.Contents.IsEnabled.ShouldBeTrue(); + _cmsKitFeatures.Pages.IsEnabled.ShouldBeTrue(); + } + } +} \ No newline at end of file From cf6652b90d10c1004d890826ca29b6713ccf6579 Mon Sep 17 00:00:00 2001 From: muhammedaltug Date: Tue, 29 Dec 2020 16:50:13 +0300 Subject: [PATCH 126/217] filter and delay added to http wait service resolve #6806 --- .../packages/core/src/lib/core.module.ts | 4 +- .../src/lib/services/http-wait.service.ts | 68 ++++++++++++++++--- .../packages/core/src/lib/utils/http-utils.ts | 4 ++ .../packages/core/src/lib/utils/index.ts | 1 + 4 files changed, 67 insertions(+), 10 deletions(-) create mode 100644 npm/ng-packs/packages/core/src/lib/utils/http-utils.ts diff --git a/npm/ng-packs/packages/core/src/lib/core.module.ts b/npm/ng-packs/packages/core/src/lib/core.module.ts index a661012ac7..54365ecf64 100644 --- a/npm/ng-packs/packages/core/src/lib/core.module.ts +++ b/npm/ng-packs/packages/core/src/lib/core.module.ts @@ -1,5 +1,5 @@ import { CommonModule } from '@angular/common'; -import { HttpClientModule, HttpClientXsrfModule, HTTP_INTERCEPTORS } from '@angular/common/http'; +import { HTTP_INTERCEPTORS, HttpClientModule, HttpClientXsrfModule } from '@angular/common/http'; import { APP_INITIALIZER, Injector, ModuleWithProviders, NgModule } from '@angular/core'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { RouterModule } from '@angular/router'; @@ -30,7 +30,7 @@ import { LocaleProvider } from './providers/locale.provider'; import { LocalizationService } from './services/localization.service'; import { ProfileState } from './states/profile.state'; import { oAuthStorage } from './strategies/auth-flow.strategy'; -import { coreOptionsFactory, CORE_OPTIONS } from './tokens/options.token'; +import { CORE_OPTIONS, coreOptionsFactory } from './tokens/options.token'; import { noop } from './utils/common-utils'; import './utils/date-extensions'; import { getInitialData, localeInitializer } from './utils/initial-utils'; diff --git a/npm/ng-packs/packages/core/src/lib/services/http-wait.service.ts b/npm/ng-packs/packages/core/src/lib/services/http-wait.service.ts index 96427594ae..a74a9bb08d 100644 --- a/npm/ng-packs/packages/core/src/lib/services/http-wait.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/http-wait.service.ts @@ -1,27 +1,40 @@ import { Injectable } from '@angular/core'; import { HttpRequest } from '@angular/common/http'; import { InternalStore } from '../utils/internal-store-utils'; +import { getPathName } from '../utils/http-utils'; +import { debounceTime, tap } from 'rxjs/operators'; export interface HttpWaitState { requests: Set>; + filteredRequests: Array; + delay: number; +} +export interface HttpRequestInfo { + method: string; + endpoint: string; } - @Injectable({ providedIn: 'root', }) export class HttpWaitService { - protected store = new InternalStore({ requests: new Set() }); + protected store = new InternalStore({ + requests: new Set(), + filteredRequests: [], + delay: 0, + }); getLoading() { - return !!this.store.state.requests.size; + return !!this.applyFilter(this.store.state.requests).length; } getLoading$() { - return this.store.sliceState(({ requests }) => !!requests.size); + return this.store + .sliceState(({ requests }) => !!this.applyFilter(requests).length) + .pipe(this.debounceWhenLoading()); } updateLoading$() { - return this.store.sliceUpdate(({ requests }) => !!requests.size); + return this.store.sliceUpdate(({ requests }) => !!this.applyFilter(requests).length); } clearLoading() { @@ -29,16 +42,55 @@ export class HttpWaitService { } addRequest(request: HttpRequest) { - const requests = this.store.state.requests; + let { requests } = this.store.state; + requests = new Set(requests.values()); requests.add(request); this.store.patch({ requests }); } deleteRequest(request: HttpRequest) { - const requests = this.store.state.requests; + const { requests } = this.store.state; requests.delete(request); this.store.patch({ requests }); } - // TODO: Add filter function + addFilter(request: HttpRequestInfo) { + const filteredRequests = [ + ...this.store.state.filteredRequests.filter(f => !this.isSameRequest(f, request)), + request, + ]; + this.store.patch({ filteredRequests }); + } + + removeFilter(request: HttpRequestInfo) { + const filteredRequests = this.store.state.filteredRequests.filter( + f => !this.isSameRequest(f, request), + ); + this.store.patch({ filteredRequests }); + } + + setDelay(delay: number) { + this.store.patch({ delay }); + } + + private applyFilter(requests: Set>) { + const { filteredRequests } = this.store.state; + return Array.from(requests).filter( + ({ method, url }) => + !filteredRequests.find(filteredRequest => + this.isSameRequest(filteredRequest, { method, endpoint: getPathName(url) }), + ), + ); + } + + private isSameRequest(filteredRequest: HttpRequestInfo, request: HttpRequestInfo) { + const { method, endpoint } = filteredRequest; + return endpoint === request.endpoint && method === request.method; + } + + private debounceWhenLoading() { + return this.store.state.delay && !!this.applyFilter(this.store.state.requests).length + ? debounceTime(this.store.state.delay) + : tap(); + } } diff --git a/npm/ng-packs/packages/core/src/lib/utils/http-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/http-utils.ts new file mode 100644 index 0000000000..50259ec294 --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/utils/http-utils.ts @@ -0,0 +1,4 @@ +export function getPathName(url: string): string { + const { pathname } = new URL(url); + return pathname; +} diff --git a/npm/ng-packs/packages/core/src/lib/utils/index.ts b/npm/ng-packs/packages/core/src/lib/utils/index.ts index 2d7ef8eab4..d50fa7712f 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/index.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/index.ts @@ -6,6 +6,7 @@ export * from './factory-utils'; export * from './file-utils'; export * from './form-utils'; export * from './generator-utils'; +export * from './http-utils'; export * from './initial-utils'; export * from './internal-store-utils'; export * from './lazy-load-utils'; From 2103cb339cae5671a1f6fb2f9813718eb22e842f Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 29 Dec 2020 22:04:42 +0300 Subject: [PATCH 127/217] improve DeepPartial utility type --- .../packages/core/src/lib/models/utility.ts | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/models/utility.ts b/npm/ng-packs/packages/core/src/lib/models/utility.ts index 6d9b44ceb6..a8ff45e319 100644 --- a/npm/ng-packs/packages/core/src/lib/models/utility.ts +++ b/npm/ng-packs/packages/core/src/lib/models/utility.ts @@ -1,8 +1,21 @@ +/* tslint:disable:ban-types */ import { TemplateRef, Type } from '@angular/core'; -export type DeepPartial = { - [P in keyof T]?: T[P] extends Record ? DeepPartial : T[P]; -}; +export type DeepPartial = Partible extends never + ? T + : { + [K in keyof T]?: DeepPartial; + }; + +type Partible = T extends Primitive | Array + ? never + : { + [K in keyof T]: T[K] extends Function ? never : T[K]; + } extends T + ? T + : never; + +export type Primitive = undefined | null | boolean | string | number | bigint | symbol; export type InferredInstanceOf = T extends Type ? U : never; export type InferredContextOf = T extends TemplateRef ? U : never; From e7edc905c352e4d0cf763b7602fec3755ee53829 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 29 Dec 2020 22:09:02 +0300 Subject: [PATCH 128/217] assert generic state to deep partial state --- .../packages/core/src/lib/utils/internal-store-utils.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/utils/internal-store-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/internal-store-utils.ts index 924c48d988..27a8e9cbcf 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/internal-store-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/internal-store-utils.ts @@ -19,7 +19,7 @@ export class InternalStore { ) => this.state$.pipe(map(selector), distinctUntilChanged(compareFn)); sliceUpdate = ( - selector: (state: State) => Slice, + selector: (state: DeepPartial) => Slice, filterFn = (x: Slice) => x !== undefined, ) => this.update$.pipe(map(selector), filter(filterFn)); @@ -33,7 +33,7 @@ export class InternalStore { } this.state$.next(patchedState); - this.update$.next(patchedState); + this.update$.next(patchedState as DeepPartial); } deepPatch(state: DeepPartial) { @@ -43,7 +43,7 @@ export class InternalStore { set(state: State) { this.state$.next(state); - this.update$.next(state); + this.update$.next(state as DeepPartial); } reset() { From 5531e827f04a83871b725eb55363b044047f104a Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 30 Dec 2020 14:13:49 +0800 Subject: [PATCH 129/217] Make ContainerName nullable --- .../Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs | 10 +++++----- .../Aliyun/AliyunBlobProviderConfiguration.cs | 2 +- .../BlobStoring/Aws/AwsBlobProviderConfiguration.cs | 2 +- .../Azure/AzureBlobProviderConfiguration.cs | 2 +- .../Minio/MinioBlobProviderConfiguration.cs | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs b/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs index aa0fecaf09..d6c9303afd 100644 --- a/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs +++ b/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs @@ -37,7 +37,7 @@ namespace Volo.Abp.BlobStoring.Aliyun var blobName = AliyunBlobNameCalculator.Calculate(args); var aliyunConfig = args.Configuration.GetAliyunConfiguration(); var ossClient = GetOssClient(aliyunConfig); - if (!args.OverrideExisting && BlobExistsAsync(ossClient, containerName, blobName)) + if (!args.OverrideExisting && BlobExists(ossClient, containerName, blobName)) { throw new BlobAlreadyExistsException($"Saving BLOB '{args.BlobName}' does already exists in the container '{containerName}'! Set {nameof(args.OverrideExisting)} if it should be overwritten."); } @@ -57,7 +57,7 @@ namespace Volo.Abp.BlobStoring.Aliyun var containerName = GetContainerName(args); var blobName = AliyunBlobNameCalculator.Calculate(args); var ossClient = GetOssClient(args.Configuration); - if(!BlobExistsAsync(ossClient, containerName, blobName)) + if(!BlobExists(ossClient, containerName, blobName)) { return Task.FromResult(false); } @@ -70,7 +70,7 @@ namespace Volo.Abp.BlobStoring.Aliyun var containerName = GetContainerName(args); var blobName = AliyunBlobNameCalculator.Calculate(args); var ossClient = GetOssClient(args.Configuration); - return Task.FromResult(BlobExistsAsync(ossClient, containerName, blobName)); + return Task.FromResult(BlobExists(ossClient, containerName, blobName)); } public async override Task GetOrNullAsync(BlobProviderGetArgs args) @@ -78,7 +78,7 @@ namespace Volo.Abp.BlobStoring.Aliyun var containerName = GetContainerName(args); var blobName = AliyunBlobNameCalculator.Calculate(args); var ossClient = GetOssClient(args.Configuration); - if (!BlobExistsAsync(ossClient, containerName, blobName)) + if (!BlobExists(ossClient, containerName, blobName)) { return null; } @@ -96,7 +96,7 @@ namespace Volo.Abp.BlobStoring.Aliyun : configuration.ContainerName; } - private bool BlobExistsAsync(IOss ossClient,string containerName, string blobName) + private bool BlobExists(IOss ossClient,string containerName, string blobName) { // Make sure Blob Container exists. return ossClient.DoesBucketExist(containerName) && diff --git a/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProviderConfiguration.cs b/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProviderConfiguration.cs index 757ad4b54c..276cbd8fc7 100644 --- a/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProviderConfiguration.cs +++ b/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProviderConfiguration.cs @@ -81,7 +81,7 @@ namespace Volo.Abp.BlobStoring.Aliyun ///
public string ContainerName { - get => _containerConfiguration.GetConfiguration(AliyunBlobProviderConfigurationNames.ContainerName); + get => _containerConfiguration.GetConfigurationOrDefault(AliyunBlobProviderConfigurationNames.ContainerName); set => _containerConfiguration.SetConfiguration(AliyunBlobProviderConfigurationNames.ContainerName, Check.NotNullOrWhiteSpace(value, nameof(value))); } diff --git a/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProviderConfiguration.cs b/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProviderConfiguration.cs index c2d3297f4e..2be373e428 100644 --- a/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProviderConfiguration.cs +++ b/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProviderConfiguration.cs @@ -81,7 +81,7 @@ namespace Volo.Abp.BlobStoring.Aws ///
public string ContainerName { - get => _containerConfiguration.GetConfiguration(AwsBlobProviderConfigurationNames.ContainerName); + get => _containerConfiguration.GetConfigurationOrDefault(AwsBlobProviderConfigurationNames.ContainerName); set => _containerConfiguration.SetConfiguration(AwsBlobProviderConfigurationNames.ContainerName, Check.NotNullOrWhiteSpace(value, nameof(value))); } diff --git a/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProviderConfiguration.cs b/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProviderConfiguration.cs index 7ab338794b..969057d7d6 100644 --- a/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProviderConfiguration.cs +++ b/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProviderConfiguration.cs @@ -16,7 +16,7 @@ ///
public string ContainerName { - get => _containerConfiguration.GetConfiguration(AzureBlobProviderConfigurationNames.ContainerName); + get => _containerConfiguration.GetConfigurationOrDefault(AzureBlobProviderConfigurationNames.ContainerName); set => _containerConfiguration.SetConfiguration(AzureBlobProviderConfigurationNames.ContainerName, Check.NotNullOrWhiteSpace(value, nameof(value))); } diff --git a/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProviderConfiguration.cs b/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProviderConfiguration.cs index 63b0132d20..395aa76a72 100644 --- a/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProviderConfiguration.cs +++ b/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProviderConfiguration.cs @@ -4,7 +4,7 @@ { public string BucketName { - get => _containerConfiguration.GetConfiguration(MinioBlobProviderConfigurationNames.BucketName); + get => _containerConfiguration.GetConfigurationOrDefault(MinioBlobProviderConfigurationNames.BucketName); set => _containerConfiguration.SetConfiguration(MinioBlobProviderConfigurationNames.BucketName, Check.NotNullOrWhiteSpace(value, nameof(value))); } @@ -42,7 +42,7 @@ { get => _containerConfiguration.GetConfigurationOrDefault(MinioBlobProviderConfigurationNames.WithSSL, false); set => _containerConfiguration.SetConfiguration(MinioBlobProviderConfigurationNames.WithSSL, value); - } + } /// ///Default value: false. From 1e2934125b7eb80f3864d072181c363700eb49f5 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Wed, 30 Dec 2020 11:58:21 +0300 Subject: [PATCH 130/217] add clearPage test utility function --- .../core/testing/src/lib/utils/clear-page.util.ts | 10 ++++++++++ .../packages/core/testing/src/lib/utils/index.ts | 1 + npm/ng-packs/packages/core/testing/src/public-api.ts | 1 + 3 files changed, 12 insertions(+) create mode 100644 npm/ng-packs/packages/core/testing/src/lib/utils/clear-page.util.ts create mode 100644 npm/ng-packs/packages/core/testing/src/lib/utils/index.ts diff --git a/npm/ng-packs/packages/core/testing/src/lib/utils/clear-page.util.ts b/npm/ng-packs/packages/core/testing/src/lib/utils/clear-page.util.ts new file mode 100644 index 0000000000..3570d25f2d --- /dev/null +++ b/npm/ng-packs/packages/core/testing/src/lib/utils/clear-page.util.ts @@ -0,0 +1,10 @@ +import { ComponentFixture } from '@angular/core/testing'; + +export function clearPage(_fixture: ComponentFixture) { + if (!document) return; + + const elements = document.querySelectorAll('body > *'); + elements.forEach(element => { + if (/^(abp|ngb)-/i.test(element.tagName)) document.body.removeChild(element); + }); +} diff --git a/npm/ng-packs/packages/core/testing/src/lib/utils/index.ts b/npm/ng-packs/packages/core/testing/src/lib/utils/index.ts new file mode 100644 index 0000000000..3586e1279b --- /dev/null +++ b/npm/ng-packs/packages/core/testing/src/lib/utils/index.ts @@ -0,0 +1 @@ +export * from './clear-page.util'; diff --git a/npm/ng-packs/packages/core/testing/src/public-api.ts b/npm/ng-packs/packages/core/testing/src/public-api.ts index bf95ae9ece..657f628e28 100644 --- a/npm/ng-packs/packages/core/testing/src/public-api.ts +++ b/npm/ng-packs/packages/core/testing/src/public-api.ts @@ -1,2 +1,3 @@ export * from './lib/core-testing.module'; export * from './lib/services'; +export * from './lib/utils'; From 99e54a80808efc45dc2e9c6a1644e721996aba9b Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Wed, 30 Dec 2020 12:03:22 +0300 Subject: [PATCH 131/217] add wait test utility function --- npm/ng-packs/packages/core/testing/src/lib/utils/index.ts | 1 + .../packages/core/testing/src/lib/utils/wait.util.ts | 6 ++++++ 2 files changed, 7 insertions(+) create mode 100644 npm/ng-packs/packages/core/testing/src/lib/utils/wait.util.ts diff --git a/npm/ng-packs/packages/core/testing/src/lib/utils/index.ts b/npm/ng-packs/packages/core/testing/src/lib/utils/index.ts index 3586e1279b..3de5c9748e 100644 --- a/npm/ng-packs/packages/core/testing/src/lib/utils/index.ts +++ b/npm/ng-packs/packages/core/testing/src/lib/utils/index.ts @@ -1 +1,2 @@ export * from './clear-page.util'; +export * from './wait.util'; diff --git a/npm/ng-packs/packages/core/testing/src/lib/utils/wait.util.ts b/npm/ng-packs/packages/core/testing/src/lib/utils/wait.util.ts new file mode 100644 index 0000000000..9bd6b4435f --- /dev/null +++ b/npm/ng-packs/packages/core/testing/src/lib/utils/wait.util.ts @@ -0,0 +1,6 @@ +import { ComponentFixture } from '@angular/core/testing'; + +export function wait(fixture: ComponentFixture, timeout = 0) { + fixture.detectChanges(); + return new Promise(res => setTimeout(res, timeout)); +} From 1872fd28f9a2e38f01c05045546825334fce3b15 Mon Sep 17 00:00:00 2001 From: Ilkay Ilknur Date: Wed, 30 Dec 2020 12:04:48 +0300 Subject: [PATCH 132/217] code refactorings requested at code review session. --- ...s.cs => CmsKitAdminRemoteServiceConsts.cs} | 0 .../Permissions/CmsKitAdminPermissions.cs | 5 ---- .../CmsKit/Admin/Tags/TagAdminAppService.cs | 12 ++++++---- .../Volo/CmsKit/Tags/TagManager.cs | 23 ++++++++++--------- 4 files changed, 19 insertions(+), 21 deletions(-) rename modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/{CmsKitPublicRemoteServiceConsts.cs => CmsKitAdminRemoteServiceConsts.cs} (100%) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/CmsKitPublicRemoteServiceConsts.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/CmsKitAdminRemoteServiceConsts.cs similarity index 100% rename from modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/CmsKitPublicRemoteServiceConsts.cs rename to modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/CmsKitAdminRemoteServiceConsts.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs index 1cdf0291ef..26daeb0b01 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs @@ -12,10 +12,5 @@ namespace Volo.CmsKit.Permissions public const string Update = Default + ".Update"; public const string Delete = Default + ".Delete"; } - - public static string[] GetAll() - { - return ReflectionHelper.GetPublicConstantsRecursively(typeof(CmsKitAdminPermissions)); - } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/TagAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/TagAdminAppService.cs index 382e14b688..cda45c23de 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/TagAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/TagAdminAppService.cs @@ -12,6 +12,7 @@ using Volo.CmsKit.Tags; namespace Volo.CmsKit.Admin.Tags { + [Authorize(CmsKitAdminPermissions.Tags.Default)] public class TagAdminAppService : CrudAppService< Tag, @@ -40,28 +41,29 @@ namespace Volo.CmsKit.Admin.Tags [Authorize(CmsKitAdminPermissions.Tags.Create)] public override async Task CreateAsync(TagCreateDto input) { - var inserted = await TagManager.InsertAsync( + var tag = await TagManager.InsertAsync( GuidGenerator.Create(), input.EntityType, input.Name, CurrentTenant?.Id); - return MapToGetOutputDto(inserted); + + return MapToGetOutputDto(tag); } [Authorize(CmsKitAdminPermissions.Tags.Update)] public override async Task UpdateAsync(Guid id, TagUpdateDto input) { - var updated = await TagManager.UpdateAsync( + var tag = await TagManager.UpdateAsync( id, input.Name); - return MapToGetOutputDto(updated); + return MapToGetOutputDto(tag); } protected override IQueryable CreateFilteredQuery(TagGetListInput input) { return base.CreateFilteredQuery(input) .WhereIf( - !string.IsNullOrEmpty(input.Filter), + !input.Filter.IsNullOrEmpty(), x => x.Name.ToLower().Contains(input.Filter) || x.EntityType.ToLower().Contains(input.Filter)); diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs index 2dc1f0b28c..e1e9366a99 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs @@ -45,12 +45,12 @@ namespace Volo.CmsKit.Tags } return await _tagRepository.InsertAsync( - new Tag( - id, - entityType, - name, - tenantId), - cancellationToken: cancellationToken); + new Tag( + id, + entityType, + name, + tenantId), + cancellationToken: cancellationToken); } public async Task UpdateAsync( @@ -59,15 +59,16 @@ namespace Volo.CmsKit.Tags CancellationToken cancellationToken = default) { var entity = await _tagRepository.GetAsync(id, cancellationToken: cancellationToken); - - if (name != entity.Name && await _tagRepository.AnyAsync(entity.EntityType, name, entity.TenantId, cancellationToken)) + + if (name != entity.Name && + await _tagRepository.AnyAsync(entity.EntityType, name, entity.TenantId, cancellationToken)) { throw new BusinessException(message: "Tag already exist!"); // Already Exist } entity.SetName(name); - - return await _tagRepository.UpdateAsync(entity); + + return await _tagRepository.UpdateAsync(entity, cancellationToken: cancellationToken); } } -} +} \ No newline at end of file From 7f6534bcb0beebfd951248ab1cecf66793472cfa Mon Sep 17 00:00:00 2001 From: enisn Date: Wed, 30 Dec 2020 14:40:09 +0300 Subject: [PATCH 133/217] CmsKit - Add DynamicMaxLength to TagDtos --- .../Volo/CmsKit/Admin/Tags/TagCreateDto.cs | 5 +++++ .../Volo/CmsKit/Admin/Tags/TagUpdateDto.cs | 3 +++ 2 files changed, 8 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagCreateDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagCreateDto.cs index 3eb75bec07..6dd90d1362 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagCreateDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagCreateDto.cs @@ -1,12 +1,17 @@ using System.ComponentModel.DataAnnotations; +using Volo.Abp.Validation; +using Volo.CmsKit.Tags; namespace Volo.CmsKit.Admin.Tags { public class TagCreateDto { [Required] + [DynamicMaxLength(typeof(TagConsts), nameof(TagConsts.MaxEntityTypeLength))] public string EntityType { get; set; } + [Required] + [DynamicMaxLength(typeof(TagConsts), nameof(TagConsts.MaxNameLength))] public string Name { get; set; } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagUpdateDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagUpdateDto.cs index 4df242a997..c4298b7730 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagUpdateDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/TagUpdateDto.cs @@ -1,10 +1,13 @@ using System.ComponentModel.DataAnnotations; +using Volo.Abp.Validation; +using Volo.CmsKit.Tags; namespace Volo.CmsKit.Admin.Tags { public class TagUpdateDto { [Required] + [DynamicMaxLength(typeof(TagConsts), nameof(TagConsts.MaxNameLength))] public string Name { get; set; } } } From 1f58e9db362ba08af0ed921d8e8591811787ff08 Mon Sep 17 00:00:00 2001 From: enisn Date: Wed, 30 Dec 2020 15:07:44 +0300 Subject: [PATCH 134/217] CmsKit - Seperate TagAppServices as Admin & Public --- .../Tags/TagAdminAppService_Tests.cs | 56 +++++++++++++++++++ ..._Tests.cs => TagPublicAppService_Tests.cs} | 4 +- 2 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 modules/cms-kit/test/Volo.CmsKit.Application.Tests/Tags/TagAdminAppService_Tests.cs rename modules/cms-kit/test/Volo.CmsKit.Application.Tests/Tags/{TagAppService_Tests.cs => TagPublicAppService_Tests.cs} (95%) diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Tags/TagAdminAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Tags/TagAdminAppService_Tests.cs new file mode 100644 index 0000000000..237434ef9f --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Tags/TagAdminAppService_Tests.cs @@ -0,0 +1,56 @@ +using Microsoft.Extensions.DependencyInjection; +using NSubstitute; +using Shouldly; +using System; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Clients; +using Volo.Abp.Users; +using Volo.Abp.Validation; +using Volo.CmsKit.Admin.Tags; +using Volo.CmsKit.Public.Tags; +using Xunit; + +namespace Volo.CmsKit.Tags +{ + public class TagAdminAppService_Tests : CmsKitApplicationTestBase + { + private readonly ITagAdminAppService _tagAdminAppService; + private ICurrentUser _currentUser; + private readonly CmsKitTestData _cmsKitTestData; + + public TagAdminAppService_Tests() + { + _tagAdminAppService = GetRequiredService(); + _cmsKitTestData = GetRequiredService(); + } + + protected override void AfterAddApplication(IServiceCollection services) + { + _currentUser = Substitute.For(); + services.AddSingleton(_currentUser); + } + + [Fact] + public async Task ShouldCreateProperly() + { + var list = await _tagAdminAppService.CreateAsync(new TagCreateDto + { + EntityType = "any_new_type", + Name = "1", + }); + + list.Id.ShouldNotBe(Guid.Empty); + } + + [Fact] + public async Task ShouldThrowException_WhenTagAlreadyExist() + { + await Should.ThrowAsync(async () => await _tagAdminAppService.CreateAsync(new TagCreateDto + { + EntityType = _cmsKitTestData.Content_1_EntityType, + Name = _cmsKitTestData.Content_1_Tags[0], + })); + } + } +} diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Tags/TagAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Tags/TagPublicAppService_Tests.cs similarity index 95% rename from modules/cms-kit/test/Volo.CmsKit.Application.Tests/Tags/TagAppService_Tests.cs rename to modules/cms-kit/test/Volo.CmsKit.Application.Tests/Tags/TagPublicAppService_Tests.cs index 35b46b5a04..6ad1136167 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Tags/TagAppService_Tests.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Tags/TagPublicAppService_Tests.cs @@ -10,13 +10,13 @@ using Xunit; namespace Volo.CmsKit.Tags { - public class TagAppService_Tests : CmsKitApplicationTestBase + public class TagPublicAppService_Tests : CmsKitApplicationTestBase { private readonly ITagAppService _tagAppService; private ICurrentUser _currentUser; private readonly CmsKitTestData _cmsKitTestData; - public TagAppService_Tests() + public TagPublicAppService_Tests() { _tagAppService = GetRequiredService(); _cmsKitTestData = GetRequiredService(); From bf6b37f3e96d85a2d5b14da69f2e5f3a1db493f6 Mon Sep 17 00:00:00 2001 From: enisn Date: Wed, 30 Dec 2020 15:15:01 +0300 Subject: [PATCH 135/217] CmsKit - Add TagAlreadyExistException --- .../Volo/CmsKit/CmsKitErrorCodes.cs | 2 +- .../CmsKit/Tags/TagAlreadyExistException.cs | 17 +++++++++++++++++ .../Volo/CmsKit/Tags/TagManager.cs | 4 ++-- .../Tags/TagAdminAppService_Tests.cs | 6 +----- 4 files changed, 21 insertions(+), 8 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagAlreadyExistException.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/CmsKitErrorCodes.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/CmsKitErrorCodes.cs index 336d163cfe..76ba39c3f2 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/CmsKitErrorCodes.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/CmsKitErrorCodes.cs @@ -2,6 +2,6 @@ { public static class CmsKitErrorCodes { - //Add your business exception error codes here... + public const string TagAlreadyExist = "CmsKit:0001"; } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagAlreadyExistException.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagAlreadyExistException.cs new file mode 100644 index 0000000000..6cae0dde92 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagAlreadyExistException.cs @@ -0,0 +1,17 @@ +using JetBrains.Annotations; +using System; +using Volo.Abp; + +namespace Volo.CmsKit.Tags +{ + [Serializable] + public class TagAlreadyExistException : BusinessException + { + public TagAlreadyExistException([NotNull] string entityType, [NotNull] string name) + { + Code = CmsKitErrorCodes.TagAlreadyExist; + WithData(nameof(Tag.EntityType), entityType); + WithData(nameof(Tag.Name), name); + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs index e1e9366a99..042b4e27a9 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagManager.cs @@ -41,7 +41,7 @@ namespace Volo.CmsKit.Tags { if (await _tagRepository.AnyAsync(entityType, name, tenantId, cancellationToken)) { - throw new BusinessException(message: "Tag already exist!"); // Already Exist + throw new TagAlreadyExistException(entityType, name); } return await _tagRepository.InsertAsync( @@ -63,7 +63,7 @@ namespace Volo.CmsKit.Tags if (name != entity.Name && await _tagRepository.AnyAsync(entity.EntityType, name, entity.TenantId, cancellationToken)) { - throw new BusinessException(message: "Tag already exist!"); // Already Exist + throw new TagAlreadyExistException(entity.EntityType, name); } entity.SetName(name); diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Tags/TagAdminAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Tags/TagAdminAppService_Tests.cs index 237434ef9f..4ad0d43468 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Tags/TagAdminAppService_Tests.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Tags/TagAdminAppService_Tests.cs @@ -3,12 +3,8 @@ using NSubstitute; using Shouldly; using System; using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.Clients; using Volo.Abp.Users; -using Volo.Abp.Validation; using Volo.CmsKit.Admin.Tags; -using Volo.CmsKit.Public.Tags; using Xunit; namespace Volo.CmsKit.Tags @@ -46,7 +42,7 @@ namespace Volo.CmsKit.Tags [Fact] public async Task ShouldThrowException_WhenTagAlreadyExist() { - await Should.ThrowAsync(async () => await _tagAdminAppService.CreateAsync(new TagCreateDto + await Should.ThrowAsync(async () => await _tagAdminAppService.CreateAsync(new TagCreateDto { EntityType = _cmsKitTestData.Content_1_EntityType, Name = _cmsKitTestData.Content_1_Tags[0], From b6cb2860e3832ae884f87f88d4b56979266915e7 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 30 Dec 2020 20:50:11 +0800 Subject: [PATCH 136/217] Fix MapperAccessor problem. --- .../Abp/AutoMapper/AbpAutoMapperModule.cs | 15 ++- .../AutoMapper_Dependency_Injection_Tests.cs | 111 ++++++++++++++++++ .../AutoMapper_MapperAction_Tests.cs | 87 -------------- 3 files changed, 118 insertions(+), 95 deletions(-) create mode 100644 framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_Dependency_Injection_Tests.cs delete mode 100644 framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_MapperAction_Tests.cs diff --git a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs index 479173b72d..25707e3899 100644 --- a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs +++ b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs @@ -25,12 +25,11 @@ namespace Volo.Abp.AutoMapper { context.Services.AddAutoMapperObjectMapper(); - var mapperAccessor = new MapperAccessor(); - context.Services.AddSingleton(_ => mapperAccessor); - context.Services.Add(new ServiceDescriptor(typeof(IMapperAccessor), CreateMappings, ServiceLifetime.Singleton)); + context.Services.AddSingleton(provider => CreateMappings(provider)); + context.Services.AddSingleton(provider => provider.GetRequiredService()); } - private IMapperAccessor CreateMappings(IServiceProvider serviceProvider) + private MapperAccessor CreateMappings(IServiceProvider serviceProvider) { using (var scope = serviceProvider.CreateScope()) { @@ -59,10 +58,10 @@ namespace Volo.Abp.AutoMapper ValidateAll(mapperConfiguration); - var mapperAccessor = scope.ServiceProvider.GetRequiredService(); - mapperAccessor.Mapper = new Mapper(mapperConfiguration, serviceProvider.GetService); - - return mapperAccessor; + return new MapperAccessor + { + Mapper = new Mapper(mapperConfiguration, serviceProvider.GetService) + }; } } } diff --git a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_Dependency_Injection_Tests.cs b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_Dependency_Injection_Tests.cs new file mode 100644 index 0000000000..891ef0ddbb --- /dev/null +++ b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_Dependency_Injection_Tests.cs @@ -0,0 +1,111 @@ +using AutoMapper; +using Shouldly; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Testing; +using Xunit; +using IObjectMapper = Volo.Abp.ObjectMapping.IObjectMapper; + +namespace Volo.Abp.AutoMapper +{ + public class AutoMapper_Dependency_Injection_Tests : AbpIntegratedTest + { + private readonly IObjectMapper _objectMapper; + + public AutoMapper_Dependency_Injection_Tests() + { + _objectMapper = GetRequiredService(); + } + + [Fact] + public void Should_Registered_AutoMapper_Service() + { + GetService>().ShouldBeNull(); + GetService>().ShouldBeNull(); + GetService>().ShouldBeNull(); + GetService>().ShouldBeNull(); + GetService>().ShouldBeNull(); + } + + [Fact] + public void Custom_MappingAction_Test() + { + var sourceModel = new SourceModel + { + Name = "Source" + }; + + _objectMapper.Map(sourceModel).Name.ShouldBe(GetRequiredService().Name); + } + + public class SourceModel + { + public string Name { get; set; } + } + + public class DestModel + { + public string Name { get; set; } + } + + public class TestService : + IValueResolver, + IMemberValueResolver, + ITypeConverter, + IValueConverter, + IMappingAction + { + public string Resolve(string source, string destination, string destMember, ResolutionContext context) + { + return source; + } + + public string Resolve(string source, string destination, string sourceMember, string destMember, ResolutionContext context) + { + return source; + } + + public string Convert(string source, string destination, ResolutionContext context) + { + return source; + } + + public string Convert(string sourceMember, ResolutionContext context) + { + return sourceMember; + } + + public void Process(string source, string destination, ResolutionContext context) + { + + } + } + + public class MapperActionProfile : Profile + { + public MapperActionProfile() + { + CreateMap().AfterMap(); + } + } + + public class CustomMappingAction : IMappingAction + { + private readonly TestNameService _testNameService; + + public CustomMappingAction(TestNameService testNameService) + { + _testNameService = testNameService; + } + + public void Process(SourceModel source, DestModel destination, ResolutionContext context) + { + destination.Name = _testNameService.Name; + } + } + + public class TestNameService : ITransientDependency + { + public string Name => nameof(TestNameService); + } + } +} diff --git a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_MapperAction_Tests.cs b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_MapperAction_Tests.cs deleted file mode 100644 index aa1324927a..0000000000 --- a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_MapperAction_Tests.cs +++ /dev/null @@ -1,87 +0,0 @@ -using AutoMapper; -using Microsoft.Extensions.DependencyInjection; -using Shouldly; -using Volo.Abp.DependencyInjection; -using Volo.Abp.Testing; -using Xunit; -using IObjectMapper = Volo.Abp.ObjectMapping.IObjectMapper; - -namespace Volo.Abp.AutoMapper -{ - public class AutoMapper_MapperAction_Tests : AbpIntegratedTest - { - private readonly IObjectMapper _objectMapper; - - public AutoMapper_MapperAction_Tests() - { - _objectMapper = ServiceProvider.GetRequiredService(); - } - - [Fact] - public void Should_Name_DIMappingAction() - { - var mapperActionEntity = new MapperActionModel {Name = "MapperActionEntity"}; - _objectMapper.Map(mapperActionEntity) - .Name.ShouldBe(nameof(DIMappingAction)); - } - - [Fact] - public void Should_Name_NotDIMappingAction() - { - var mapperActionEntity = new MapperActionModel2 {Name = "MapperActionEntity"}; - _objectMapper.Map(mapperActionEntity) - .Name.ShouldBe(nameof(NotDIMapperAction)); - } - - public class MapperActionModel - { - public string Name { get; set; } - } - - public class MapperActionModel2 - { - public string Name { get; set; } - } - - public class MapperActionProfile : Profile - { - public MapperActionProfile() - { - CreateMap().AfterMap(); - CreateMap().AfterMap(); - } - } - - public class DIMappingAction : IMappingAction - { - private readonly MapperActionService _mapperActionService; - - public DIMappingAction(MapperActionService mapperActionService) - { - _mapperActionService = mapperActionService; - } - - public void Process(MapperActionModel source, MapperActionModel2 destination, ResolutionContext context) - { - destination.Name = _mapperActionService.GetName(); - } - } - - public class NotDIMapperAction : IMappingAction - { - public void Process(MapperActionModel2 source, MapperActionModel destination, - ResolutionContext context) - { - destination.Name = nameof(NotDIMapperAction); - } - } - - public class MapperActionService : ITransientDependency - { - public string GetName() - { - return nameof(DIMappingAction); - } - } - } -} From 0e11d9762843e3ec32fbdbf4c2cb9bf3246ed77f Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 29 Dec 2020 17:35:16 +0300 Subject: [PATCH 137/217] chore: add registry option to publish script --- npm/ng-packs/scripts/publish.ts | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/npm/ng-packs/scripts/publish.ts b/npm/ng-packs/scripts/publish.ts index b8da3637db..7e6f683c96 100644 --- a/npm/ng-packs/scripts/publish.ts +++ b/npm/ng-packs/scripts/publish.ts @@ -8,13 +8,14 @@ program '-v, --nextVersion ', 'next semantic version. Available versions: ["major", "minor", "patch", "premajor", "preminor", "prepatch", "prerelease", "or type a custom version"]', ) + .option('-r, --registry ', 'target npm server registry') .option('-p, --preview', 'publishes with preview tag') .option('-r, --rc', 'publishes with next tag') .option('-g, --skipGit', 'skips git push'); program.parse(process.argv); -const publish = async () => { +(async () => { const versions = ['major', 'minor', 'patch', 'premajor', 'preminor', 'prepatch', 'prerelease']; if (!program.nextVersion) { @@ -22,9 +23,11 @@ const publish = async () => { process.exit(1); } - const registry = program.preview - ? 'https://www.myget.org/F/abp-nightly/auth/8f2a5234-1bce-4dc7-b976-2983078590a9/npm/' - : 'https://registry.npmjs.org'; + const registry = + program.registry || + (program.preview + ? 'https://www.myget.org/F/abp-nightly/auth/8f2a5234-1bce-4dc7-b976-2983078590a9/npm/' + : 'https://registry.npmjs.org'); try { await fse.remove('../dist'); @@ -88,8 +91,4 @@ const publish = async () => { } process.exit(0); -}; - -publish(); - -export default publish; +})(); From b8bc6973110c9bac81c05893cc456caef7670f88 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 30 Dec 2020 21:32:58 +0800 Subject: [PATCH 138/217] Fix Should_Registered_AutoMapper_Service test method. --- .../AutoMapper_Dependency_Injection_Tests.cs | 59 ++----------------- 1 file changed, 5 insertions(+), 54 deletions(-) diff --git a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_Dependency_Injection_Tests.cs b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_Dependency_Injection_Tests.cs index 891ef0ddbb..56c5e6f061 100644 --- a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_Dependency_Injection_Tests.cs +++ b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_Dependency_Injection_Tests.cs @@ -19,11 +19,7 @@ namespace Volo.Abp.AutoMapper [Fact] public void Should_Registered_AutoMapper_Service() { - GetService>().ShouldBeNull(); - GetService>().ShouldBeNull(); - GetService>().ShouldBeNull(); - GetService>().ShouldBeNull(); - GetService>().ShouldBeNull(); + GetService().ShouldNotBeNull(); } [Fact] @@ -34,7 +30,7 @@ namespace Volo.Abp.AutoMapper Name = "Source" }; - _objectMapper.Map(sourceModel).Name.ShouldBe(GetRequiredService().Name); + _objectMapper.Map(sourceModel).Name.ShouldBe(nameof(CustomMappingActionService)); } public class SourceModel @@ -47,65 +43,20 @@ namespace Volo.Abp.AutoMapper public string Name { get; set; } } - public class TestService : - IValueResolver, - IMemberValueResolver, - ITypeConverter, - IValueConverter, - IMappingAction - { - public string Resolve(string source, string destination, string destMember, ResolutionContext context) - { - return source; - } - - public string Resolve(string source, string destination, string sourceMember, string destMember, ResolutionContext context) - { - return source; - } - - public string Convert(string source, string destination, ResolutionContext context) - { - return source; - } - - public string Convert(string sourceMember, ResolutionContext context) - { - return sourceMember; - } - - public void Process(string source, string destination, ResolutionContext context) - { - - } - } - public class MapperActionProfile : Profile { public MapperActionProfile() { - CreateMap().AfterMap(); + CreateMap().AfterMap(); } } - public class CustomMappingAction : IMappingAction + public class CustomMappingActionService : IMappingAction { - private readonly TestNameService _testNameService; - - public CustomMappingAction(TestNameService testNameService) - { - _testNameService = testNameService; - } - public void Process(SourceModel source, DestModel destination, ResolutionContext context) { - destination.Name = _testNameService.Name; + destination.Name = nameof(CustomMappingActionService); } } - - public class TestNameService : ITransientDependency - { - public string Name => nameof(TestNameService); - } } } From 1ff40d4bd2ceecc4d7f9607ce28de5509b55ac9d Mon Sep 17 00:00:00 2001 From: GameBelial <243387971@qq.com> Date: Thu, 31 Dec 2020 13:11:57 +0800 Subject: [PATCH 139/217] To solve the issue of Issue-6819, for SQL Server, the connection string does not enable the MultipleActiveResultSets=true feature by default. --- .../MyCompanyName.MyProjectName.DbMigrator/appsettings.json | 2 +- .../MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json | 2 +- .../appsettings.json | 2 +- .../appsettings.json | 2 +- .../src/MyCompanyName.MyProjectName.Web/appsettings.json | 2 +- .../MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json | 4 ++-- .../appsettings.json | 2 +- .../MyCompanyName.MyProjectName.Web.Unified/appsettings.json | 2 +- 8 files changed, 9 insertions(+), 9 deletions(-) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/appsettings.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/appsettings.json index 1d9beacd54..b9ba4298dd 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/appsettings.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/appsettings.json @@ -1,6 +1,6 @@ { "ConnectionStrings": { - "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=MyProjectName;Trusted_Connection=True;MultipleActiveResultSets=true" + "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=MyProjectName;Trusted_Connection=True" }, "IdentityServer": { "Clients": { diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json index 6c64a7b397..12bd4f78bb 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json @@ -3,7 +3,7 @@ "CorsOrigins": "https://*.MyProjectName.com,http://localhost:4200,https://localhost:44307" }, "ConnectionStrings": { - "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=MyProjectName;Trusted_Connection=True;MultipleActiveResultSets=true" + "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=MyProjectName;Trusted_Connection=True" }, "Redis": { "Configuration": "127.0.0.1" diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/appsettings.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/appsettings.json index 1051a8576c..73d80aeec4 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/appsettings.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/appsettings.json @@ -5,7 +5,7 @@ "RedirectAllowedUrls": "http://localhost:4200,https://localhost:44307" }, "ConnectionStrings": { - "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=MyProjectName;Trusted_Connection=True;MultipleActiveResultSets=true" + "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=MyProjectName;Trusted_Connection=True" }, "AuthServer": { "Authority": "https://localhost:44305", diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/appsettings.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/appsettings.json index c7101f92ed..0e667e5d73 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/appsettings.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/appsettings.json @@ -5,7 +5,7 @@ "RedirectAllowedUrls": "http://localhost:4200,https://localhost:44307" }, "ConnectionStrings": { - "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=MyProjectName;Trusted_Connection=True;MultipleActiveResultSets=true" + "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=MyProjectName;Trusted_Connection=True" }, "Redis": { "Configuration": "127.0.0.1" diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/appsettings.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/appsettings.json index 8084875aa5..9c81e66699 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/appsettings.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/appsettings.json @@ -3,7 +3,7 @@ "SelfUrl": "https://localhost:44303" }, "ConnectionStrings": { - "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=MyProjectName;Trusted_Connection=True;MultipleActiveResultSets=true" + "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=MyProjectName;Trusted_Connection=True" }, "AuthServer": { "Authority": "https://localhost:44303", diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json index d80fc69b59..b35a5997cf 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/appsettings.json @@ -3,8 +3,8 @@ "CorsOrigins": "https://*.MyProjectName.com,http://localhost:4200,http://localhost:44307,https://localhost:44307" }, "ConnectionStrings": { - "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=MyProjectName_Main;Trusted_Connection=True;MultipleActiveResultSets=true", - "MyProjectName": "Server=(LocalDb)\\MSSQLLocalDB;Database=MyProjectName_Module;Trusted_Connection=True;MultipleActiveResultSets=true" + "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=MyProjectName_Main;Trusted_Connection=True", + "MyProjectName": "Server=(LocalDb)\\MSSQLLocalDB;Database=MyProjectName_Module;Trusted_Connection=True" }, "Redis": { "Configuration": "127.0.0.1" diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/appsettings.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/appsettings.json index dd966995a3..29608e57a4 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/appsettings.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/appsettings.json @@ -5,7 +5,7 @@ }, "AppSelfUrl": "https://localhost:44301/", "ConnectionStrings": { - "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=MyProjectName_Main;Trusted_Connection=True;MultipleActiveResultSets=true" + "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=MyProjectName_Main;Trusted_Connection=True" }, "Redis": { "Configuration": "127.0.0.1" diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/appsettings.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/appsettings.json index e081a57a67..f90c5b2d28 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/appsettings.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/appsettings.json @@ -1,5 +1,5 @@ { "ConnectionStrings": { - "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=MyProjectName_Unified;Trusted_Connection=True;MultipleActiveResultSets=true" + "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=MyProjectName_Unified;Trusted_Connection=True" } } \ No newline at end of file From ffdd6440a3fbf052264deeaee463168680e82a0e Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 31 Dec 2020 14:22:09 +0800 Subject: [PATCH 140/217] Improved AddAbpOpenIdConnect --- .../AbpOpenIdConnectExtensions.cs | 43 ++++++++++++------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/Microsoft/Extensions/DependencyInjection/AbpOpenIdConnectExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/Microsoft/Extensions/DependencyInjection/AbpOpenIdConnectExtensions.cs index 56886f679e..4d16439880 100644 --- a/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/Microsoft/Extensions/DependencyInjection/AbpOpenIdConnectExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/Microsoft/Extensions/DependencyInjection/AbpOpenIdConnectExtensions.cs @@ -25,26 +25,39 @@ namespace Microsoft.Extensions.DependencyInjection { options.ClaimActions.MapAbpClaimTypes(); - options.Events = new OpenIdConnectEvents + configureOptions?.Invoke(options); + + if(options.Events != null) { - OnAuthorizationCodeReceived = receivedContext => + var authorizationCodeReceived = options.Events.OnAuthorizationCodeReceived; + options.Events.OnAuthorizationCodeReceived = receivedContext => { - var tenantKey = receivedContext.HttpContext.RequestServices - .GetRequiredService>().Value.TenantKey; + AbpOnAuthorizationCodeReceived(receivedContext); + return authorizationCodeReceived(receivedContext); + }; + } + else + { + options.Events = new OpenIdConnectEvents + { + OnAuthorizationCodeReceived = AbpOnAuthorizationCodeReceived + }; + } + }); + } - if (receivedContext.HttpContext.Request != null && - receivedContext.Request.Cookies.ContainsKey(tenantKey)) - { - receivedContext.TokenEndpointRequest.SetParameter(tenantKey, - receivedContext.Request.Cookies[tenantKey]); - } + private static Task AbpOnAuthorizationCodeReceived(AuthorizationCodeReceivedContext receivedContext) + { + var tenantKey = receivedContext.HttpContext.RequestServices + .GetRequiredService>().Value.TenantKey; - return Task.CompletedTask; - } - }; + if (receivedContext.Request.Cookies.ContainsKey(tenantKey)) + { + receivedContext.TokenEndpointRequest.SetParameter(tenantKey, + receivedContext.Request.Cookies[tenantKey]); + } - configureOptions?.Invoke(options); - }); + return Task.CompletedTask; } } } From 00a71897b43e01bfb8745e937b53ec69be8e36f2 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Thu, 31 Dec 2020 09:39:48 +0300 Subject: [PATCH 141/217] Fix SolutionModuleAdder.RemoveProjectByPostFix --- .../Cli/ProjectModification/SolutionModuleAdder.cs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs index 4eae8ace8f..2dc7febeac 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs @@ -205,14 +205,25 @@ namespace Volo.Abp.Cli.ProjectModification string postFix) { var srcPath = Path.Combine(Path.GetDirectoryName(moduleSolutionFile), targetFolder); + + if (!Directory.Exists(srcPath)) + { + return; + } + var projectFolderPath = Directory.GetDirectories(srcPath).FirstOrDefault(d=> d.EndsWith(postFix)); + + if (projectFolderPath == null) + { + return; + } + await SolutionFileModifier.RemoveProjectFromSolutionFileAsync(moduleSolutionFile, new DirectoryInfo(projectFolderPath).Name); if (Directory.Exists(projectFolderPath)) { Directory.Delete(projectFolderPath, true); } - } private async Task ChangeDomainTestReferenceToMongoDB(ModuleWithMastersInfo module, string moduleSolutionFile) From 8bb84aae0408a03e35388cec6770a7f9b408de4f Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 31 Dec 2020 15:08:06 +0800 Subject: [PATCH 142/217] Improved --- .../AbpOpenIdConnectExtensions.cs | 26 ++++++------------- 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/Microsoft/Extensions/DependencyInjection/AbpOpenIdConnectExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/Microsoft/Extensions/DependencyInjection/AbpOpenIdConnectExtensions.cs index 4d16439880..e98280d19d 100644 --- a/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/Microsoft/Extensions/DependencyInjection/AbpOpenIdConnectExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/Microsoft/Extensions/DependencyInjection/AbpOpenIdConnectExtensions.cs @@ -27,26 +27,18 @@ namespace Microsoft.Extensions.DependencyInjection configureOptions?.Invoke(options); - if(options.Events != null) - { - var authorizationCodeReceived = options.Events.OnAuthorizationCodeReceived; - options.Events.OnAuthorizationCodeReceived = receivedContext => - { - AbpOnAuthorizationCodeReceived(receivedContext); - return authorizationCodeReceived(receivedContext); - }; - } - else + options.Events ??= new OpenIdConnectEvents(); + var authorizationCodeReceived = options.Events.OnAuthorizationCodeReceived ?? (_ => Task.CompletedTask); + + options.Events.OnAuthorizationCodeReceived = receivedContext => { - options.Events = new OpenIdConnectEvents - { - OnAuthorizationCodeReceived = AbpOnAuthorizationCodeReceived - }; - } + SetAbpTenantId(receivedContext); + return authorizationCodeReceived.Invoke(receivedContext); + }; }); } - private static Task AbpOnAuthorizationCodeReceived(AuthorizationCodeReceivedContext receivedContext) + private static void SetAbpTenantId(AuthorizationCodeReceivedContext receivedContext) { var tenantKey = receivedContext.HttpContext.RequestServices .GetRequiredService>().Value.TenantKey; @@ -56,8 +48,6 @@ namespace Microsoft.Extensions.DependencyInjection receivedContext.TokenEndpointRequest.SetParameter(tenantKey, receivedContext.Request.Cookies[tenantKey]); } - - return Task.CompletedTask; } } } From 2a6e8b2932a4fe42c46e1607a92ab842b5040b11 Mon Sep 17 00:00:00 2001 From: muhammedaltug Date: Thu, 31 Dec 2020 10:22:41 +0300 Subject: [PATCH 143/217] add Node interface to Partible type control --- npm/ng-packs/packages/core/src/lib/models/utility.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/core/src/lib/models/utility.ts b/npm/ng-packs/packages/core/src/lib/models/utility.ts index a8ff45e319..3f183d3944 100644 --- a/npm/ng-packs/packages/core/src/lib/models/utility.ts +++ b/npm/ng-packs/packages/core/src/lib/models/utility.ts @@ -7,7 +7,7 @@ export type DeepPartial = Partible extends never [K in keyof T]?: DeepPartial; }; -type Partible = T extends Primitive | Array +type Partible = T extends Primitive | Array | Node ? never : { [K in keyof T]: T[K] extends Function ? never : T[K]; From 4e50ccf95f251f1b0d66275644c87e0c2601ee1c Mon Sep 17 00:00:00 2001 From: Ilkay Ilknur Date: Thu, 31 Dec 2020 10:48:49 +0300 Subject: [PATCH 144/217] use GetCancellationToken method to pass cancellation tokens. --- .../Volo/CmsKit/Contents/EfCoreContentRepository.cs | 6 +++--- .../Volo/CmsKit/Tags/EfCoreTagRepository.cs | 6 +++--- .../Volo/CmsKit/MongoDB/Contents/MongoContentRepository.cs | 6 +++--- .../Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs | 6 +++--- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Contents/EfCoreContentRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Contents/EfCoreContentRepository.cs index d426d1d7c5..9293d637f7 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Contents/EfCoreContentRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Contents/EfCoreContentRepository.cs @@ -24,7 +24,7 @@ namespace Volo.CmsKit.Contents x.EntityType == entityType && x.EntityId == entityId && x.TenantId == tenantId, - cancellationToken: cancellationToken + cancellationToken: GetCancellationToken(cancellationToken) ); } @@ -39,7 +39,7 @@ namespace Volo.CmsKit.Contents x.EntityType == entityType && x.EntityId == entityId && x.TenantId == tenantId, - cancellationToken: cancellationToken + cancellationToken: GetCancellationToken(cancellationToken) ); } @@ -49,7 +49,7 @@ namespace Volo.CmsKit.Contents x.EntityType == entityType && x.EntityId == entityId && x.TenantId == tenantId, - cancellationToken: cancellationToken); + cancellationToken: GetCancellationToken(cancellationToken)); } } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs index 593905cc95..0b6cfe1f48 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs @@ -29,7 +29,7 @@ namespace Volo.CmsKit.Tags x.EntityType == entityType && x.Name == name && x.TenantId == tenantId, - cancellationToken); + GetCancellationToken(cancellationToken)); } public virtual Task GetAsync( @@ -42,7 +42,7 @@ namespace Volo.CmsKit.Tags x.EntityType == entityType && x.Name == name && x.TenantId == tenantId, - cancellationToken: cancellationToken); + cancellationToken: GetCancellationToken(cancellationToken)); } public virtual Task FindAsync( @@ -55,7 +55,7 @@ namespace Volo.CmsKit.Tags x.EntityType == entityType && x.Name == name && x.TenantId == tenantId, - cancellationToken: cancellationToken); + cancellationToken: GetCancellationToken(cancellationToken)); } public virtual async Task> GetAllRelatedTagsAsync( diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Contents/MongoContentRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Contents/MongoContentRepository.cs index fd673cb34c..ccdee8b431 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Contents/MongoContentRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Contents/MongoContentRepository.cs @@ -24,7 +24,7 @@ namespace Volo.CmsKit.MongoDB.Contents x.EntityType == entityType && x.EntityId == entityId && x.TenantId == tenantId, - cancellationToken: cancellationToken + cancellationToken: GetCancellationToken(cancellationToken) ); } @@ -39,7 +39,7 @@ namespace Volo.CmsKit.MongoDB.Contents x.EntityType == entityType && x.EntityId == entityId && x.TenantId == tenantId, - cancellationToken: cancellationToken + cancellationToken: GetCancellationToken(cancellationToken) ); } @@ -49,7 +49,7 @@ namespace Volo.CmsKit.MongoDB.Contents x.EntityType == entityType && x.EntityId == entityId && x.TenantId == tenantId, - cancellationToken: cancellationToken); + cancellationToken: GetCancellationToken(cancellationToken)); } } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs index de543d4666..86dc20d83c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs @@ -29,7 +29,7 @@ namespace Volo.CmsKit.MongoDB.Tags x.EntityType == entityType && x.Name == name && x.TenantId == tenantId, - cancellationToken); + GetCancellationToken(cancellationToken)); } public Task GetAsync( @@ -42,7 +42,7 @@ namespace Volo.CmsKit.MongoDB.Tags x.EntityType == entityType && x.Name == name && x.TenantId == tenantId, - cancellationToken: cancellationToken); + cancellationToken: GetCancellationToken(cancellationToken)); } public Task FindAsync( @@ -55,7 +55,7 @@ namespace Volo.CmsKit.MongoDB.Tags x.EntityType == entityType && x.Name == name && x.TenantId == tenantId, - cancellationToken: cancellationToken); + cancellationToken: GetCancellationToken(cancellationToken)); } public virtual async Task> GetAllRelatedTagsAsync( From 057bbce4cd2d0a0bf2447319888f6e3c240ef933 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Thu, 31 Dec 2020 11:18:53 +0300 Subject: [PATCH 145/217] add DisplayNameGeneratorFn and EntityExtensions types --- .../src/lib/models/internal/object-extensions.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/models/internal/object-extensions.ts b/npm/ng-packs/packages/theme-shared/extensions/src/lib/models/internal/object-extensions.ts index db24cfe471..448183b8a0 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/models/internal/object-extensions.ts +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/models/internal/object-extensions.ts @@ -3,11 +3,20 @@ import { EntityPropList } from '../entity-props'; import { FormPropList } from '../form-props'; import { PropContributorCallbacks } from '../props'; +export type DisplayNameGeneratorFn = ( + displayName: LocalizableStringDto, + fallback: LocalizableStringDto, +) => string; + +export type EntityExtensions = Record; + export interface EntityExtensionDto { - properties: Record; + properties: EntityExtensionProperties; configuration: Record; } +export type EntityExtensionProperties = Record; + export interface ExtensionEnumDto { fields: ExtensionEnumFieldDto[]; localizationResource?: string; From efa3f8f590e312285062e4aec4d95a07ec75be88 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Thu, 31 Dec 2020 11:21:06 +0300 Subject: [PATCH 146/217] add add/has/removeTypeaheadTextSuffix functions --- .../extensions/src/lib/utils/typeahead.util.ts | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/utils/typeahead.util.ts b/npm/ng-packs/packages/theme-shared/extensions/src/lib/utils/typeahead.util.ts index be89c4a295..2e66cb78fb 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/utils/typeahead.util.ts +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/utils/typeahead.util.ts @@ -4,6 +4,9 @@ import { map } from 'rxjs/operators'; import { ePropType } from '../enums/props.enum'; import { PropCallback } from '../models/props'; +const TYPEAHEAD_TEXT_SUFFIX = '_Text'; +const TYPEAHEAD_TEXT_SUFFIX_REGEX = /_Text$/; + export function createTypeaheadOptions( lookup: ExtensionPropertyUiLookupDto, ): PropCallback[]>> { @@ -37,7 +40,19 @@ export function createTypeaheadOptions( export function getTypeaheadType(lookup: ExtensionPropertyUiLookupDto, name: string) { return Boolean(lookup.url) ? ePropType.Typeahead - : name.endsWith('_Text') + : name.endsWith(TYPEAHEAD_TEXT_SUFFIX) ? ePropType.Hidden : undefined; } + +export function addTypeaheadTextSuffix(name: string) { + return name + TYPEAHEAD_TEXT_SUFFIX; +} + +export function hasTypeaheadTextSuffix(name: string) { + return TYPEAHEAD_TEXT_SUFFIX_REGEX.test(name); +} + +export function removeTypeaheadTextSuffix(name: string) { + return name.replace(TYPEAHEAD_TEXT_SUFFIX_REGEX, ''); +} From 52abfd021751132f6334fc56379280156705e5ed Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Thu, 31 Dec 2020 11:21:56 +0300 Subject: [PATCH 147/217] use addTypeaheadTextSuffix instead of hardcoded text --- .../extensible-form/extensible-form-prop.component.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts index 7e592cc4b0..893d6e6344 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.ts @@ -27,6 +27,7 @@ import { ePropType } from '../../enums/props.enum'; import { FormProp } from '../../models/form-props'; import { PropData } from '../../models/props'; import { selfFactory } from '../../utils/factory.util'; +import { addTypeaheadTextSuffix } from '../../utils/typeahead.util'; @Component({ selector: 'abp-extensible-form-prop', @@ -96,10 +97,10 @@ export class ExtensibleFormPropComponent implements OnChanges { private getTypeaheadControls() { const { name } = this.prop; - const textSuffix = '_Text'; const extraPropName = `${EXTRA_PROPERTIES_KEY}.${name}`; const keyControl = - this.form.get(extraPropName + textSuffix) || this.form.get(name + textSuffix); + this.form.get(addTypeaheadTextSuffix(extraPropName)) || + this.form.get(addTypeaheadTextSuffix(name)); const valueControl = this.form.get(extraPropName) || this.form.get(name); return [keyControl, valueControl]; } From 3531cc3b35abd02aab174e6acc245ce877d991e7 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Thu, 31 Dec 2020 11:22:24 +0300 Subject: [PATCH 148/217] add createTypeaheadDisplayNameGenerator function --- .../extensions/src/lib/utils/typeahead.util.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/utils/typeahead.util.ts b/npm/ng-packs/packages/theme-shared/extensions/src/lib/utils/typeahead.util.ts index 2e66cb78fb..b51493d22b 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/utils/typeahead.util.ts +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/utils/typeahead.util.ts @@ -2,6 +2,7 @@ import { ABP, ExtensionPropertyUiLookupDto, RestService } from '@abp/ng.core'; import { Observable, of } from 'rxjs'; import { map } from 'rxjs/operators'; import { ePropType } from '../enums/props.enum'; +import { ObjectExtensions } from '../models/object-extensions'; import { PropCallback } from '../models/props'; const TYPEAHEAD_TEXT_SUFFIX = '_Text'; @@ -45,6 +46,17 @@ export function getTypeaheadType(lookup: ExtensionPropertyUiLookupDto, name: str : undefined; } +export function createTypeaheadDisplayNameGenerator( + displayNameGeneratorFn: ObjectExtensions.DisplayNameGeneratorFn, + properties: ObjectExtensions.EntityExtensionProperties, +): ObjectExtensions.DisplayNameGeneratorFn { + return (displayName, fallback) => { + let { name, resource } = fallback; + name = removeTypeaheadTextSuffix(name); + return displayNameGeneratorFn(displayName || properties[name].displayName, { name, resource }); + }; +} + export function addTypeaheadTextSuffix(name: string) { return name + TYPEAHEAD_TEXT_SUFFIX; } From 912a24702653845632dc9f42ce5930b801ab0f78 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 31 Dec 2020 16:22:40 +0800 Subject: [PATCH 149/217] Remove permission Grants when role is delete --- .../Identity/RoleDeletedEventHandler.cs | 26 +++++++++++++++++++ .../IPermissionManager.cs | 4 ++- .../PermissionManagement/PermissionManager.cs | 12 ++++++++- 3 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleDeletedEventHandler.cs 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 new file mode 100644 index 0000000000..806a37de7c --- /dev/null +++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleDeletedEventHandler.cs @@ -0,0 +1,26 @@ +using System.Threading.Tasks; +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Domain.Entities.Events; +using Volo.Abp.EventBus; +using Volo.Abp.Identity; + +namespace Volo.Abp.PermissionManagement.Identity +{ + public class RoleDeletedEventHandler : + ILocalEventHandler>, + ITransientDependency + { + protected IPermissionManager PermissionManager { get; } + + public RoleDeletedEventHandler(IPermissionManager permissionManager) + { + PermissionManager = permissionManager; + } + + public virtual async Task HandleEventAsync(EntityDeletedEventData eventData) + { + await PermissionManager.DeleteAsync(RolePermissionValueProvider.ProviderName, eventData.Entity.Name); + } + } +} diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IPermissionManager.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IPermissionManager.cs index 26310a12fe..70bb83a7d0 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IPermissionManager.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IPermissionManager.cs @@ -15,5 +15,7 @@ namespace Volo.Abp.PermissionManagement Task SetAsync(string permissionName, string providerName, string providerKey, bool isGranted); Task UpdateProviderKeyAsync(PermissionGrant permissionGrant, string providerKey); + + Task DeleteAsync(string providerName, string providerKey); } -} \ No newline at end of file +} diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManager.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManager.cs index 9a2a89e340..fc8da0c6c5 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManager.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManager.cs @@ -111,6 +111,16 @@ namespace Volo.Abp.PermissionManagement return await PermissionGrantRepository.UpdateAsync(permissionGrant); } + public virtual async Task DeleteAsync(string providerName, string providerKey) + { + var permissionGrants = await PermissionGrantRepository.GetListAsync(providerName, providerKey); + //TODO: Use DeleteManyAsync method + foreach (var permissionGrant in permissionGrants) + { + await PermissionGrantRepository.DeleteAsync(permissionGrant); + } + } + protected virtual async Task GetInternalAsync(PermissionDefinition permission, string providerName, string providerKey) { var result = new PermissionWithGrantedProviders(permission.Name, false); @@ -143,4 +153,4 @@ namespace Volo.Abp.PermissionManagement return result; } } -} \ No newline at end of file +} From 330dddbc4c6d399497e85424869351cd2fc20da9 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Thu, 31 Dec 2020 11:22:46 +0300 Subject: [PATCH 150/217] use createTypeaheadDisplayNameGenerator for displayName --- .../extensions/src/lib/utils/state.util.ts | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/utils/state.util.ts b/npm/ng-packs/packages/theme-shared/extensions/src/lib/utils/state.util.ts index b8b2687232..4920687077 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/utils/state.util.ts +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/utils/state.util.ts @@ -14,7 +14,12 @@ import { PropCallback } from '../models/props'; import { createEnum, createEnumOptions, createEnumValueResolver } from './enum.util'; import { createDisplayNameLocalizationPipeKeyGenerator } from './localization.util'; import { createExtraPropertyValueResolver } from './props.util'; -import { createTypeaheadOptions, getTypeaheadType } from './typeahead.util'; +import { + createTypeaheadDisplayNameGenerator, + createTypeaheadOptions, + getTypeaheadType, + hasTypeaheadTextSuffix, +} from './typeahead.util'; import { getValidatorsFromProperty } from './validation.util'; function selectObjectExtensions( @@ -59,7 +64,7 @@ export function getObjectExtensionEntitiesFromStore( .entities; }), map(entities => (isUndefined(entities) ? {} : entities)), - filter(Boolean), + filter(Boolean), take(1), ); } @@ -75,7 +80,7 @@ export function mapEntitiesToContributors( const generateDisplayName = createDisplayNameLocalizationPipeKeyGenerator(localization); return Object.keys(entities).reduce( - (acc, key: keyof Entities) => { + (acc, key: keyof ObjectExtensions.EntityExtensions) => { acc.prop[key] = []; acc.createForm[key] = []; acc.editForm[key] = []; @@ -108,23 +113,30 @@ export function mapEntitiesToContributors( } function createPropertiesToContributorsMapper( - generateDisplayName: DisplayNameGeneratorFn, + generateDisplayName: ObjectExtensions.DisplayNameGeneratorFn, resource: string, enums: Record, ) { return ( - properties: Record, + properties: ObjectExtensions.EntityExtensionProperties, contributors: ObjectExtensions.PropContributors, key: string, ) => { const isExtra = true; + const generateTypeaheadDisplayName = createTypeaheadDisplayNameGenerator( + generateDisplayName, + properties, + ); Object.keys(properties).forEach((name: string) => { const property = properties[name]; const propName = name; const lookup = property.ui.lookup || ({} as ExtensionPropertyUiLookupDto); const type = getTypeaheadType(lookup, name) || getTypeFromProperty(property); - const displayName = generateDisplayName(property.displayName, { name, resource }); + const generateDN = hasTypeaheadTextSuffix(name) + ? generateTypeaheadDisplayName + : generateDisplayName; + const displayName = generateDN(property.displayName, { name, resource }); if (property.ui.onTable.isVisible) { const sortable = Boolean(property.ui.onTable.isSortable); @@ -186,6 +198,3 @@ function getTypeFromProperty(property: ObjectExtensions.ExtensionPropertyDto): e function isUndefined(obj: any): obj is undefined { return typeof obj === 'undefined'; } - -type DisplayNameGeneratorFn = ReturnType; -type Entities = Record; From 6e87716df260b55e8a4ec936a197700c70d4e4a7 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Thu, 31 Dec 2020 11:37:13 +0300 Subject: [PATCH 151/217] remove resource variable to avoid lint error --- .../extensions/src/lib/utils/typeahead.util.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/utils/typeahead.util.ts b/npm/ng-packs/packages/theme-shared/extensions/src/lib/utils/typeahead.util.ts index b51493d22b..b34528104d 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/utils/typeahead.util.ts +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/utils/typeahead.util.ts @@ -51,9 +51,11 @@ export function createTypeaheadDisplayNameGenerator( properties: ObjectExtensions.EntityExtensionProperties, ): ObjectExtensions.DisplayNameGeneratorFn { return (displayName, fallback) => { - let { name, resource } = fallback; - name = removeTypeaheadTextSuffix(name); - return displayNameGeneratorFn(displayName || properties[name].displayName, { name, resource }); + const name = removeTypeaheadTextSuffix(fallback.name); + return displayNameGeneratorFn(displayName || properties[name].displayName, { + name, + resource: fallback.resource, + }); }; } From da117b9ba483dd888e0c79bd5822302d9c7f21d2 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 31 Dec 2020 17:04:08 +0800 Subject: [PATCH 152/217] Update AddModuleCommand.cs --- .../Volo/Abp/Cli/Commands/AddModuleCommand.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs index 26574c1c68..8129435266 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs @@ -81,11 +81,11 @@ namespace Volo.Abp.Cli.Commands sb.AppendLine(" abp add-module [options]"); sb.AppendLine(""); sb.AppendLine("Options:"); - sb.AppendLine(" --new-template Creates a fresh new module (speсialized for your solution) and adds it your solution."); - sb.AppendLine(" --with-source-code Downloads the source code of the module to your solution folder. (Always True if `--new-template` is used.)"); + sb.AppendLine(" --new Creates a fresh new module (speсialized for your solution) and adds it your solution."); + sb.AppendLine(" --with-source-code Downloads the source code of the module to your solution folder. (Always True if `--new` is used.)"); sb.AppendLine(" --add-to-solution-file Adds the downloaded/created module to your solution file. (only available when --with-source-code used)"); sb.AppendLine(" -s|--solution Specify the solution file explicitly."); - sb.AppendLine(" --skip-db-migrations Specify if a new migration will be added or not. (Always True if `--new-template` is used.)"); + sb.AppendLine(" --skip-db-migrations Specify if a new migration will be added or not. (Always True if `--new` is used.)"); sb.AppendLine(" -sp|--startup-project Relative path to the project folder of the startup project. Default value is the current folder."); sb.AppendLine(" -v|--version Specify the version of the module. Default is your project's ABP version."); sb.AppendLine(""); From c5ebe55cdfbb67677b8d40e9296e44bf4a8efbea Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 31 Dec 2020 17:07:02 +0800 Subject: [PATCH 153/217] Update CLI.md --- docs/en/CLI.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/CLI.md b/docs/en/CLI.md index 2e7b117799..1ddffb4afd 100644 --- a/docs/en/CLI.md +++ b/docs/en/CLI.md @@ -162,7 +162,7 @@ abp add-package Volo.Abp.MongoDB Adds a [multi-package application module](Modules/Index) to a solution by finding all packages of the module, finding related projects in the solution and adding each package to the corresponding project in the solution. -It can also create a new module for your solution and add it to your solution. See `--new-template` option. +It can also create a new module for your solution and add it to your solution. See `--new` option. > A business module generally consists of several packages (because of layering, different database provider options or other reasons). Using `add-module` command dramatically simplifies adding a module to a solution. However, each module may require some additional configurations which is generally indicated in the documentation of the related module. @@ -419,4 +419,4 @@ abp bundle [options] * ```--working-directory``` or ```-wd```: Specifies the working directory. This option is useful when executing directory doesn't contain a Blazor project file. * ```--force``` or ```-f```: Forces to build project before generating references. -`bundle` command reads the `appsettings.json` file inside the Blazor project for bundling options. For more details about managing style and script references in Blazor apps, see [Managing Global Scripts & Styles](UI/Blazor/Global-Scripts-Styles.md) \ No newline at end of file +`bundle` command reads the `appsettings.json` file inside the Blazor project for bundling options. For more details about managing style and script references in Blazor apps, see [Managing Global Scripts & Styles](UI/Blazor/Global-Scripts-Styles.md) From 847f526041145b62376b760776829d5ce257da1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 31 Dec 2020 12:10:28 +0300 Subject: [PATCH 154/217] Remove Volo.Abp.Identity.Domain\Volo.Abp.Identity.Domain dependency and disable RoleUpdateEventHandler --- ...ermissionManagement.Domain.Identity.csproj | 1 - .../Identity/RoleUpdateEventHandler.cs | 66 ++++++++++--------- 2 files changed, 34 insertions(+), 33 deletions(-) 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 40a310cf2d..2e1187c846 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 @@ -17,7 +17,6 @@ - diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleUpdateEventHandler.cs b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleUpdateEventHandler.cs index 5a95d515c4..18612bcfad 100644 --- a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleUpdateEventHandler.cs +++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleUpdateEventHandler.cs @@ -7,37 +7,39 @@ using Volo.Abp.Identity; namespace Volo.Abp.PermissionManagement.Identity { - public class RoleUpdateEventHandler : - ILocalEventHandler, - ITransientDependency - { - protected IIdentityRoleRepository RoleRepository { get; } - protected IPermissionManager PermissionManager { get; } - protected IPermissionGrantRepository PermissionGrantRepository { get; } + //TODO: This code can not be here! - public RoleUpdateEventHandler( - IIdentityRoleRepository roleRepository, - IPermissionManager permissionManager, - IPermissionGrantRepository permissionGrantRepository) - { - RoleRepository = roleRepository; - PermissionManager = permissionManager; - PermissionGrantRepository = permissionGrantRepository; - } - - public virtual async Task HandleEventAsync(IdentityRoleNameChangedEvent eventData) - { - var role = await RoleRepository.FindAsync(eventData.IdentityRole.Id, false); - if (role == null) - { - return; - } - - var permissionGrantsInRole = await PermissionGrantRepository.GetListAsync(RolePermissionValueProvider.ProviderName, eventData.OldName); - foreach (var permissionGrant in permissionGrantsInRole) - { - await PermissionManager.UpdateProviderKeyAsync(permissionGrant, eventData.IdentityRole.Name); - } - } - } + // public class RoleUpdateEventHandler : + // ILocalEventHandler, + // ITransientDependency + // { + // protected IIdentityRoleRepository RoleRepository { get; } + // protected IPermissionManager PermissionManager { get; } + // protected IPermissionGrantRepository PermissionGrantRepository { get; } + // + // public RoleUpdateEventHandler( + // IIdentityRoleRepository roleRepository, + // IPermissionManager permissionManager, + // IPermissionGrantRepository permissionGrantRepository) + // { + // RoleRepository = roleRepository; + // PermissionManager = permissionManager; + // PermissionGrantRepository = permissionGrantRepository; + // } + // + // public virtual async Task HandleEventAsync(IdentityRoleNameChangedEvent eventData) + // { + // var role = await RoleRepository.FindAsync(eventData.IdentityRole.Id, false); + // if (role == null) + // { + // return; + // } + // + // var permissionGrantsInRole = await PermissionGrantRepository.GetListAsync(RolePermissionValueProvider.ProviderName, eventData.OldName); + // foreach (var permissionGrant in permissionGrantsInRole) + // { + // await PermissionManager.UpdateProviderKeyAsync(permissionGrant, eventData.IdentityRole.Name); + // } + // } + // } } From ab03c8b8d082f4b4e187133a047455387d0f8f38 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 31 Dec 2020 22:18:32 +0800 Subject: [PATCH 155/217] Fix RoleChangingEvents_Test. --- .../Abp/Identity/RoleChangingEvents_Test.cs | 94 ++++++++++--------- 1 file changed, 48 insertions(+), 46 deletions(-) diff --git a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/RoleChangingEvents_Test.cs b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/RoleChangingEvents_Test.cs index c3c24a29cc..a668b5ff4f 100644 --- a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/RoleChangingEvents_Test.cs +++ b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/RoleChangingEvents_Test.cs @@ -9,50 +9,52 @@ using Xunit; namespace Volo.Abp.Identity { - public class RoleChangingEvents_Test : AbpIdentityDomainTestBase - { - protected readonly IIdentityRoleRepository RoleRepository; - protected readonly IPermissionGrantRepository PermissionGrantRepository; - protected readonly IdentityRoleManager RoleManager; - protected readonly ILookupNormalizer LookupNormalizer; - protected readonly IGuidGenerator GuidGenerator; - protected readonly IUnitOfWorkManager UowManager; - - public RoleChangingEvents_Test() - { - RoleRepository = GetRequiredService(); ; - PermissionGrantRepository = GetRequiredService(); ; - RoleManager = GetRequiredService(); ; - LookupNormalizer = GetRequiredService(); ; - GuidGenerator = GetRequiredService(); - UowManager = GetRequiredService(); - } - - [Fact] - public async Task Role_Update_Event_Test() - { - var role = await RoleRepository - .FindByNormalizedNameAsync(LookupNormalizer.NormalizeName("moderator")) - ; - - var permissionGrantsInRole = await PermissionGrantRepository.GetListAsync("R", role.Name); - permissionGrantsInRole.ShouldNotBeNull(); - permissionGrantsInRole.Count.ShouldBeGreaterThan(0); - var count = permissionGrantsInRole.Count; - - using (var uow = UowManager.Begin()) - { - var identityResult = await RoleManager.SetRoleNameAsync(role, "TestModerator"); - identityResult.Succeeded.ShouldBeTrue(); - var xx = await RoleRepository.UpdateAsync(role); - await uow.CompleteAsync(); - } - - role = await RoleRepository.GetAsync(role.Id); - role.Name.ShouldBe("TestModerator"); - - permissionGrantsInRole = await PermissionGrantRepository.GetListAsync("R", role.Name); - permissionGrantsInRole.Count.ShouldBe(count); - } - } + //TODO: This code can not be here! + //https://github.com/abpframework/abp/commit/847f526041145b62376b760776829d5ce257da1c + // public class RoleChangingEvents_Test : AbpIdentityDomainTestBase + // { + // protected readonly IIdentityRoleRepository RoleRepository; + // protected readonly IPermissionGrantRepository PermissionGrantRepository; + // protected readonly IdentityRoleManager RoleManager; + // protected readonly ILookupNormalizer LookupNormalizer; + // protected readonly IGuidGenerator GuidGenerator; + // protected readonly IUnitOfWorkManager UowManager; + // + // public RoleChangingEvents_Test() + // { + // RoleRepository = GetRequiredService(); ; + // PermissionGrantRepository = GetRequiredService(); ; + // RoleManager = GetRequiredService(); ; + // LookupNormalizer = GetRequiredService(); ; + // GuidGenerator = GetRequiredService(); + // UowManager = GetRequiredService(); + // } + // + // [Fact(Skip = "https://github.com/abpframework/abp/actions/runs/454248191")] + // public async Task Role_Update_Event_Test() + // { + // var role = await RoleRepository + // .FindByNormalizedNameAsync(LookupNormalizer.NormalizeName("moderator")) + // ; + // + // var permissionGrantsInRole = await PermissionGrantRepository.GetListAsync("R", role.Name); + // permissionGrantsInRole.ShouldNotBeNull(); + // permissionGrantsInRole.Count.ShouldBeGreaterThan(0); + // var count = permissionGrantsInRole.Count; + // + // using (var uow = UowManager.Begin()) + // { + // var identityResult = await RoleManager.SetRoleNameAsync(role, "TestModerator"); + // identityResult.Succeeded.ShouldBeTrue(); + // var xx = await RoleRepository.UpdateAsync(role); + // await uow.CompleteAsync(); + // } + // + // role = await RoleRepository.GetAsync(role.Id); + // role.Name.ShouldBe("TestModerator"); + // + // permissionGrantsInRole = await PermissionGrantRepository.GetListAsync("R", role.Name); + // permissionGrantsInRole.Count.ShouldBe(count); + // } + // } } From 91cb7d5e57f9678f3c6935a7bba9f6a3ad316f13 Mon Sep 17 00:00:00 2001 From: enisn Date: Thu, 31 Dec 2020 17:22:40 +0300 Subject: [PATCH 156/217] CmsKit - Add Feature check to PermissionDefinitionProvider --- .../CmsKitAdminPermissionDefinitionProvider.cs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissionDefinitionProvider.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissionDefinitionProvider.cs index 2cb6a53b58..507b1c276f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissionDefinitionProvider.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissionDefinitionProvider.cs @@ -1,5 +1,7 @@ using Volo.Abp.Authorization.Permissions; +using Volo.Abp.GlobalFeatures; using Volo.Abp.Localization; +using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Localization; namespace Volo.CmsKit.Permissions @@ -10,11 +12,13 @@ namespace Volo.CmsKit.Permissions { var cmsGroup = context.GetGroupOrNull(CmsKitAdminPermissions.GroupName) ?? context.AddGroup(CmsKitAdminPermissions.GroupName, L("Permission:CmsKit")); - cmsGroup - .AddPermission(CmsKitAdminPermissions.Tags.Default, L("Permission:TagManagement")) - .AddChild(CmsKitAdminPermissions.Tags.Create, L("Permission:TagManagement.Create")) - .AddChild(CmsKitAdminPermissions.Tags.Update, L("Permission:TagManagement.Update")) - .AddChild(CmsKitAdminPermissions.Tags.Delete, L("Permission:TagManagement.Delete")); + if (GlobalFeatureManager.Instance.IsEnabled()) + { + var tagGroup = cmsGroup.AddPermission(CmsKitAdminPermissions.Tags.Default, L("Permission:TagManagement")); + tagGroup.AddChild(CmsKitAdminPermissions.Tags.Create, L("Permission:TagManagement.Create")); + tagGroup.AddChild(CmsKitAdminPermissions.Tags.Update, L("Permission:TagManagement.Update")); + tagGroup.AddChild(CmsKitAdminPermissions.Tags.Delete, L("Permission:TagManagement.Delete")); + } } private static LocalizableString L(string name) From 99f4ab7e9de73db0570236cf4dac7736912a8442 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 31 Dec 2020 22:48:34 +0800 Subject: [PATCH 157/217] Update contribution document. --- docs/en/Contribution/Index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Contribution/Index.md b/docs/en/Contribution/Index.md index 07dc73ab24..d2525ae191 100644 --- a/docs/en/Contribution/Index.md +++ b/docs/en/Contribution/Index.md @@ -10,7 +10,7 @@ If you want to write **articles** or **how to guides** related to the ABP Framew You can always send pull requests to the GitHub repository. -- Clone the [ABP repository](https://github.com/abpframework/abp/) from GitHub. +- [Fork](https://docs.github.com/en/free-pro-team@latest/github/getting-started-with-github/fork-a-repo) the [ABP repository](https://github.com/abpframework/abp/) from GitHub. - Build the repository using the `/build/build-all.ps1 -f` for one time. - Make the necessary changes, including unit/integration tests. - Send a pull request. From bd52241566381827f113ce80b2b21c31e75e444b Mon Sep 17 00:00:00 2001 From: Kevin Date: Thu, 31 Dec 2020 17:02:26 +0000 Subject: [PATCH 158/217] Added en-GB json files --- .../Account/Localization/Resources/en-GB.json | 14 ++ .../Admin/Localization/Resources/en-GB.json | 202 ++++++++++++++++++ .../Base/Localization/Resources/en-GB.json | 35 +++ .../Localization/Resources/en-GB.json | 39 ++++ .../Localization/Resources/en-GB.json | 106 +++++++++ .../Www/Localization/Resources/en-GB.json | 197 +++++++++++++++++ .../UI/MultiTenancy/Localization/en-GB.json | 12 ++ .../Abp/Authorization/Localization/en-GB.json | 10 + .../Localization/Resources/AbpDdd/en-GB.json | 6 + .../Volo/Abp/Emailing/Localization/en-GB.json | 25 +++ .../ExceptionHandling/Localization/en-GB.json | 25 +++ .../Volo/Abp/Features/Localization/en-GB.json | 8 + .../Volo/Abp/Ldap/Localization/en-GB.json | 15 ++ .../Resources/AbpLocalization/en-GB.json | 7 + .../Volo/Abp/Timing/Localization/en-GB.json | 7 + .../Localization/Resource/en-GB.json | 6 + .../Localization/Resources/AbpUi/en-GB.json | 52 +++++ .../Abp/Validation/Localization/en-GB.json | 32 +++ .../Mvc/Localization/Resource/en-GB.json | 7 + .../Volo/Abp/Emailing/Localization/en-GB.json | 6 + .../Volo/Abp/Http/Localization/en-GB.json | 6 + .../Base/CountryNames/en-GB.json | 7 + .../TestResources/Base/Validation/en-GB.json | 7 + .../TestResources/Source/en-GB.json | 11 + .../TestResources/SourceExt/en-GB.json | 6 + .../TextTemplating/Localization/en-GB.json | 7 + .../Account/Localization/Resources/en-GB.json | 65 ++++++ .../Database/Localization/en-GB.json | 6 + .../Localization/Resources/en-GB.json | 58 +++++ .../CmsKit/Localization/Resources/en-GB.json | 29 +++ .../Resources/VoloDocs/Web/en-GB.json | 10 + .../Docs/ApplicationContracts/en-GB.json | 59 +++++ .../Volo/Docs/Localization/Domain/en-GB.json | 39 ++++ .../Localization/Domain/en-GB.json | 10 + .../Volo/Abp/Identity/Localization/en-GB.json | 120 +++++++++++ .../Localization/Resources/en-GB.json | 14 ++ .../Localization/Domain/en-GB.json | 10 + .../Resources/AbpSettingManagement/en-GB.json | 7 + .../Localization/Resources/en-GB.json | 23 ++ .../Localization/Resources/en-GB.json | 14 ++ .../Localization/MyProjectName/en-GB.json | 8 + .../MyProjectNameHttpApiHostModule.cs | 1 + .../Localization/MyProjectName/en-GB.json | 7 + 43 files changed, 1335 insertions(+) create mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/en-GB.json create mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en-GB.json create mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en-GB.json create mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en-GB.json create mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en-GB.json create mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en-GB.json create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/en-GB.json create mode 100644 framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/en-GB.json create mode 100644 framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/en-GB.json create mode 100644 framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/en-GB.json create mode 100644 framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/en-GB.json create mode 100644 framework/src/Volo.Abp.Features/Volo/Abp/Features/Localization/en-GB.json create mode 100644 framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/en-GB.json create mode 100644 framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/en-GB.json create mode 100644 framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/en-GB.json create mode 100644 framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/en-GB.json create mode 100644 framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en-GB.json create mode 100644 framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/en-GB.json create mode 100644 framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/en-GB.json create mode 100644 framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/en-GB.json create mode 100644 framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Localization/en-GB.json create mode 100644 framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/en-GB.json create mode 100644 framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/en-GB.json create mode 100644 framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/en-GB.json create mode 100644 framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/en-GB.json create mode 100644 framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/Localization/en-GB.json create mode 100644 modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en-GB.json create mode 100644 modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/Localization/en-GB.json create mode 100644 modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/en-GB.json create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en-GB.json create mode 100644 modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/en-GB.json create mode 100644 modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en-GB.json create mode 100644 modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en-GB.json create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/en-GB.json create mode 100644 modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en-GB.json create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/en-GB.json create mode 100644 modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/en-GB.json create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/en-GB.json create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/en-GB.json create mode 100644 modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/en-GB.json create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en-GB.json create mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en-GB.json diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/en-GB.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/en-GB.json new file mode 100644 index 0000000000..c1f56de865 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/en-GB.json @@ -0,0 +1,14 @@ +{ + "culture": "en-GB", + "texts": { + "Account": "ABP Account - Login & Register | ABP.IO", + "Welcome": "Welcome", + "UseOneOfTheFollowingLinksToContinue": "Use one of the following links to continue", + "FrameworkHomePage": "Framework home page", + "FrameworkDocumentation": "Framework documentation", + "OfficialBlog": "Official blog", + "CommercialHomePage": "Commercial home page", + "CommercialSupportWebSite": "Commercial support web site", + "CommunityWebSite": "ABP community web site" + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en-GB.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en-GB.json new file mode 100644 index 0000000000..970e04d24e --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en-GB.json @@ -0,0 +1,202 @@ +{ + "culture": "en-GB", + "texts": { + "Permission:Organizations": "Organisations", + "Permission:Manage": "Manage Organisations", + "Permission:DiscountRequests": "Discount Requests", + "Permission:DiscountManage": "Manage Discount Requests", + "Permission:Disable": "Disable", + "Permission:Enable": "Enable", + "Permission:EnableSendEmail": "Enable Send Email", + "Permission:SendEmail": "Send Email", + "Permission:NpmPackages": "NPM Packages", + "Permission:NugetPackages": "Nuget Packages", + "Permission:Maintenance": "Maintenance", + "Permission:Maintain": "Maintain", + "Permission:ClearCaches": "Clear caches", + "Permission:Modules": "Modules", + "Permission:Packages": "Packages", + "Permission:Edit": "Edit", + "Permission:Delete": "Delete", + "Permission:Create": "Create", + "Permission:Accounting": "Accounting", + "Permission:Accounting:Quotation": "Quotation", + "Permission:Accounting:Invoice": "Invoice", + "Menu:Organizations": "Organisations", + "Menu:Accounting": "Accounting", + "Menu:Packages": "Packages", + "Menu:DiscountRequests": "Discount Requests", + "NpmPackageDeletionWarningMessage": "This NPM Package will be deleted. Please confirm this?", + "NugetPackageDeletionWarningMessage": "This Nuget Package will be deleted. Please confirm this?", + "ModuleDeletionWarningMessage": "This Module will be deleted. Please confirm this?", + "Name": "Name", + "DisplayName": "Display name", + "ShortDescription": "Short description", + "NameFilter": "Name", + "CreationTime": "Creation time", + "IsPro": "Is pro", + "ShowOnModuleList": "Show in module list", + "EfCoreConfigureMethodName": "Configure method name", + "IsProFilter": "Is pro", + "ApplicationType": "Application type", + "Target": "Target", + "TargetFilter": "Target", + "ModuleClass": "Module class", + "NugetPackageTarget.DomainShared": "Domain Shared", + "NugetPackageTarget.Domain": "Domain", + "NugetPackageTarget.Application": "Application", + "NugetPackageTarget.ApplicationContracts": "Application Contracts", + "NugetPackageTarget.HttpApi": "Http Api", + "NugetPackageTarget.HttpApiClient": "Http Api Client", + "NugetPackageTarget.Web": "Web", + "NugetPackageTarget.EntityFrameworkCore": "Delete Entity Framework Core", + "NugetPackageTarget.MongoDB": "MongoDB", + "Edit": "Edit", + "Delete": "Delete", + "Refresh": "Refresh", + "NpmPackages": "NPM Packages", + "NugetPackages": "Nuget Packages", + "NpmPackageCount": "NPM Package Count", + "NugetPackageCount": "Nuget Package Count", + "Module": "Modules", + "ModuleInfo": "Module info", + "CreateANpmPackage": "Create a NPM package", + "CreateAModule": "Create a module", + "CreateANugetPackage": "Create a Nuget package", + "AddNew": "Add new", + "PackageAlreadyExist{0}": "\"{0}\" package has already been added.", + "ModuleAlreadyExist{0}": "\"{0}\" module has already been added.", + "ClearCache": "Clear cache", + "SuccessfullyCleared": "Successfully cleared", + "Menu:NpmPackages": "NPM Packages", + "Menu:Modules": "Modules", + "Menu:Maintenance": "Maintenance", + "Menu:NugetPackages": "Nuget Packages", + "CreateAnOrganization": "Create an organisation", + "Organizations": "Organisations", + "LongName": "Long name", + "LicenseType": "License type", + "MissingLicenseTypeField": "The license type field is required!", + "LicenseStartTime": "License start time", + "LicenseEndTime": "License end time", + "AllowedDeveloperCount": "Allowed developer count", + "UserNameOrEmailAddress": "Username or email address", + "AddOwner": "Add owner", + "UserName": "Username", + "Email": "Email", + "Developers": "Developers", + "AddDeveloper": "Add developer", + "Create": "Create", + "UserNotFound": "User not found", + "{0}WillBeRemovedFromDevelopers": "{0} Will be removed from developers, please confirm?", + "{0}WillBeRemovedFromOwners": "{0} Will be removed from owners, please confirm?", + "Computers": "Computers", + "UniqueComputerId": "Unique computer id", + "LastSeenDate": "Last seen date", + "{0}Computer{1}WillBeRemovedFromRecords": "Computer of {0} ({1}) will be removed from records", + "OrganizationDeletionWarningMessage": "Organisation will be deleted", + "DeletingLastOwnerWarningMessage": "An organisation must have at least one owner, therefore you cannot remove this owner", + "This{0}AlreadyExistInThisOrganization": "{0} already exist in this organisation", + "AreYouSureYouWantToDeleteAllComputers": "Are you sure you want to delete all computers?", + "DeleteAll": "Delete all", + "DoYouWantToCreateNewUser": "Do you want to create new user?", + "MasterModules": "Master Modules", + "OrganizationName": "Organisation name", + "CreationDate": "Creation date", + "LicenseStartDate": "License start date", + "LicenseEndDate": "License end date", + "OrganizationNamePlaceholder": "Organisation name...", + "TotalQuestionCountPlaceholder": "Total question count...", + "RemainingQuestionCountPlaceholder": "Remaining question count...", + "LicenseTypePlaceholder": "License type...", + "CreationDatePlaceholder": "Creation date...", + "LicenseStartDatePlaceholder": "License start date...", + "LicenseEndDatePlaceholder": "License end date...", + "UsernameOrEmail": "Username or email", + "UsernameOrEmailPlaceholder": "Username or email...", + "Member": "Member", + "PurchaseOrderNo": "Purchase Order No.", + "QuotationDate": "Quotation date", + "CompanyName": "Company name", + "CompanyAddress": "Company address", + "Price": "Price", + "DiscountText": "Discount text", + "DiscountQuantity": "Discount quantity", + "DiscountPrice": "Discount price", + "Quotation": "Quotation", + "ExtraText": "Extra text", + "ExtraAmount": "Extra Amount", + "DownloadQuotation": "Download Quotation", + "Invoice": "Invoice", + "TaxNumber": "Tax No.", + "InvoiceNumber": "Invoice No.", + "InvoiceDate": "Invoice Date", + "InvoiceNote": "Invoice Note", + "Quantity": "Quantity", + "AddProduct": "Add Product", + "AddProductWarning": "You need to add a Product!", + "TotalPrice": "Total Price", + "Generate": "Generate", + "MissingQuantityField": "The Quantity field is required!", + "MissingPriceField": "The Price field is required!", + "CodeUsageStatus": "Status", + "Country": "Country", + "DeveloperCount": "Developer Count", + "RequestCode": "Request Code", + "WebSite": "Website", + "GithubUsername": "Github Username", + "PhoneNumber": "Phone Number", + "ProjectDescription": "Project Description", + "Referrer": "Referrer", + "DiscountRequests": "Discount Request", + "Copylink": "Copy Link", + "Disable": "Disable", + "Enable": "Enable", + "EnableSendEmail": "Enable Send Email", + "SendEmail": "Send Email", + "SuccessfullyDisabled": "Successfully disabled", + "SuccessfullyEnabled": "Successfully enabled", + "EmailSent": "Email sent", + "SuccessfullySent": "Successfully sent", + "SuccessfullyDeleted": "Successfully deleted", + "DiscountRequestDeletionWarningMessage": "Discount request will be deleted", + "BusinessType": "Business Type", + "TotalQuestionCount": "Total question count", + "RemainingQuestionCount": "Remaining question count", + "TotalQuestionMustBeGreaterWarningMessage": "TotalQuestionCount must be greater than RemainingQuestionCount!", + "QuestionCountsMustBeGreaterThanZero": "TotalQuestionCount and RemainingQuestionCount must be zero or greater than zero!", + "UnlimitedQuestionCount": "Unlimited question count", + "Notes": "Notes", + "Menu:Community": "Community", + "Menu:Articles": "Articles", + "Wait": "Wait", + "Approve": "Approve", + "Reject": "Reject", + "Details": "Details", + "Url": "Url", + "Title": "Title", + "ContentSource": "Content source", + "Status": "Status", + "ReadArticle": "Read article", + "ArticleHasBeenWaiting": "Article has been waiting", + "ArticleHasBeenApproved": "Article has been approved", + "ArticleHasBeenRejected": "Article has been rejected", + "Permission:Community": "Community", + "Permission:CommunityArticle": "Article", + "Link": "Link", + "Enum:ContentSource:0": "Github", + "Enum:ContentSource:1": "External", + "Enum:Status:0": "Waiting", + "Enum:Status:1": "Author name", + "Enum:Status:2": "Approved", + "Summary": "Summary", + "AuthorName": "Author", + "CoverImage": "Cover Image", + "RemoveCacheConfirmationMessage": "Are you sure you want remove the cache for \"{0}\" article?", + "SuccessfullyRemoved": "Successfully cleared", + "RemoveCache": "Remove Cache", + "Language": "Language", + "Optional": "Optional", + "CreateArticleLanguageInfo": "The language in which the article is written" + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en-GB.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en-GB.json new file mode 100644 index 0000000000..235a7c61d0 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en-GB.json @@ -0,0 +1,35 @@ +{ + "culture": "en-GB", + "texts": { + "Volo.AbpIo.Domain:010004": "Maximum member count reached!", + "Volo.AbpIo.Domain:010005": "Maximum owner count reached!", + "Volo.AbpIo.Domain:010006": "This user is already an owner in this organisation!", + "Volo.AbpIo.Domain:010007": "This user is already a developer in this organisation!", + "Volo.AbpIo.Domain:010008": "Allowed Developer Count can not be less then current developer count!", + "Volo.AbpIo.Domain:010009": "Allowed Developer Count can not be less then 0!", + "Volo.AbpIo.Domain:010010": "Maximum mac address count has been exceeded!", + "Volo.AbpIo.Domain:010011": "Personal license can't have more than 1 developer!", + "Volo.AbpIo.Domain:010012": "License can't be extended one month after license expires!", + "Volo.AbpIo.Domain:020001": "Couldn't delete this NPM Package because \"{NugetPackages}\" Nuget Packages are dependent to this package.", + "Volo.AbpIo.Domain:020002": "Couldn't delete this NPM Package because \"{Modules}\" Modules are using this package.", + "Volo.AbpIo.Domain:020003": "Couldn't delete this NPM Package because \"{Modules}\" Modules are using this package and \"{NugetPackages}\" Nuget Packages are dependent to this package.", + "Volo.AbpIo.Domain:020004": "Couldn't delete this Nuget Package because \"{Modules}\" Modules are using this package.", + "WantToLearn?": "Want to learn?", + "ReadyToGetStarted?": "Ready to get started?", + "JoinOurCommunity": "Join our community", + "GetStartedUpper": "GET STARTED", + "ForkMeOnGitHub": "Fork me on GitHub", + "Features": "Features", + "GetStarted": "Get Started", + "Documents": "Documents", + "Community": "Community", + "ContributionGuide": "Contribution Guide", + "Blog": "Blog", + "Commercial": "Commercial", + "MyAccount": "My account", + "Permission:License": "License", + "Permission:UserInfo": "User info", + "SeeDocuments": "See Documents", + "Samples": "Samples" + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en-GB.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en-GB.json new file mode 100644 index 0000000000..56f4ed934f --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en-GB.json @@ -0,0 +1,39 @@ +{ + "culture": "en-GB", + "texts": { + "OrganizationManagement": "Organisation Management", + "OrganizationList": "Organisation list", + "Volo.AbpIo.Commercial:010003": "You are not owner of this organisation!", + "OrganizationNotFoundMessage": "Organisation not found!", + "DeveloperCount": "Allocated / total developers", + "QuestionCount": "Remaining / total questions", + "Unlimited": "Unlimited", + "Owners": "Owners", + "AddMember": "Add member", + "AddOwner": "Add owner", + "AddDeveloper": "Add developer", + "UserName": "Username", + "Name": "Name", + "EmailAddress": "Email address", + "Developers": "Developers", + "LicenseType": "License type", + "Manage": "Manage", + "StartDate": "Start date", + "EndDate": "End date", + "Modules": "Modules", + "LicenseExtendMessage": "Your license end date is extended to {0}", + "LicenseUpgradeMessage": "Your license is upgraded to {0}", + "LicenseAddDeveloperMessage": "{0} developers added to your license", + "Volo.AbpIo.Commercial:010004": "Cannot find the specified user! The user must have already registered.", + "MyOrganizations": "My organisations", + "ApiKey": "API key", + "UserNameNotFound": "There is no user with username {0}", + "SuccessfullyAddedToNewsletter": "Thank you for subscribing to our newsletter!", + "MyProfile": "My Profile", + "EmailNotValid": "Please enter a valid email address.", + "JoinOurMarketingNewsletter": "Join our marketing newsletter", + "WouldLikeToReceiveMarketingMaterials": "I would like to receive marketing materials e.g. product deals & special offers.", + "StartUsingYourLicenseNow": "Start using your license now!", + "WelcomePage": "Welcome Page" + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en-GB.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en-GB.json new file mode 100644 index 0000000000..652090d864 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en-GB.json @@ -0,0 +1,106 @@ +{ + "culture": "en-GB", + "texts": { + "Permission:CommunityArticle": "Community Article", + "Permission:Edit": "Edit", + "Waiting": "Waiting", + "Approved": "Approved", + "Rejected": "Rejected", + "Wait": "Wait", + "Approve": "Approve", + "Reject": "Reject", + "ReadArticle": "Read Article", + "Status": "Status", + "ContentSource": "Content Source", + "Details": "Details", + "Url": "Url", + "Title": "Title", + "CreationTime": "Creation time", + "Save": "Save", + "SameUrlAlreadyExist": "The Url already exists. If you want to add this article, you should change the url!", + "UrlIsNotValid": "Url is not valid.", + "UrlNotFound": "Url not found.", + "UrlContentNotFound": "Url content not found.", + "Summary": "Summary", + "MostRead": "Most Read", + "Latest": "Latest", + "ContributeAbpCommunity": "Contribute to the ABP Community", + "SubmitYourArticle": "Submit Your Article", + "ContributionGuide": "Contribution Guide", + "BugReport": "Bug Report", + "SeeAllArticles": "See All Articles", + "WelcomeToABPCommunity!": "Welcome to the ABP Community!", + "MyProfile": "My Profile", + "MyOrganizations": "My Organisations", + "EmailNotValid": "Please enter a valid email address.", + "FeatureRequest": "Feature Request", + "CreateArticleTitleInfo": "Title of the article to be shown on the article list.", + "CreateArticleUrlInfo": "Original GitHub/External URL of the article.", + "CreateArticleSummaryInfo": "A short summary of the article to be shown on the article list.", + "CreateArticleCoverInfo": "To create an effective article, add a cover photo and an upload 16:9 aspect ratio pictures for the best view (Maximum file size: 1MB)", + "ThisExtensionIsNotAllowed": "The extension is not allowed.", + "TheFileIsTooLarge": "The file is too large.", + "GoToTheArticle": "Go to the Article", + "Contribute": "Contribute", + "OverallProgress": "Overall Progress", + "Done": "Done", + "Open": "Open", + "Closed": "Closed", + "LatestQuestionOnThe": "Latest Question on the", + "Stackoverflow": "Stackoverflow", + "Votes": "votes", + "Answer": "Answer", + "Views": "views", + "Answered": "Answered", + "WaitingForYourAnswer": "Waiting for your answer", + "Asked": "asked", + "AllQuestions": "All Questions", + "NextVersion": "Next Version", + "MilestoneErrorMessage": "Couldn't get the current milestone details from Github.", + "QuestionItemErrorMessage": "Couldn't get the latest question details from Stackoverflow.", + "Oops": "Oops!", + "CreateArticleSuccessMessage": "The Article has been successfully submitted. It will be published once it has been reviewed by the site admin.", + "ChooseCoverImage": "Choose a cover image...", + "CoverImage": "Cover Image", + "ShareYourExperiencesWithTheABPFramework": "Share your experiences with the ABP Framework!", + "Optional": "Optional", + "UpdateUserWebSiteInfo": "Example: https://johndoe.com", + "UpdateUserTwitterInfo": "Example: johndoe", + "UpdateUserGithubInfo": "Example: johndoe", + "UpdateUserLinkedinInfo": "Example: https://www.linkedin.com/...", + "UpdateUserCompanyInfo": "Example: Volosoft", + "UpdateUserJobTitleInfo": "Example: Software Developer", + "UserName": "UserName", + "Company": "Company", + "PersonalWebsite": "Personal website", + "RegistrationDate": "Registration date", + "Social": "Social", + "Biography": "Biography", + "HasNoPublishedArticlesYet": "has no published articles yet", + "Author": "Author", + "LatestGithubAnnouncements": "Latest GitHub Announcements", + "SeeAllAnnouncements": "View all Announcements", + "LatestBlogPost": "Latest Blog Post", + "Edit": "Edit", + "ProfileImageChange": "Change the profile image", + "BlogItemErrorMessage": "Couldn't get the latest blog post details from ABP.", + "PlannedReleaseDate": "Planned release date", + "CommunityArticleRequestErrorMessage": "Couldn't get the latest article request from GitHub.", + "ArticleRequestFromGithubIssue": "There aren't any article requests at the moment.", + "LatestArticles": "Latest Articles", + "ArticleRequests": "Article Requests", + "AllArticleRequests": "See all Article requests", + "SubscribeToTheNewsletter": "Subscribe to the Newsletter", + "NewsletterEmailDefinition": "Receive information about what's happening in ABP; new releases, free sources, articles, and more.", + "NoThanks": "No thanks", + "MaybeLater": "Maybe later", + "JoinOurArticleNewsletter": "Join our article newsletter", + "Community": "Community", + "Marketing": "Marketing", + "CommunityPrivacyPolicyConfirmation": "I agree to the Terms & Conditions and Privacy Policy.", + "ArticleRequestMessageTitle": "Open an issue on the GitHub to request an article/tutorial you want to see on this web site.", + "ArticleRequestMessageBody": "Here is the list of the requested articles by the Community. Do you want to write a requested article? Please click on the request and join the discussion.", + "Language": "Language", + "CreateArticleLanguageInfo": "The language in which the article is written" + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en-GB.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en-GB.json new file mode 100644 index 0000000000..2b8978af21 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en-GB.json @@ -0,0 +1,197 @@ +{ + "culture": "en-GB", + "texts": { + "GetStarted": "Get Started - Startup Templates", + "Create": "Create", + "NewProject": "New Project", + "DirectDownload": "Direct Download", + "ProjectName": "Project name", + "ProjectType": "Project type", + "DatabaseProvider": "Database provider", + "NTier": "N-Tier", + "IncludeUserInterface": "Include user interface", + "CreateNow": "Create now", + "TheStartupProject": "The startup project", + "Tutorial": "Tutorial", + "UsingCLI": "Using CLI", + "SeeDetails": "See Details", + "AbpShortDescription": "ABP Framework is a complete infrastructure to create modern web applications by following the software development best practices and conventions.", + "SourceCodeUpper": "SOURCE CODE", + "LatestReleaseLogs": "Latest release logs", + "Infrastructure": "Infrastructure", + "Architecture": "Architecture", + "Modular": "Modular", + "DontRepeatYourself": "Don’t Repeat Yourself", + "DeveloperFocused": "Developer Focused", + "FullStackApplicationInfrastructure": "Full stack application infrastructure.", + "DomainDrivenDesign": "Domain Driven Design", + "DomainDrivenDesignExplanation": "Designed and developed based on DDD patterns and principles. Provides a layered model for your application.", + "Authorization": "Authorisation", + "AuthorizationExplanation": "Advanced authorisation with user, role and fine-grained permission system. Built on the Microsoft Identity library.", + "MultiTenancy": "Multi-Tenancy", + "MultiTenancyExplanationShort": "SaaS applications made easy! Integrated multi-tenancy from database to UI.", + "CrossCuttingConcerns": "Cross Cutting Concerns", + "CrossCuttingConcernsExplanationShort": "Complete infrastructure for authorization, validation, exception handling, caching, audit logging, transaction management and more.", + "BuiltInBundlingMinification": "Built-In Bundling & Minification", + "BuiltInBundlingMinificationExplanation": "No need to use external tools for bundling & minification. ABP offers a simpler, dynamic, powerful, modular and built-in way!", + "VirtualFileSystem": "Virtual File System", + "VirtualFileSystemExplanation": "Embed views, scripts, styles, images... into packages/libraries and reuse them in different applications.", + "Theming": "Theming", + "ThemingExplanationShort": "Use and customise the bootstrap-based standard UI theme or create your own.", + "BootstrapTagHelpersDynamicForms": "Bootstrap Tag Helpers & Dynamic Forms", + "BootstrapTagHelpersDynamicFormsExplanation": "Instead of manually writing bootstrap components, Use ABP's tag helpers to simplify and take advantage of intellisense. Quickly build UI forms based on a C# model using the dynamic form tag helper.", + "HTTPAPIsDynamicProxies": "HTTP APIs & Dynamic Proxies", + "HTTPAPIsDynamicProxiesExplanation": "Automatically expose application services as REST style HTTP APIs, and consume them with dynamic JavaScript and C# proxies.", + "CompleteArchitectureInfo": "Modern architecture to create maintainable software solutions.", + "DomainDrivenDesignBasedLayeringModelExplanation": "Helps you to implement a DDD based layered architecture and build a maintainable code base.", + "DomainDrivenDesignBasedLayeringModelExplanationCont": "Provides startup templates, abstractions, base classes, services, documentation and guides to help you to develop your application based on DDD patterns & principles.", + "MicroserviceCompatibleModelExplanation": "The core framework & pre-build modules are designed with microservice architecture in mind.", + "MicroserviceCompatibleModelExplanationCont": "Provides infrastructure, integrations, samples and documentation to implement microservice solutions easier, while it doesn’t bring additional complexity if you want a monolithic application.", + "ModularInfo": "ABP provides a module system that allows you to develop reusable application modules, tie into application lifecycle events, and express dependencies between core parts of your system.", + "PreBuiltModulesThemes": "Pre-Built Modules & Themes", + "PreBuiltModulesThemesExplanation": "Open source and commercial modules & themes are ready to use in your business application.", + "NuGetNPMPackages": "NuGet & NPM Packages", + "NuGetNPMPackagesExplanation": "Distributed as NuGet & NPM packages. Easy to install and upgrade.", + "ExtensibleReplaceable": "Extensible/Replaceable", + "ExtensibleReplaceableExplanation": "All services & modules are designed extensibility in mind. You can replace services, pages, styles and components.", + "CrossCuttingConcernsExplanation2": "Keep your codebase smaller so you can maintain focus on the code that’s specific to your business.", + "CrossCuttingConcernsExplanation3": "Don’t spend time implementing common application requirements on multiple projects.", + "AuthenticationAuthorization": "Authentication & Authorization", + "ExceptionHandling": "Exception Handling", + "Validation": "Validation", + "DatabaseConnection": "Database Connection", + "TransactionManagement": "Transaction management", + "AuditLogging": "Audit Logging", + "Caching": "Caching", + "Multitenancy": "Multitenancy", + "DataFiltering": "Data filtering", + "ConventionOverConfiguration": "Convention Over Configuration", + "ConventionOverConfigurationExplanation": "ABP implements common application conventions by default with a minimal or zero configuration.", + "ConventionOverConfigurationExplanationList1": "Auto registers known services to dependency injection.", + "ConventionOverConfigurationExplanationList2": "Exposes application services as HTTP APIs by naming conventions.", + "ConventionOverConfigurationExplanationList3": "Creates dynamic HTTP client proxies for C# and JavaScript.", + "ConventionOverConfigurationExplanationList4": "Provides default repositories for your entities.", + "ConventionOverConfigurationExplanationList5": "Manages Unit of Work per web request or application service method.", + "ConventionOverConfigurationExplanationList6": "Publishes create, update & delete events for your entities.", + "BaseClasses": "Base Classes", + "BaseClassesExplanation": "Pre-built base classes for common application patterns.", + "DeveloperFocusedExplanation": "ABP is for developers.", + "DeveloperFocusedExplanationCont": "It aims to simplify your daily software development while not restricting you from writing low level code.", + "SeeAllFeatures": "See All Features", + "CLI_CommandLineInterface": "CLI (Command Line Interface)", + "CLI_CommandLineInterfaceExplanation": "Includes a CLI to help you automate the creation of new projects and the addition of new modules.", + "StartupTemplates": "Startup Templates", + "StartupTemplatesExplanation": "Various startup templates provide a fully configured solution to jump start your development.", + "BasedOnFamiliarTools": "Based on Familiar Tools", + "BasedOnFamiliarToolsExplanation": "Built and integrated with popular tools you already know. Low learning curve, easy adaptation, comfortable development.", + "ORMIndependent": "ORM Independent", + "ORMIndependentExplanation": "The core framework is ORM/database independent and can work with any data source. Entity Framework Core and MongoDB providers are already available.", + "Features": "Explore the ABP Framework Features", + "ABPCLI": "ABP CLI", + "Modularity": "Modularity", + "BootstrapTagHelpers": "Bootstrap Tag Helpers", + "DynamicForms": "Dynamic Forms", + "BundlingMinification": "Bundling & Minification", + "BackgroundJobs": "Background Jobs", + "BackgroundJobsExplanation": "Define simple classes to execute jobs in the background as queued. Use the built-in job manager or integrate your own. Hangfire & RabbitMQ integrations are already available.", + "DDDInfrastructure": "DDD Infrastructure", + "DomainDrivenDesignInfrastructure": "Domain Driven Design Infrastructure", + "AutoRESTAPIs": "Auto REST APIs", + "DynamicClientProxies": "Dynamic Client Proxies", + "DistributedEventBus": "Distributed Event Bus", + "DistributedEventBusWithRabbitMQIntegration": "Distributed Event Bus with RabbitMQ Integration", + "TestInfrastructure": "Test Infrastructure", + "AuditLoggingEntityHistories": "Audit Logging & Entity Histories", + "ObjectToObjectMapping": "Object to Object Mapping", + "ObjectToObjectMappingExplanation": "Object to object mapping abstraction with AutoMapper integration.", + "EmailSMSAbstractions": "Email & SMS Abstractions", + "EmailSMSAbstractionsWithTemplatingSupport": "Email & SMS Abstractions with Templating Support", + "Localization": "Localization", + "SettingManagement": "Setting Management", + "ExtensionMethods": "Extension Methods", + "ExtensionMethodsHelpers": "Extension Methods & Helpers", + "AspectOrientedProgramming": "Aspect Oriented Programming", + "DependencyInjection": "Dependency Injection", + "DependencyInjectionByConventions": "Dependency Injection by Conventions", + "ABPCLIExplanation": "The ABP CLI (Command Line Interface) is a command line tool to perform common operations for ABP based solutions.", + "ModularityExplanation": "ABP provides a complete infrastructure to build your own application modules those may have entities, services, database integration, APIs, UI components and so on.", + "MultiTenancyExplanation": "ABP framework not only supports to develop multi-tenant applications, but also makes your code mostly unaware of the multi-tenancy.", + "MultiTenancyExplanation2": "Can automatically determine the current Tenant and isolate each Tenant's data from each other.", + "MultiTenancyExplanation3": "Supports single database, database per tenant and hybrid approaches.", + "MultiTenancyExplanation4": "You focus on your business code and let the framework to handle multi-tenancy on behalf of you.", + "BootstrapTagHelpersExplanation": "Instead of manually writing the repeating details of bootstrap components, use ABP's tag helpers to simplify and take advantage of intellisense. You can use Bootstrap whenever you need it.", + "DynamicFormsExplanation": "Dynamic form & input tag helpers can create the complete form from a C# class as the model.", + "AuthenticationAuthorizationExplanation": "Rich authentication & authorization options integrated to ASP.NET Core Identity & IdentityServer4. Provides an extensible & detailed permission system.", + "CrossCuttingConcernsExplanation": "Don't repeat yourself when implementing common features. Instead, focus on your business logic and let ABP automate by convention.", + "DatabaseConnectionTransactionManagement": "Database Connection & Transaction Management", + "CorrelationIdTracking": "Correlation-Id Tracking", + "BundlingMinificationExplanation": "ABP offers a simple, dynamic, powerful, modular and built-in bundling & minification system.", + "VirtualFileSystemnExplanation": "The Virtual File System makes it possible to manage files those do not physically exist on the file system (disk). It's mainly used to embed (js, css, image, cshtml...) files into assemblies and use them like physical files on runtime.", + "ThemingExplanation": "Theming system allows to develop your application & modules theme independent by defining a set of common base libraries and layouts, based on the latest Bootstrap framework.", + "DomainDrivenDesignInfrastructureExplanation": "A complete infrastructure to build layered applications based on the Domain Driven Design patterns & principles.", + "Specification": "Specification", + "Repository": "Repository", + "DomainService": "Domain Service", + "ValueObject": "Value Object", + "ApplicationService": "Application Service", + "DataTransferObject": "Data Transfer Object", + "AggregateRootEntity": "Aggregate Root, Entity", + "AutoRESTAPIsExplanation": "ABP can automagically configure your application services as API Controllers by convention.", + "DynamicClientProxiesExplanation": "Easily consume your APIs from JavaScript and C# clients.", + "DistributedEventBusWithRabbitMQIntegrationExplanation": "Easily publish & consume distributed events using built-in Distributed Event Bus with RabbitMQ integration available.", + "TestInfrastructureExplanation": "The framework has been developed unit & integration testing in mind. Provides you base classes to make it easier. Startup templates come with pre-configured for testing.", + "AuditLoggingEntityHistoriesExplanation": "Built-in audit logging for business-critical applications. Request, service, method level audit logging and entity histories with property-level details.", + "EmailSMSAbstractionsWithTemplatingSupportExplanation": "IEmailSender and ISmsSender abstractions decouples your application logic from the infrastructure. Advanced email template system allows to create & localize email templates and easily use whenever needed.", + "LocalizationExplanation": "Localization system allows to create resources in plain JSON files and use them to localize your UI. It supports advanced scenarios like inheritance, extensions and JavaScript integration while it is fully compatible with AspNet Core's localization system.", + "SettingManagementExplanation": "Define settings for your application and get values on runtime based on the current configuration, tenant and user.", + "ExtensionMethodsHelpersExplanation": "Don't repeat yourself even for trivial code parts. Extensions & helpers for standard types makes your code much cleaner and easy to write.", + "AspectOrientedProgrammingExplanation": "Provides a comfortable infrastructure to create dynamic proxies and implement Aspect Oriented Programming. Intercept any class and execute your code before & after every method execution.", + "DependencyInjectionByConventionsExplanation": "No need to register your classes to dependency injection manually. Automatically registers common service types by convention. For other type of services, you can use interfaces and attributes to make it easier and in-place.", + "DataFilteringExplanation": "Define and use data filters those are automatically applied when you query entities from database. Soft Delete & Multi-Tenant filters are provided out of the box when you implement simple interfaces.", + "PublishEvents": "Publish Events", + "HandleEvents": "Handle Events", + "AndMore": "and more...", + "Code": "Code", + "Result": "Result", + "SeeTheDocumentForMoreInformation": "See the {0} document for more information", + "IndexPageHeroSection": "open sourceWeb Application
Framework
for asp.net core", + "UiFramework": "UI Framework", + "EmailAddress": "Email address", + "Mobile": "Mobile", + "ReactNative": "React Native", + "Strong": "Strong", + "Complete": "Complete", + "BasedLayeringModel": "Based Layering Model", + "Microservice": "Microservice", + "Compatible": "Compatible", + "MeeTTheABPCommunityInfo": "Our mission is to create an environment where developers can help each other with articles, tutorials, case studies, etc. and meet like-minded people.", + "JoinTheABPCommunityInfo": "Get involved with a vibrant community and become a contributor to the ABP Framework!", + "AllArticles": "All Articles", + "SubmitYourArticle": "Submit Your Article", + "DynamicClientProxyDocument": "See the dynamic client proxy documentations for JavaScript & C#.", + "EmailSMSAbstractionsDocument": "See the emailing and SMS sending documents for more information.", + "CreateProjectWizard": "This wizard creates a new project from the startup template which is properly configured to jump start to your project.", + "TieredOption": "Creates a tiered solution where Web and Http API layers are physically separated. If not checked, creates a layered solution which is less complex and suitable for most scenarios.", + "SeparateIdentityServerOption": "Separates server side into two applications: First one is for the identity server and the second one is for your server side HTTP API.", + "UseslatestPreVersion": "Uses latest pre-release version", + "ReadTheDocumentation": "ReadThe Documentation", + "Documentation": "Documentation", + "GettingStartedTutorial": "Getting Started Tutorial", + "ApplicationDevelopmentTutorial": "Application Development Tutorial", + "TheStartupTemplate": "The Startup Template", + "InstallABPCLIInfo": "ABP CLI is the fastest way to start a new solution with the ABP framework. Install the ABP CLI using a command line window:", + "DifferentLevelOfNamespaces": "You can use different level of namespaces; e.g. BookStore, Acme.BookStore or Acme.Retail.BookStore.", + "ABPCLIExamplesInfo": "new command creates a layered MVC application with Entity Framework Core as the database provider. However, it has additional options. Examples:", + "SeeCliDocumentForMoreInformation": "See the ABP CLI document for more options or select the \"Direct Download\" tab above.", + "Optional": "Optional", + "LocalFrameworkRef": "Keep local project reference for the framework packages.", + "BlobStoring": "BLOB Storing", + "BlobStoringExplanation": "BLOB Storing system provides an abstraction to work with BLOBs. ABP provides some pre-built storage provider integrations (Azure, AWS, File System, Database, etc.) that you can easily use in your applications.", + "TextTemplating": "Text Templating", + "TextTemplatingExplanation": "Text templating is used to dynamically render contents based on a template and a model (a data object). For example, you can use it to create dynamic email contents with a pre-built template.", + "MultipleUIOptions": "Multiple UI Options", + "MultipleDBOptions": "Multiple Database Providers", + "MultipleUIOptionsExplanation": "The core framework is designed as UI independent and can work with any type of UI system, while there are multiple pre-built and integrated options are provided out of the box.", + "MultipleDBOptionsExplanation": "The framework can work with any data source, while the following providers are officially developed and supported:" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/en-GB.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/en-GB.json new file mode 100644 index 0000000000..be5593fbd3 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/en-GB.json @@ -0,0 +1,12 @@ +{ + "culture": "en-GB", + "texts": { + "GivenTenantIsNotAvailable": "Given tenant is not available: {0}", + "Tenant": "Tenant", + "Switch": "switch", + "Name": "Name", + "SwitchTenantHint": "Leave the name field blank to switch to the host side.", + "SwitchTenant": "Switch tenant", + "NotSelected": "Not selected" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/en-GB.json b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/en-GB.json new file mode 100644 index 0000000000..eabf109a5c --- /dev/null +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/en-GB.json @@ -0,0 +1,10 @@ +{ + "culture": "en-GB", + "texts": { + "Volo.Authorization:010001": "Authorisation failed! Given policy has not granted.", + "Volo.Authorization:010002": "Authorisation failed! Given policy has not granted: {PolicyName}", + "Volo.Authorization:010003": "Authorisation failed! Given policy has not granted for given resource: {ResourceName}", + "Volo.Authorization:010004": "Authorisation failed! Given requirement has not granted for given resource: {ResourceName}", + "Volo.Authorization:010005": "Authorisation failed! Given requirements has not granted for given resource: {ResourceName}" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/en-GB.json b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/en-GB.json new file mode 100644 index 0000000000..aab92d7066 --- /dev/null +++ b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/en-GB.json @@ -0,0 +1,6 @@ +{ + "culture": "en-GB", + "texts": { + "MaxResultCountExceededExceptionMessage": "{0} can not be more than {1}! Increase {2}.{3} on the server side to allow more results." + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/en-GB.json b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/en-GB.json new file mode 100644 index 0000000000..85c8072a37 --- /dev/null +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/en-GB.json @@ -0,0 +1,25 @@ +{ + "culture": "en-GB", + "texts": { + "DisplayName:Abp.Mailing.DefaultFromAddress": "Default from address", + "DisplayName:Abp.Mailing.DefaultFromDisplayName": "Default from display name", + "DisplayName:Abp.Mailing.Smtp.Host": "Host", + "DisplayName:Abp.Mailing.Smtp.Port": "Port", + "DisplayName:Abp.Mailing.Smtp.UserName": "User name", + "DisplayName:Abp.Mailing.Smtp.Password": "Password", + "DisplayName:Abp.Mailing.Smtp.Domain": "Domain", + "DisplayName:Abp.Mailing.Smtp.EnableSsl": "Enable SSL", + "DisplayName:Abp.Mailing.Smtp.UseDefaultCredentials": "Use default credentials", + "Description:Abp.Mailing.DefaultFromAddress": "The default from address", + "Description:Abp.Mailing.DefaultFromDisplayName": "The default from display name", + "Description:Abp.Mailing.Smtp.Host": "The name or IP address of the host used for SMTP transactions.", + "Description:Abp.Mailing.Smtp.Port": "The port used for SMTP transactions.", + "Description:Abp.Mailing.Smtp.UserName": "Username associated with the credentials.", + "Description:Abp.Mailing.Smtp.Password": "The password for the user name associated with the credentials.", + "Description:Abp.Mailing.Smtp.Domain": "The domain or computer name that verifies the credentials.", + "Description:Abp.Mailing.Smtp.EnableSsl": "Whether the SmtpClient uses Secure Sockets Layer (SSL) to encrypt the connection.", + "Description:Abp.Mailing.Smtp.UseDefaultCredentials": "Whether the DefaultCredentials are sent with requests.", + "TextTemplate:StandardEmailTemplates.Layout": "Default email layout template", + "TextTemplate:StandardEmailTemplates.Message": "Simple message template for emails" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/en-GB.json b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/en-GB.json new file mode 100644 index 0000000000..d91aea7708 --- /dev/null +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/en-GB.json @@ -0,0 +1,25 @@ +{ + "culture": "en-GB", + "texts": { + "InternalServerErrorMessage": "An internal error occurred during your request!", + "ValidationErrorMessage": "Your request is not valid!", + "ValidationNarrativeErrorMessageTitle": "The following errors were detected during validation.", + "DefaultErrorMessage": "An error has occurred!", + "DefaultErrorMessageDetail": "Error detail not sent by server.", + "DefaultErrorMessage401": "You are not authenticated!", + "DefaultErrorMessage401Detail": "You should sign in to perform this operation.", + "DefaultErrorMessage403": "You are not authorised!", + "DefaultErrorMessage403Detail": "You are not allowed to perform this operation!", + "DefaultErrorMessage404": "Resource not found!", + "DefaultErrorMessage404Detail": "The resource requested could not found on the server!", + "EntityNotFoundErrorMessage": "There is no entity {0} with id = {1}!", + "Error": "Error", + "UnhandledException": "Unhandled exception!", + "401Message": "Unauthorized", + "403Message": "Forbidden", + "404Message": "Page not found", + "500Message": "Internal Server Error", + "403MessageDetail": "You are not authorised to perform this operation!", + "404MessageDetail": "Sorry, there's nothing at this address." + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Features/Volo/Abp/Features/Localization/en-GB.json b/framework/src/Volo.Abp.Features/Volo/Abp/Features/Localization/en-GB.json new file mode 100644 index 0000000000..4836a142ae --- /dev/null +++ b/framework/src/Volo.Abp.Features/Volo/Abp/Features/Localization/en-GB.json @@ -0,0 +1,8 @@ +{ + "culture": "en-GB", + "texts": { + "Volo.Feature:010001": "Feature is not enabled: {FeatureName}", + "Volo.Feature:010002": "Required features are not enabled. All of these features must be enabled: {FeatureNames}", + "Volo.Feature:010003": "Required features are not enabled. At least one of these features must be enabled: {FeatureNames}" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/en-GB.json b/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/en-GB.json new file mode 100644 index 0000000000..e78c9bf746 --- /dev/null +++ b/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/en-GB.json @@ -0,0 +1,15 @@ +{ + "culture": "en-GB", + "texts": { + "DisplayName:Abp.Ldap.ServerHost": "Server host", + "Description:Abp.Ldap.ServerHost": "Server host", + "DisplayName:Abp.Ldap.ServerPort": "Server port", + "Description:Abp.Ldap.ServerPort": "Server port", + "DisplayName:Abp.Ldap.BaseDc": "Base domain component", + "Description:Abp.Ldap.BaseDc": "Base domain component", + "DisplayName:Abp.Ldap.UserName": "Username", + "Description:Abp.Ldap.UserName": "Username", + "DisplayName:Abp.Ldap.Password": "Password", + "Description:Abp.Ldap.Password": "Password" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/en-GB.json b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/en-GB.json new file mode 100644 index 0000000000..b081ef57f0 --- /dev/null +++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/en-GB.json @@ -0,0 +1,7 @@ +{ + "culture": "en-GB", + "texts": { + "DisplayName:Abp.Localization.DefaultLanguage": "Default language", + "Description:Abp.Localization.DefaultLanguage": "The default language of the application." + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/en-GB.json b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/en-GB.json new file mode 100644 index 0000000000..ed00dc560b --- /dev/null +++ b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/en-GB.json @@ -0,0 +1,7 @@ +{ + "culture": "en-GB", + "texts": { + "DisplayName:Abp.Timing.Timezone": "Timezone", + "Description:Abp.Timing.Timezone": "Application time zone" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/en-GB.json b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/en-GB.json new file mode 100644 index 0000000000..2633c31298 --- /dev/null +++ b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/en-GB.json @@ -0,0 +1,6 @@ +{ + "culture": "en-GB", + "texts": { + "Menu:Administration": "Administration" + } +} \ 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 new file mode 100644 index 0000000000..b0d0922089 --- /dev/null +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en-GB.json @@ -0,0 +1,52 @@ +{ + "culture": "en-GB", + "texts": { + "Languages": "Languages", + "AreYouSure": "Are you sure?", + "Cancel": "Cancel", + "Clear": "Clear", + "Yes": "Yes", + "No": "No", + "Ok": "Ok", + "Close": "Close", + "Save": "Save", + "SavingWithThreeDot": "Saving", + "Actions": "Actions", + "Delete": "Delete", + "Edit": "Edit", + "Refresh": "Refresh", + "Language": "Language", + "LoadMore": "Load more", + "ProcessingWithThreeDot": "Processing...", + "LoadingWithThreeDot": "Loading...", + "Welcome": "Welcome", + "Login": "Login", + "Register": "Register", + "Logout": "Logout", + "Submit": "Submit", + "Back": "Back", + "PagerSearch": "Search", + "PagerNext": "Next", + "PagerPrevious": "Previous", + "PagerFirst": "First", + "PagerLast": "Last", + "PagerInfo": "Showing _START_ to _END_ of _TOTAL_ entries", + "PagerInfo{0}{1}{2}": "Showing {0} to {1} of {2} entries", + "PagerInfoEmpty": "Showing 0 to 0 of 0 entries", + "PagerInfoFiltered": "(filtered from _MAX_ total entries)", + "NoDataAvailableInDatatable": "No data available", + "Total": "total", + "Selected": "selected", + "PagerShowMenuEntries": "Show _MENU_ entries", + "DatatableActionDropdownDefaultText": "Actions", + "ChangePassword": "Change Password", + "PersonalInfo": "My Profile", + "AreYouSureYouWantToCancelEditingWarningMessage": "You have unsaved changes.", + "GoHomePage": "Go to the homepage", + "GoBack": "Go back", + "Search": "Search", + "ItemWillBeDeletedMessageWithFormat": "{0} will be deleted!", + "ItemWillBeDeletedMessage": "This item will be deleted!", + "ManageYourAccount": "Manage your account" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/en-GB.json b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/en-GB.json new file mode 100644 index 0000000000..a53b55a853 --- /dev/null +++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/en-GB.json @@ -0,0 +1,32 @@ +{ + "culture": "en-GB", + "texts": { + "'{0}' and '{1}' do not match.": "'{0}' and '{1}' do not match.", + "The {0} field is not a valid credit card number.": "The {0} field is not a valid credit card number.", + "{0} is not valid.": "{0} is not valid.", + "The {0} field is not a valid e-mail address.": "The {0} field is not a valid Email address.", + "The {0} field only accepts files with the following extensions: {1}": "The {0} field only accepts files with the following extensions: {1}", + "The field {0} must be a string or array type with a maximum length of '{1}'.": "The field {0} must be a string or array type with a maximum length of '{1}'.", + "The {0} field is not a valid phone number.": "The {0} field is not a valid phone number.", + "The field {0} must be between {1} and {2}.": "The field {0} must be between {1} and {2}.", + "The field {0} must match the regular expression '{1}'.": "The field {0} does not match the requested format.", + "The {0} field is required.": "The {0} field is required.", + "The field {0} must be a string with a maximum length of {1}.": "The field {0} must be a string with a maximum length of {1}.", + "The field {0} must be a string with a minimum length of {2} and a maximum length of {1}.": "The field {0} must be a string with a minimum length of {2} and a maximum length of {1}.", + "The {0} field is not a valid fully-qualified http, https, or ftp URL.": "The {0} field is not a valid fully-qualified http, https, or ftp Url.", + "The field {0} is invalid.": "The field {0} is invalid.", + "ThisFieldIsNotAValidCreditCardNumber.": "This field is not a valid credit card number.", + "ThisFieldIsNotValid.": "This field is not valid.", + "ThisFieldIsNotAValidEmailAddress.": "This field is not a valid e-mail address.", + "ThisFieldOnlyAcceptsFilesWithTheFollowingExtensions:{0}": "This field only accepts files with the following extensions: {0}", + "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}": "This field must be a string or array type with a maximum length of '{0}'.", + "ThisFieldIsNotAValidPhoneNumber.": "This field is not a valid phone number.", + "ThisFieldMustBeBetween{0}And{1}": "This field must be between {0} and {1}.", + "ThisFieldMustMatchTheRegularExpression{0}": "This field must match the regular expression '{0}'.", + "ThisFieldIsRequired.": "This field is required.", + "ThisFieldMustBeAStringWithAMaximumLengthOf{0}": "This field must be a string with a maximum length of {0}.", + "ThisFieldMustBeAStringWithAMinimumLengthOf{1}AndAMaximumLengthOf{0}": "This field must be a string with a minimum length of {1} and a maximum length of {0}.", + "ThisFieldIsNotAValidFullyQualifiedHttpHttpsOrFtpUrl": "This field is not a valid fully-qualified http, https, or ftp URL.", + "ThisFieldIsInvalid.": "This field is invalid." + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/en-GB.json b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/en-GB.json new file mode 100644 index 0000000000..72096e5385 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/en-GB.json @@ -0,0 +1,7 @@ +{ + "culture": "en-GB", + "texts": { + "BirthDate": "Birth date", + "Value1": "Value One" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/en-GB.json b/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/en-GB.json new file mode 100644 index 0000000000..65795ab007 --- /dev/null +++ b/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/en-GB.json @@ -0,0 +1,6 @@ +{ + "culture": "en-GB", + "texts": { + "hello": "Hello" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Localization/en-GB.json b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Localization/en-GB.json new file mode 100644 index 0000000000..c4f07268eb --- /dev/null +++ b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Localization/en-GB.json @@ -0,0 +1,6 @@ +{ + "culture": "en-GB", + "texts": { + "Volo.Abp.Http.DynamicProxying:10001": "Business exception with data: {0}" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/en-GB.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/en-GB.json new file mode 100644 index 0000000000..e54ebaa1f4 --- /dev/null +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/en-GB.json @@ -0,0 +1,7 @@ +{ + "culture": "en-GB", + "texts": { + "USA": "United States of America", + "Brazil": "Brazil" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/en-GB.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/en-GB.json new file mode 100644 index 0000000000..1ea8167f36 --- /dev/null +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/en-GB.json @@ -0,0 +1,7 @@ +{ + "culture": "en-GB", + "texts": { + "ThisFieldIsRequired": "This field is required", + "MaxLenghtErrorMessage": "This field can be maximum of '{0}' chars" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/en-GB.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/en-GB.json new file mode 100644 index 0000000000..4e80b6d07d --- /dev/null +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/en-GB.json @@ -0,0 +1,11 @@ +{ + "culture": "en-GB", + "texts": { + "Hello {0}.": "Hello {0}.", + "Car": "Car", + "CarPlural": "Cars", + "MaxLenghtErrorMessage": "This field's length can be a maximum of '{0}' chars", + "Universe": "Universe", + "FortyTwo": "Forty Two" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/en-GB.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/en-GB.json new file mode 100644 index 0000000000..65cf997055 --- /dev/null +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/en-GB.json @@ -0,0 +1,6 @@ +{ + "culture": "en-GB", + "texts": { + "SeeYou": "See you" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/Localization/en-GB.json b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/Localization/en-GB.json new file mode 100644 index 0000000000..75d5e13551 --- /dev/null +++ b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/Localization/en-GB.json @@ -0,0 +1,7 @@ +{ + "culture": "en-GB", + "texts": { + "HelloText": "Hello {0}", + "HowAreYou": "how are you?" + } +} \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en-GB.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en-GB.json new file mode 100644 index 0000000000..297a656477 --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en-GB.json @@ -0,0 +1,65 @@ +{ + "culture": "en-GB", + "texts": { + "UserName": "Username", + "EmailAddress": "Email address", + "UserNameOrEmailAddress": "Username or email address", + "Password": "Password", + "RememberMe": "Remember me", + "UseAnotherServiceToLogin": "Use another service to log in", + "UserLockedOutMessage": "The user account has been locked out due to invalid login attempts. Please wait a while and try again.", + "InvalidUserNameOrPassword": "Invalid username or password!", + "LoginIsNotAllowed": "You are not allowed to login! You need to confirm your email/phone number.", + "SelfRegistrationDisabledMessage": "Self-registration is disabled for this application. Please contact the application administrator to register a new user.", + "LocalLoginDisabledMessage": "Local login is disabled for this application.", + "Login": "Login", + "Cancel": "Cancel", + "Register": "Register", + "AreYouANewUser": "Are you a new user?", + "AlreadyRegistered": "Already registered?", + "InvalidLoginRequest": "Invalid login request", + "ThereAreNoLoginSchemesConfiguredForThisClient": "There are no login schemes configured for this client.", + "LogInUsingYourProviderAccount": "Log in using your {0} account", + "DisplayName:CurrentPassword": "Current password", + "DisplayName:NewPassword": "New password", + "DisplayName:NewPasswordConfirm": "Confirm new password", + "PasswordChangedMessage": "Your password has been successfully changed.", + "DisplayName:UserName": "Username", + "DisplayName:Email": "Email", + "DisplayName:Name": "Name", + "DisplayName:Surname": "Surname", + "DisplayName:Password": "Password", + "DisplayName:EmailAddress": "Email address", + "DisplayName:PhoneNumber": "Phone number", + "PersonalSettings": "Personal settings", + "PersonalSettingsSaved": "Personal settings saved", + "PasswordChanged": "Password changed", + "NewPasswordConfirmFailed": "Please confirm the new password.", + "Manage": "Manage", + "ManageYourProfile": "Manage your profile", + "DisplayName:Abp.Account.IsSelfRegistrationEnabled": "Is self-registration enabled", + "Description:Abp.Account.IsSelfRegistrationEnabled": "Whether a user can register the account by his or her self.", + "DisplayName:Abp.Account.EnableLocalLogin": "Authenticate with a local account", + "Description:Abp.Account.EnableLocalLogin": "Indicates if the server will allow users to authenticate with a local account.", + "LoggedOutTitle": "Signed Out", + "LoggedOutText": "You have been signed out and you will be redirected soon.", + "ReturnToText": "Click here to redirect to {0}", + "OrLoginWith": "Or login with:", + "ForgotPassword": "Forgot password?", + "SendPasswordResetLink_Information": "A password reset link will be sent to your email to reset your password. If you don't get an email within a few minutes, please re-try.", + "PasswordResetMailSentMessage": "Account recovery email has been sent to your e-mail address. If you receive the email within 15 minutes, check your spam/junk folder. If you find it there, please mark it as -Not Junk-.", + "ResetPassword": "Reset Password", + "ConfirmPassword": "Confirm (repeat) the password", + "ResetPassword_Information": "Please enter your new password.", + "YourPasswordIsSuccessfullyReset": "Your password has been successfully reset.", + "GoToTheApplication": "Go to the application", + "BackToLogin": "Back to login", + "ProfileTab:Password": "Change password", + "ProfileTab:PersonalInfo": "Personal info", + "ReturnToApplication": "Return to application", + "Volo.Account:InvalidEmailAddress": "Cannot find the given email address: {0}", + "PasswordReset": "Password reset", + "PasswordResetInfoInEmail": "We received an account recovery request! If you initiated this request, click the following link to reset your password.", + "ResetMyPassword": "Reset my password" + } +} \ No newline at end of file diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/Localization/en-GB.json b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/Localization/en-GB.json new file mode 100644 index 0000000000..6369087fa8 --- /dev/null +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/Localization/en-GB.json @@ -0,0 +1,6 @@ +{ + "culture": "en-GB", + "texts": { + "ManageYourProfile": "Manage your profile" + } +} \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/en-GB.json b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/en-GB.json new file mode 100644 index 0000000000..39c2e5b069 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/en-GB.json @@ -0,0 +1,58 @@ +{ + "culture": "en-GB", + "texts": { + "Menu:Blogs": "Blogs", + "Menu:BlogManagement": "Blogging", + "Permission:Management": "Management", + "Permission:Edit": "Edit", + "Permission:Create": "Create", + "Permission:Delete": "Delete", + "Permission:Blogging": "Blog", + "Permission:Blogs": "Blogs", + "Permission:Posts": "Posts", + "Permission:Tags": "Tags", + "Permission:Comments": "Comments", + "Title": "Title", + "Delete": "Delete", + "Reply": "Reply", + "ReplyTo": "Reply To {0}", + "ContinueReading": "Continue Reading", + "DaysAgo": "{0} day(s) ago", + "YearsAgo": "{0} year(s) ago", + "MonthsAgo": "{0} month(s) ago", + "WeeksAgo": "{0} week(s) ago", + "MinutesAgo": "{0} minute(s) ago", + "SecondsAgo": "{0} second(s) ago", + "HoursAgo": "{0} hour(s) ago", + "Now": "now", + "Content": "Content", + "SeeAll": "See All", + "PopularTags": "Popular Tags", + "WiewsWithCount": "{0} views", + "LastPosts": "Last Posts", + "LeaveComment": "Leave Comment", + "TagsInThisArticle": "Tags in this article", + "Posts": "Posts", + "Edit": "Edit", + "BLOG": "BLOG", + "CommentDeletionWarningMessage": "Comment will be deleted.", + "PostDeletionWarningMessage": "Post will be deleted.", + "BlogDeletionWarningMessage": "Blog will be deleted.", + "AreYouSure": "Are you sure?", + "CommentWithCount": "{0} comments", + "Comment": "Comment", + "ShareOnTwitter": "Share On Twitter", + "CoverImage": "Cover Image", + "CreateANewPost": "Create A New Post", + "CreateANewBlog": "Create A New Blog", + "WhatIsNew": "What's new?", + "Name": "Name", + "ShortName": "Short Name", + "CreationTime": "Creation time", + "Description": "Description", + "Blogs": "Blogs", + "Tags": "Tags", + "ShareOn": "Share on", + "TitleLengthWarning": "Keep your title size under 60 characters to be SEO friendly!" + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en-GB.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en-GB.json new file mode 100644 index 0000000000..8ffa807e9b --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en-GB.json @@ -0,0 +1,29 @@ +{ + "culture": "en-GB", + "texts": { + "CommentAuthorizationExceptionMessage": "Those comments are not allowed for public display.", + "Comments": "Comments", + "Delete": "Delete", + "Edit": "Edit", + "LoginToAddComment": "Login to add comment", + "LoginToRate": "Login to rate", + "LoginToReply": "Login to reply", + "MessageDeletionConfirmationMessage": "This comment will be deleted completely.", + "Permission:CmsKit": "CmsKit", + "Permission:TagManagement": "Tag Management", + "Permission:TagManagement.Create": "Create Tag", + "Permission:TagManagement.Delete": "Delete Tag", + "Permission:TagManagement.Update": "Update Tag", + "PickYourReaction": "Pick your reaction", + "RatingUndoMessage": "Your rating will be undone.", + "Reply": "Reply", + "Send": "Send", + "Star": "Star", + "TagDeletionConfirmationMessage": "Are you sure to delete the '{0}' tag?", + "Tags": "Tags", + "Undo": "Undo", + "Update": "Update", + "YourComment": "Your comment", + "YourReply": "Your reply" + } +} \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/en-GB.json b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/en-GB.json new file mode 100644 index 0000000000..231ddbfb0e --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/en-GB.json @@ -0,0 +1,10 @@ +{ + "culture": "en-GB", + "texts": { + "DocsTitle": "VoloDocs", + "WelcomeVoloDocs": "Welcome to the VoloDocs!", + "NoProjectWarning": "There`s no defined project yet!", + "CreateYourFirstProject": "Click here to start your first project", + "NoProject": "No project!" + } +} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en-GB.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en-GB.json new file mode 100644 index 0000000000..1e3339963a --- /dev/null +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en-GB.json @@ -0,0 +1,59 @@ +{ + "culture": "en-GB", + "texts": { + "Permission:DocumentManagement": "Document Management", + "Permission:Projects": "Projects", + "Permission:Edit": "Edit", + "Permission:Delete": "Delete", + "Permission:Create": "Create", + "Permission:Documents": "Documents", + "Menu:Documents": "Documents", + "Menu:DocumentManagement": "Documents", + "Menu:ProjectManagement": "Projects", + "CreateANewProject": "Create new project", + "Edit": "Edit", + "Create": "Create", + "Pull": "Pull", + "Projects": "Projects", + "Name": "Name", + "ShortName": "ShortName", + "DocumentStoreType": "DocumentStoreType", + "Format": "Format", + "ShortNameInfoText": "Will be used for unique URL.", + "DisplayName:Name": "Name", + "DisplayName:ShortName": "Short name", + "DisplayName:Format": "Format", + "DisplayName:DefaultDocumentName": "Default document name", + "DisplayName:NavigationDocumentName": "Navigation document name", + "DisplayName:MinimumVersion": "Minimum version", + "DisplayName:MainWebsiteUrl": "Main web site URL", + "DisplayName:LatestVersionBranchName": "Latest version branch name", + "DisplayName:GitHubRootUrl": "GitHub root URL", + "DisplayName:GitHubAccessToken": "GitHub access token", + "DisplayName:GitHubUserAgent": "GitHub user agent", + "DisplayName:GithubVersionProviderSource": "GitHub version provider source", + "DisplayName:VersionBranchPrefix": "Version branch prefix", + "DisplayName:All": "Pull all", + "DisplayName:LanguageCode": "Language code", + "DisplayName:Version": "Version", + "Documents": "Documents", + "RemoveFromCache": "Remove from cache", + "Reindex": "Reindex", + "ReindexCompleted": "Reindex completed", + "RemovedFromCache": "Removed from cache", + "RemoveFromCacheConfirmation": "Are you sure you want to remove this item from cache?", + "ReIndexDocumentConfirmation": "Are you sure you want to reindex this item?", + "DeleteFromDatabase": "Delete from database", + "Deleted": "Deleted", + "Search": "Search", + "StartDate": "Start date", + "EndDate": "End date", + "CreationTime": "Creation time", + "LastUpdateTime": "Last update", + "LastSignificantUpdateTime": "Last significant update", + "Version": "Version", + "LanguageCode": "Language code", + "FileName": "File name", + "LastCachedTime": "Cache time" + } +} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en-GB.json b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en-GB.json new file mode 100644 index 0000000000..02026775d7 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en-GB.json @@ -0,0 +1,39 @@ +{ + "culture": "en-GB", + "texts": { + "Documents": "Documents", + "BackToWebsite": "Back to website", + "Contributors": "Contributors", + "ShareOn": "Share on", + "Version": "Version", + "Edit": "Edit", + "LastEditTime": "Last edit", + "Delete": "Delete", + "ClearCache": "Clear cache", + "ClearCacheConfirmationMessage": "Are you sure you want to clear all caches for project \"{0}\"", + "ReIndexAllProjects": "ReIndex all projects", + "ReIndexProject": "ReIndex Project", + "ReIndexProjectConfirmationMessage": "Are you sure you want to reindex project \"{0}\"", + "SuccessfullyReIndexProject": "Successfully reindexed project \"{0}\"", + "ReIndexAllProjectConfirmationMessage": "Are you sure you want to reindex all projects?", + "SuccessfullyReIndexAllProject": "Successfully reindexed all projects", + "InThisDocument": "In this document", + "GoToTop": "Go to top", + "Projects": "Project(s)", + "NoProjectWarning": "There are no Projects yet!", + "DocumentNotFound": "Oops, the requested document was not found!", + "ProjectNotFound": "Oops, the requested project was not found!", + "NavigationDocumentNotFound": "This version does not have a navigation document!", + "DocumentNotFoundInSelectedLanguage": "Document in the language you wanted was not found. Document in the default language is shown.", + "FilterTopics": "Filter topics", + "FullSearch": "Search in documents", + "Volo.Docs.Domain:010001": "Elastic search is not enabled.", + "MultipleVersionDocumentInfo": "This document has multiple versions. Select the options that best fit you.", + "New": "New", + "Upd": "Upd", + "NewExplanation": "Created in the last two weeks.", + "UpdatedExplanation": "Updated in the last two weeks.", + "Volo.Docs.Domain:010002": "ShortName {ShortName} already exists.", + "Preview": "preview" + } +} \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/en-GB.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/en-GB.json new file mode 100644 index 0000000000..09b4b306b7 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/en-GB.json @@ -0,0 +1,10 @@ +{ + "culture": "en-GB", + "texts": { + "Features": "Features", + "NoFeatureFoundMessage": "There isn't any available feature.", + "Permission:FeatureManagement": "Feature management", + "Permission:FeatureManagement.ManageHostFeatures": "Manage Host features", + "Volo.Abp.FeatureManagement:InvalidFeatureValue": "{0} feature value is not valid!" + } +} \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en-GB.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en-GB.json new file mode 100644 index 0000000000..ef9a64e982 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en-GB.json @@ -0,0 +1,120 @@ +{ + "culture": "en-GB", + "texts": { + "Menu:IdentityManagement": "Identity management", + "Users": "Users", + "NewUser": "New user", + "UserName": "Username", + "EmailAddress": "Email address", + "PhoneNumber": "Phone number", + "UserInformations": "User information", + "DisplayName:IsDefault": "Default", + "DisplayName:IsStatic": "Static", + "DisplayName:IsPublic": "Public", + "Roles": "Roles", + "Password": "Password", + "PersonalInfo": "My Profile", + "PersonalSettings": "Personal settings", + "UserDeletionConfirmationMessage": "User '{0}' will be deleted. Please confirm?", + "RoleDeletionConfirmationMessage": "Role '{0}' will be deleted. Please confirm?", + "DisplayName:RoleName": "Role name", + "DisplayName:UserName": "Username", + "DisplayName:Name": "Name", + "DisplayName:Surname": "Surname", + "DisplayName:Password": "Password", + "DisplayName:Email": "Email Address", + "DisplayName:PhoneNumber": "Phone Number", + "DisplayName:TwoFactorEnabled": "Two factor verification", + "DisplayName:LockoutEnabled": "Lock account after failed login attempts", + "NewRole": "New role", + "RoleName": "Role name", + "CreationTime": "Creation time", + "Permissions": "Permissions", + "DisplayName:CurrentPassword": "Current password", + "DisplayName:NewPassword": "New password", + "DisplayName:NewPasswordConfirm": "Confirm new password", + "PasswordChangedMessage": "Your password has been changed successfully.", + "PersonalSettingsSavedMessage": "Your personal settings has been saved successfully.", + "Volo.Abp.Identity:DefaultError": "An unknown failure has occurred.", + "Volo.Abp.Identity:ConcurrencyFailure": "Optimistic concurrency failure, object has been modified.", + "Volo.Abp.Identity:DuplicateEmail": "Email '{0}' is already taken.", + "Volo.Abp.Identity:DuplicateRoleName": "Role name '{0}' has already been taken.", + "Volo.Abp.Identity:DuplicateUserName": "Username '{0}' has already been taken.", + "Volo.Abp.Identity:InvalidEmail": "Email '{0}' is invalid.", + "Volo.Abp.Identity:InvalidPasswordHasherCompatibilityMode": "The provided PasswordHasherCompatibilityMode is invalid.", + "Volo.Abp.Identity:InvalidPasswordHasherIterationCount": "The iteration count must be a positive integer.", + "Volo.Abp.Identity:InvalidRoleName": "Role name '{0}' is invalid.", + "Volo.Abp.Identity:InvalidToken": "Invalid token.", + "Volo.Abp.Identity:InvalidUserName": "Username '{0}' is invalid, it should only contain letters or digits.", + "Volo.Abp.Identity:LoginAlreadyAssociated": "A user with this login already exists.", + "Volo.Abp.Identity:PasswordMismatch": "Incorrect password.", + "Volo.Abp.Identity:PasswordRequiresDigit": "Passwords must have at least one digit ('0'-'9').", + "Volo.Abp.Identity:PasswordRequiresLower": "Passwords must have at least one lowercase ('a'-'z').", + "Volo.Abp.Identity:PasswordRequiresNonAlphanumeric": "Passwords must have at least one non alphanumeric character.", + "Volo.Abp.Identity:PasswordRequiresUpper": "Passwords must have at least one uppercase ('A'-'Z').", + "Volo.Abp.Identity:PasswordTooShort": "Passwords must be at least {0} characters.", + "Volo.Abp.Identity:RoleNotFound": "Role {0} does not exist.", + "Volo.Abp.Identity:UserAlreadyHasPassword": "User already has a password set.", + "Volo.Abp.Identity:UserAlreadyInRole": "User is already in role '{0}'.", + "Volo.Abp.Identity:UserLockedOut": "User is locked out.", + "Volo.Abp.Identity:UserLockoutNotEnabled": "Lockout is not enabled for this user.", + "Volo.Abp.Identity:UserNameNotFound": "User {0} does not exist.", + "Volo.Abp.Identity:UserNotInRole": "User is not in role '{0}'.", + "Volo.Abp.Identity:PasswordConfirmationFailed": "Password does not match the confirm password.", + "Volo.Abp.Identity:010001": "You cannot delete your own account!", + "Volo.Abp.Identity:010002": "You cannot set more than {MaxUserMembershipCount} organisation unit(s) for a user!", + "Volo.Abp.Identity:010003": "You cannot change the password of an externally logged in user!", + "Volo.Abp.Identity:010004": "There is already an organisation unit with name {0}. Two units with same name can not be created in same level.", + "Volo.Abp.Identity:010005": "Static roles cannot be renamed.", + "Volo.Abp.Identity:010006": "Static roles cannot be deleted.", + "Volo.Abp.Identity:010007": "You can't change your two factor setting.", + "Volo.Abp.Identity:010008": "Changing the two factor setting is not allowed.", + "Identity.OrganizationUnit.MaxUserMembershipCount": "Maximum allowed organisation unit membership count for a user", + "Permission:IdentityManagement": "Identity management", + "Permission:RoleManagement": "Role management", + "Permission:Create": "Create", + "Permission:Edit": "Edit", + "Permission:Delete": "Delete", + "Permission:ChangePermissions": "Change permissions", + "Permission:UserManagement": "User management", + "Permission:UserLookup": "User lookup", + "Feature:IdentityGroup": "Identity", + "Feature:TwoFactor": "Two factor behaviour", + "Feature:TwoFactorDescription": "Set two factor behaviour. Optional values: Optional, Disabled, Forced", + "Feature:TwoFactor.Optional": "Optional", + "Feature:TwoFactor.Disabled": "Disabled", + "Feature:TwoFactor.Forced": "forced", + "DisplayName:Abp.Identity.Password.RequiredLength": "Required length", + "DisplayName:Abp.Identity.Password.RequiredUniqueChars": "Required unique characters number", + "DisplayName:Abp.Identity.Password.RequireNonAlphanumeric": "Required non-alphanumeric character", + "DisplayName:Abp.Identity.Password.RequireLowercase": "Required lower case character", + "DisplayName:Abp.Identity.Password.RequireUppercase": "Required upper case character", + "DisplayName:Abp.Identity.Password.RequireDigit": "Required digit", + "DisplayName:Abp.Identity.Lockout.AllowedForNewUsers": "Enabled for new users", + "DisplayName:Abp.Identity.Lockout.LockoutDuration": "Lockout duration(in seconds)", + "DisplayName:Abp.Identity.Lockout.MaxFailedAccessAttempts": "Max failed access attempts", + "DisplayName:Abp.Identity.SignIn.RequireConfirmedEmail": "Require confirmed email", + "DisplayName:Abp.Identity.SignIn.EnablePhoneNumberConfirmation": "Allow users to confirm their phone number", + "DisplayName:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "Require confirmed phone number", + "DisplayName:Abp.Identity.User.IsUserNameUpdateEnabled": "Allow users to change their usernames", + "DisplayName:Abp.Identity.User.IsEmailUpdateEnabled": "Allow users to change their email addresses", + "Description:Abp.Identity.Password.RequiredLength": "The minimum length a password must be.", + "Description:Abp.Identity.Password.RequiredUniqueChars": "The minimum number of unique characters which a password must contain.", + "Description:Abp.Identity.Password.RequireNonAlphanumeric": "If passwords must contain a non-alphanumeric character.", + "Description:Abp.Identity.Password.RequireLowercase": "If passwords must contain a lower case ASCII character.", + "Description:Abp.Identity.Password.RequireUppercase": "If passwords must contain a upper case ASCII character.", + "Description:Abp.Identity.Password.RequireDigit": "If passwords must contain a digit.", + "Description:Abp.Identity.Lockout.AllowedForNewUsers": "Whether a new user can be locked out.", + "Description:Abp.Identity.Lockout.LockoutDuration": "The duration a user is locked out for when a lockout occurs.", + "Description:Abp.Identity.Lockout.MaxFailedAccessAttempts": "The number of failed access attempts allowed before a user is locked out, assuming lock out is enabled.", + "Description:Abp.Identity.SignIn.RequireConfirmedEmail": "Whether a confirmed email address is required to sign in.", + "Description:Abp.Identity.SignIn.EnablePhoneNumberConfirmation": "Whether the phoneNumber can be confirmed by the user.", + "Description:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "Whether a confirmed telephone number is required to sign in.", + "Description:Abp.Identity.User.IsUserNameUpdateEnabled": "Whether the username can be updated by the user.", + "Description:Abp.Identity.User.IsEmailUpdateEnabled": "Whether the email can be updated by the user.", + "DisplayName:Abp.Identity.TwoFactorBehaviour": "Two Factor behaviour", + "Description:Abp.Identity.TwoFactorBehaviour": "Two Factor behaviour", + "DisplayName:Abp.Identity.UsersCanChange": "Allow users to change their Two Factor.", + "Description:Abp.Identity.UsersCanChange": "Allow users to change their Two Factor." + } +} \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/en-GB.json b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/en-GB.json new file mode 100644 index 0000000000..7c3c87b884 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/en-GB.json @@ -0,0 +1,14 @@ +{ + "culture": "en-GB", + "texts": { + "Volo.IdentityServer:DuplicateIdentityResourceName": "Identity Resource name already exist: {Name}", + "Volo.IdentityServer:DuplicateApiResourceName": "Api Resource name already exist: {Name}", + "Volo.IdentityServer:DuplicateApiScopeName": "Api Scope name already exist: {Name}", + "Volo.IdentityServer:DuplicateClientId": "ClientId already exist: {ClientId}", + "UserLockedOut": "The user account has been locked out due to invalid login attempts. Please wait a while and try again.", + "InvalidUserNameOrPassword": "Invalid username or password!", + "LoginIsNotAllowed": "You are not allowed to login! You need to confirm your email/phone number.", + "InvalidUsername": "Invalid username or password!", + "TheTargetUserIsNotLinkedToYou": "The target user is not linked to you!" + } +} \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/en-GB.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/en-GB.json new file mode 100644 index 0000000000..73c2e4a093 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/en-GB.json @@ -0,0 +1,10 @@ +{ + "culture": "en-GB", + "texts": { + "Permissions": "Permissions", + "OnlyProviderPermissons": "Only this provider", + "All": "All", + "SelectAllInAllTabs": "Grant all permissions", + "SelectAllInThisTab": "Select all" + } +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/en-GB.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/en-GB.json new file mode 100644 index 0000000000..722d3e8896 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/en-GB.json @@ -0,0 +1,7 @@ +{ + "culture": "en-GB", + "texts": { + "Settings": "Settings", + "SuccessfullySaved": "Successfully saved" + } +} \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/en-GB.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/en-GB.json new file mode 100644 index 0000000000..4d6075ff74 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/en-GB.json @@ -0,0 +1,23 @@ +{ + "culture": "en-GB", + "texts": { + "Menu:TenantManagement": "Tenant Management", + "Tenants": "Tenants", + "NewTenant": "New Tenant", + "TenantName": "Tenant name", + "DisplayName:TenantName": "Tenant name", + "TenantDeletionConfirmationMessage": "Tenant '{0}' will be deleted. Is that OK?", + "ConnectionStrings": "Connection Strings", + "DisplayName:DefaultConnectionString": "Default Connection String", + "DisplayName:UseSharedDatabase": "Use the Shared Database", + "ManageHostFeatures": "Manage Host features", + "Permission:TenantManagement": "Tenant management", + "Permission:Create": "Create", + "Permission:Edit": "Edit", + "Permission:Delete": "Delete", + "Permission:ManageConnectionStrings": "Manage connection strings", + "Permission:ManageFeatures": "Manage features", + "DisplayName:AdminEmailAddress": "Admin Email Address", + "DisplayName:AdminPassword": "Admin Password" + } +} \ No newline at end of file diff --git a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/en-GB.json b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/en-GB.json new file mode 100644 index 0000000000..cd7cbf3c1a --- /dev/null +++ b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/en-GB.json @@ -0,0 +1,14 @@ +{ + "culture": "en-GB", + "texts": { + "VirtualFileExplorer": "Virtual file explorer", + "VirtualFileType": "Virtual file type", + "Menu:VirtualFileExplorer": "Virtual file explorer", + "LastUpdateTime": "Last update time", + "VirtualFileName": "Virtual file name", + "FileContent": "File content", + "Size": "Size", + "BackToRoot": "Back to root", + "EmptyFileInfoList": "There are no virtual files" + } +} \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en-GB.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en-GB.json new file mode 100644 index 0000000000..d2ca0793a3 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en-GB.json @@ -0,0 +1,8 @@ +{ + "culture": "en-GB", + "texts": { + "Menu:Home": "Home", + "Welcome": "Welcome", + "LongWelcomeMessage": "Welcome to the application. This is a startup project based on the ABP framework. For more information, visit abp.io." + } +} \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs index 328722915e..40bea2fc83 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs @@ -128,6 +128,7 @@ namespace MyCompanyName.MyProjectName options.Languages.Add(new LanguageInfo("ar", "ar", "العربية")); options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština")); options.Languages.Add(new LanguageInfo("en", "en", "English")); + options.Languages.Add(new LanguageInfo("en-GB", "en-GB", "English (UK)")); options.Languages.Add(new LanguageInfo("fr", "fr", "Français")); options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar")); options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en-GB.json b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en-GB.json new file mode 100644 index 0000000000..74ea6af04d --- /dev/null +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/en-GB.json @@ -0,0 +1,7 @@ +{ + "culture": "en-GB", + "texts": { + "ManageYourProfile": "Manage your profile", + "SamplePageMessage": "A sample page for the MyProjectName module" + } +} \ No newline at end of file From 33392af88cd55583682e362aeb8509c7f42d4a09 Mon Sep 17 00:00:00 2001 From: hajuuk Date: Fri, 1 Jan 2021 18:38:55 +1100 Subject: [PATCH 159/217] Update Emailing.md Spelling mistakes --- docs/en/Emailing.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/Emailing.md b/docs/en/Emailing.md index aa341a3898..a98874165d 100644 --- a/docs/en/Emailing.md +++ b/docs/en/Emailing.md @@ -223,7 +223,7 @@ Pathes of the templates in the virtual file system are shown below: * `/Volo/Abp/Emailing/Templates/Layout.tpl` * `/Volo/Abp/Emailing/Templates/Message.tpl` -If you add files to the same localization in the virtual file system, your files will override them. +If you add files to the same location in the virtual file system, your files will override them. Templates are inline localized, that means you can take the power of the [localization system](Localization.md) to make your templates multi-cultural. @@ -247,4 +247,4 @@ So, don't confuse if you don't receive emails on DEBUG mode. Emails will be sent ## See Also -* [MailKit integration for sending emails](MailKit.md) \ No newline at end of file +* [MailKit integration for sending emails](MailKit.md) From 7a3756bdfc23e9bf6a096f8223a30fe368e71ca9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 1 Jan 2021 13:33:01 +0300 Subject: [PATCH 160/217] Moved angular extensibility docs to open source. --- .../Customizing-Application-Modules-Guide.md | 43 +- .../Angular/Data-Table-Column-Extensions.md | 327 +++++++++++++ docs/en/UI/Angular/Dynamic-Form-Extensions.md | 325 +++++++++++++ .../en/UI/Angular/Entity-Action-Extensions.md | 442 ++++++++++++++++++ .../user-action-extension-click-me-ng.png | Bin 0 -> 142395 bytes ...-prop-extension-date-of-birth-field-ng.png | Bin 0 -> 154453 bytes .../user-prop-extension-name-column-ng.png | Bin 0 -> 82388 bytes 7 files changed, 1133 insertions(+), 4 deletions(-) create mode 100644 docs/en/UI/Angular/Data-Table-Column-Extensions.md create mode 100644 docs/en/UI/Angular/Dynamic-Form-Extensions.md create mode 100644 docs/en/UI/Angular/Entity-Action-Extensions.md create mode 100644 docs/en/UI/Angular/images/user-action-extension-click-me-ng.png create mode 100644 docs/en/UI/Angular/images/user-prop-extension-date-of-birth-field-ng.png create mode 100644 docs/en/UI/Angular/images/user-prop-extension-name-column-ng.png diff --git a/docs/en/Customizing-Application-Modules-Guide.md b/docs/en/Customizing-Application-Modules-Guide.md index d184d82906..da18d04d40 100644 --- a/docs/en/Customizing-Application-Modules-Guide.md +++ b/docs/en/Customizing-Application-Modules-Guide.md @@ -43,17 +43,52 @@ In any case, you can create a **separate solution** for the desired module and d #### Publishing the Customized Module as Packages -One alternative scenario could be re-packaging the module source code (as NuGet/NPM packages) and using as package references. You can use a local private NuGet/NPM server for your company. +One alternative scenario could be re-packaging the module source code (as NuGet/NPM packages) and using as package references. You can use a local private NuGet/NPM server for your company, for example. ## Module Customization / Extending Approaches -This section suggests some approaches if you decided to use pre-built application modules as NuGet/NPM package references. The following documents explain how to customize/extend existing modules in different ways: +This section suggests some approaches if you decided to use pre-built application modules as NuGet/NPM package references. The following documents explain how to customize/extend existing modules in different ways. + +### Module Entity Extension System + +Module entity extension system is the **main and high level extension system** that allows you to **define new properties** for existing entities of the depended modules. It automatically **adds properties to the entity, database, HTTP API and the user interface** in a single point. + +See the [Module Entity Extensions document](Module-Entity-Extensions.md) to learn how to use it. + +### Extending Entities + +If you only need to get/set extra data on an existing entity, follow the [Extending Entities](Customizing-Application-Modules-Extending-Entities.md) document. + +### Overriding Services/Components + +In addition to the extensibility systems, you can partially or completely override any service or user interface page/component. -* [Extending Entities](Customizing-Application-Modules-Extending-Entities.md) * [Overriding Services](Customizing-Application-Modules-Overriding-Services.md) * [Overriding the User Interface](Customizing-Application-Modules-Overriding-User-Interface.md) -### See Also +### Additional UI Extensibility Systems + +There are some low level systems that you can control entity actions, table columns and page toolbar of a page defined by a module. + +#### Entity Actions + +Entity action extension system allows you to add a new action to the action menu for an entity on the user interface; + +* [Entity Action Extensions for ASP.NET Core UI](UI/AspNetCore/Entity-Action-Extensions.md) +* [Entity Action Extensions for Angular](UI/Angular/Entity-Action-Extensions.md) + +#### Data Table Column Extensions + +Data table column extension system allows you to add a new column in the data table on the user interface; + +* [Data Table Column Extensions for ASP.NET Core UI](UI/AspNetCore/Data-Table-Column-Extensions.md) +* [Data Table Column Extensions for Angular](UI/Angular/Data-Table-Column-Extensions.md) + +#### Others + +* [Dynamic Form Extensions for Angular](UI/Angular/Dynamic-Form-Extensions.md) + +## See Also Also, see the following documents: diff --git a/docs/en/UI/Angular/Data-Table-Column-Extensions.md b/docs/en/UI/Angular/Data-Table-Column-Extensions.md new file mode 100644 index 0000000000..cd2df5cf4f --- /dev/null +++ b/docs/en/UI/Angular/Data-Table-Column-Extensions.md @@ -0,0 +1,327 @@ +# Data Table Column (or Entity Prop) Extensions for Angular UI + + +## Introduction + +Entity prop extension system allows you to add a new column to the data table for an entity or change/remove an already existing one. A "Name" column was added to the user management page below: + +![Entity Prop Extension Example: "Name" Column](images/user-prop-extension-name-column-ng.png) + +You will have access to the current entity in your code and display its value, make the column sortable, perform visibility checks, and more. You can also render custom HTML in table cells. + +## How to Set Up + +In this example, we will add a "Name" column and display the value of the `name` field in the user management page of the [Identity Module](../../Modules/Identity.md). + +### Step 1. Create Entity Prop Contributors + +The following code prepares a constant named `identityEntityPropContributors`, ready to be imported and used in your root module: + +```js +// entity-prop-contributors.ts + +import { EntityProp, EntityPropList, ePropType } from '@abp/ng.theme.shared/extensions'; +import { IdentityEntityPropContributors, IdentityUserDto } from '@volo/abp.ng.identity'; + +const nameProp = new EntityProp({ + type: ePropType.String, + name: 'name', + displayName: 'AbpIdentity::Name', + sortable: true, + columnWidth: 250, +}); + +export function namePropContributor(propList: EntityPropList) { + propList.addAfter( + nameProp, + 'userName', + (value, name) => value.name === name, + ); +} + +export const identityEntityPropContributors: IdentityEntityPropContributors = { + 'Identity.UsersComponent': [namePropContributor], +}; + +``` + +The list of props, conveniently named as `propList`, is a **doubly linked list**. That is why we have used the `addAfter` method, which adds a node with given value after the first node that has the previous value. You may find [all available methods here](../Common/Utils/Linked-List.md). + +> **Important Note 1:** AoT compilation does not support function calls in decorator metadata. This is why we have defined `namePropContributor` as an exported function declaration here. Please do not forget exporting your contributor callbacks and forget about lambda functions (a.k.a. arrow functions). Please refer to [AoT metadata errors](https://angular.io/guide/aot-metadata-errors#function-calls-not-supported) for details. + +> **Important Note 2:** Please use one of the following if Ivy is not enabled in your project. Otherwise, you will get an "Expression form not supported." error. + +```js +export const identityEntityPropContributors: IdentityEntityPropContributors = { + 'Identity.UsersComponent': [ namePropContributor ], +}; + +/* OR */ + +const identityContributors: IdentityEntityPropContributors = {}; +identityContributors[eIdentityComponents.Users] = [ namePropContributor ]; +export const identityEntityPropContributors = identityContributors; +``` + +### Step 2. Import and Use Entity Prop Contributors + +Import `identityEntityPropContributors` in your routing module and pass it to the static `forLazy` method of `IdentityModule` as seen below: + +```js +import { identityEntityPropContributors } from './entity-prop-contributors'; + +const routes: Routes = [ + { + path: '', + component: DynamicLayoutComponent, + children: [ + { + path: 'identity', + loadChildren: () => + import('@volo/abp.ng.identity').then(m => + m.IdentityModule.forLazy({ + entityPropContributors: identityEntityPropContributors, + }), + ), + }, + // other child routes + ], + // other routes + } +]; +``` + +That is it, `nameProp` entity prop will be added, and you will see the "Name" column next to the usernames on the grid in the users page (`UsersComponent`) of the `IdentityModule`. + +## How to Render Custom HTML in Cells + +You can use the `valueResolver` to render an HTML string in the table. Imagine we want to show a red times icon (❌) next to unconfirmed emails and phones, instead of showing a green check icon next to confirmed emails and phones. The contributors below would do that for you. + +```js +// entity-prop-contributors.ts + +import { EntityProp, EntityPropList, ePropType } from '@abp/ng.theme.shared/extensions'; +import { IdentityUserDto } from '@volo/abp.ng.identity'; +import { IdentityEntityPropContributors } from '@volo/abp.ng.identity/config'; + +export function emailPropContributor(propList: EntityPropList) { + const index = propList.indexOf('email', (value, name) => value.name === name); + const droppedNode = propList.dropByIndex(index); + const emailProp = new EntityProp({ + ...droppedNode.value, + valueResolver: data => { + const { email, emailConfirmed } = data.record; + const icon = email && !emailConfirmed ? `` : ''; + + return of((email || '') + icon); // should return an observable + }, + }); + + propList.addByIndex(emailProp, index); +} + +export function phonePropContributor(propList: EntityPropList) { + const index = propList.indexOf('phoneNumber', (value, name) => value.name === name); + const droppedNode = propList.dropByIndex(index); + const phoneProp = new EntityProp({ + ...droppedNode.value, + valueResolver: data => { + const { phoneNumber, phoneNumberConfirmed } = data.record; + const icon = + phoneNumber && !phoneNumberConfirmed ? `` : ''; + + return of((phoneNumber || '') + icon); // should return an observable + }, + }); + + propList.addByIndex(phoneProp, index); +} + +export const identityEntityPropContributors: IdentityEntityPropContributors = { + 'Identity.UsersComponent': [emailPropContributor, phonePropContributor], +}; + +``` + +> The `valueResolver` method should return an observable. You can wrap your return values with `of` from RxJS for that. + +## Object Extensions + +Extra properties defined on an existing entity will be included in the table based on their configuration. The values will also be mapped to and from `extraProperties` automatically. They are available when defining custom contributors, so you can drop, modify, or reorder them. The `isExtra` identifier will be set to `true` for these properties and will define this automatic behavior. + +## API + +### PropData\ + +`PropData` is the shape of the parameter passed to all callbacks or predicates in an `EntityProp`. + +It has the following properties: + +- **record** is the row data, i.e. current value rendered in the table. + + ```js + { + type: ePropType.String, + name: 'name', + valueResolver: data => { + const name = data.record.name || ''; + return of(name.toUpperCase()); + }, + } + ``` + +- **index** is the table index where the record is at. + +- **getInjected** is the equivalent of [Injector.get](https://angular.io/api/core/Injector#get). You can use it to reach injected dependencies of `ExtensibleTableComponent`, including, but not limited to, its parent component. + + ```js + { + type: ePropType.String, + name: 'name', + valueResolver: data => { + const restService = data.getInjected(RestService); + const usersComponent = data.getInjected(UsersComponent); + + // Use restService and usersComponent public props and methods here + }, + } + ``` + +### PropCallback\ + +`PropCallback` is the type of the callback function that can be passed to an `EntityProp` as `prop` parameter. A prop callback gets a single parameter, the `PropData`. The return type may be anything, including `void`. Here is a simplified representation: + +```js +type PropCallback = (data?: PropData) => R; +``` + +### PropPredicate\ + +`PropPredicate` is the type of the predicate function that can be passed to an `EntityProp` as `visible` parameter. A prop predicate gets a single parameter, the `PropData`. The return type must be `boolean`. Here is a simplified representation: + +```js +type PropPredicate = (data?: PropData) => boolean; +``` + +### EntityPropOptions\ + +`EntityPropOptions` is the type that defines required and optional properties you have to pass in order to create an entity prop. + +Its type definition is as follows: + +```js +type EntityPropOptions = { + type: ePropType; + name: string; + displayName?: string; + valueResolver?: PropCallback>; + sortable?: boolean; + columnWidth?: number; + permission?: string; + visible?: PropPredicate; +}; +``` + +As you see, passing `type` and `name` is enough to create an entity prop. Here is what each property is good for: + +- **type** is the type of the prop value. It is used for custom rendering in the table. (_required_) +- **name** is the property name (or key) which will be used to read the value of the prop. (_required_) +- **displayName** is the name of the property which will be localized and shown as column header. (_default:_ `options.name`) +- **valueResolver** is a callback that is called when the cell is rendered. It must return an observable. (_default:_ `data => of(data.record[options.name])`) +- **sortable** defines if the table is sortable based on this entity prop. Sort icons are shown based on it. (_default:_ `false`) +- **columnWidth** defines a minimum width for the column. Good for horizontal scroll. (_default:_ `undefined`) +- **permission** is the permission context which will be used to decide if a column for this entity prop should be displayed to the user or not. (_default:_ `undefined`) +- **visible** is a predicate that will be used to decide if this entity prop should be displayed on the table or not. (_default:_ `() => true`) + +> Important Note: Do not use record in visibility predicates. First of all, the table header checks it too and the record will be `undefined`. Second, if some cells are displayed and others are not, the table will be broken. Use the `valueResolver` and render an empty cell when you need to hide a specific cell. + +You may find a full example below. + +### EntityProp\ + +`EntityProp` is the class that defines your entity props. It takes an `EntityPropOptions` and sets the default values to the properties, creating an entity prop that can be passed to an entity contributor. + +```js +const options: EntityPropOptions = { + type: ePropType.String, + name: 'email', + displayName: 'AbpIdentity::EmailAddress', + valueResolver: data => { + const { email, emailConfirmed } = data.record; + + return of( + (email || '') + (emailConfirmed ? `` : ''), + ); + }, + sortable: true, + columnWidth: 250, + permission: 'AbpIdentity.Users.ReadSensitiveData', // hypothetical + visible: data => { + const store = data.getInjected(Store); + const selectSensitiveDataVisibility = ConfigState.getSetting( + 'Abp.Identity.IsSensitiveDataVisible' // hypothetical + ); + + return store.selectSnapshot(selectSensitiveDataVisibility).toLowerCase() === 'true'; + } +}; + +const prop = new EntityProp(options); +``` + +It also has two static methods to create its instances: + +- **EntityProp.create\\(options: EntityPropOptions\\)** is used to create an instance of `EntityProp`. + ```js + const prop = EntityProp.create(options); + ``` +- **EntityProp.createMany\\(options: EntityPropOptions\\[\]\)** is used to create multiple instances of `EntityProp` with given array of `EntityPropOptions`. + ```js + const props = EntityProp.createMany(optionsArray); + ``` + +### EntityPropList\ + +`EntityPropList` is the list of props passed to every prop contributor callback as the first parameter named `propList`. It is a **doubly linked list**. You may find [all available methods here](../Common/Utils/Linked-List.md). + +The items in the list will be displayed according to the linked list order, i.e. from head to tail. If you want to re-order them, all you have to do is something like this: + +```js +export function reorderUserContributors( + propList: EntityPropList, +) { + // drop email node + const emailPropNode = propList.dropByValue( + 'AbpIdentity::EmailAddress', + (prop, text) => prop.text === text, + ); + + // add it back after phoneNumber + propList.addAfter( + emailPropNode.value, + 'phoneNumber', + (value, name) => value.name === name, + ); +} +``` + +### EntityPropContributorCallback\ + +`EntityPropContributorCallback` is the type that you can pass as entity prop contributor callbacks to static `forLazy` methods of the modules. + +```js +export function isLockedOutPropContributor( + propList: EntityPropList, +) { + // add isLockedOutProp as 2nd column + propList.add(isLockedOutProp).byIndex(1); +} + +export const identityEntityPropContributors = { + [eIdentityComponents.Users]: [isLockedOutPropContributor], +}; +``` + +## See Also + +- [Customizing Application Modules Guide](../../Customizing-Application-Modules-Guide.md) diff --git a/docs/en/UI/Angular/Dynamic-Form-Extensions.md b/docs/en/UI/Angular/Dynamic-Form-Extensions.md new file mode 100644 index 0000000000..880250a247 --- /dev/null +++ b/docs/en/UI/Angular/Dynamic-Form-Extensions.md @@ -0,0 +1,325 @@ +# Dynamic Form (or Form Prop) Extensions for Angular UI + + +## Introduction + +Form prop extension system allows you to add a new field to the create and/or edit forms for a form or change/remove an already existing one. A "Date of Birth" field was added to the user management page below: + +![Form Prop Extension Example: "Date of Birth" Field](images/user-prop-extension-date-of-birth-field-ng.png) + +You can validate the field, perform visibility checks, and do more. You will also have access to the current entity when creating a contibutor for an edit form. + +## How to Set Up + +In this example, we will add a "Date of Birth" field in the user management page of the [Identity Module](../../Modules/Identity.md) and validate it. + +### Step 1. Create Form Prop Contributors + +The following code prepares two constants named `identityCreateFormPropContributors` and `identityEditFormPropContributors`, ready to be imported and used in your root module: + +```js +// form-prop-contributors.ts + +import { Validators } from '@angular/forms'; +import { ePropType, FormProp, FormPropList } from '@abp/ng.theme.shared/extensions'; +import { IdentityCreateFormPropContributors, IdentityEditFormPropContributors, IdentityUserDto } from '@volo/abp.ng.identity'; + +const birthdayProp = new FormProp({ + type: ePropType.Date, + name: 'birthday', + displayName: 'Date of Birth', + validators: () => [Validators.required], +}); + +export function birthdayPropContributor(propList: FormPropList) { + propList.addByIndex(birthdayProp, 4); +} + +export const identityCreateFormPropContributors: IdentityCreateFormPropContributors = { + 'Identity.UsersComponent': [birthdayPropContributor], +}; + +export const identityEditFormPropContributors: IdentityEditFormPropContributors = { + 'Identity.UsersComponent': [birthdayPropContributor], +}; + +``` + + +The list of props, conveniently named as `propList`, is a **doubly linked list**. That is why we have used the `addByIndex` method, which adds the given value to the specified index of the list. You may find [all available methods here](../Common/Utils/Linked-List.md). + +> **Important Note 1:** AoT compilation does not support function calls in decorator metadata. This is why we have defined `birthdayPropContributor` as an exported function declaration here. Please do not forget exporting your contributor callbacks and forget about lambda functions (a.k.a. arrow functions). Please refer to [AoT metadata errors](https://angular.io/guide/aot-metadata-errors#function-calls-not-supported) for details. + +> **Important Note 2:** Please use one of the following if Ivy is not enabled in your project. Otherwise, you will get an "Expression form not supported." error. + +```js +export const identityCreateFormPropContributors: IdentityCreateFormPropContributors = { + 'Identity.UsersComponent': [ birthdayPropContributor ], +}; + +/* OR */ + +const identityCreateContributors: IdentityCreateFormPropContributors = {}; +identityCreateContributors[eIdentityComponents.Users] = [ birthdayPropContributor ]; +export const identityCreateFormPropContributors = identityCreateContributors; +``` + +### Step 2. Import and Use Form Prop Contributors + +Import `identityCreateFormPropContributors` and `identityEditFormPropContributors` in your routing module and pass it to the static `forLazy` method of `IdentityModule` as seen below: + +```js +import { + identityCreateFormPropContributors, + identityEditFormPropContributors, +} from './form-prop-contributors'; + +const routes: Routes = [ + { + path: '', + component: DynamicLayoutComponent, + children: [ + { + path: 'identity', + loadChildren: () => + import('@volo/abp.ng.identity').then(m => + m.IdentityModule.forLazy({ + createFormPropContributors: identityCreateFormPropContributors, + editFormPropContributors: identityEditFormPropContributors, + }), + ), + }, + // other child routes + ], + // other routes + } +]; +``` + +That is it, `birthdayProp` form prop will be added, and you will see the datepicker for the "Date of Birth" field right before the "Email address" in the forms of the users page in the `IdentityModule`. + +## Object Extensions + +Extra properties defined on an existing entity will be included in the create and edit forms and validated based on their configuration. The form values will also be mapped to and from `extraProperties` automatically. They are available when defining custom contributors, so you can drop, modify, or reorder them. The `isExtra` identifier will be set to `true` for these properties and will define this automatic behavior. + +## API + +### PropData\ + +`PropData` is the shape of the parameter passed to all callbacks or predicates in a `FormProp`. + +It has the following properties: + +- **getInjected** is the equivalent of [Injector.get](https://angular.io/api/core/Injector#get). You can use it to reach injected dependencies of `ExtensibleFormPropComponent`, including, but not limited to, its parent components. + + ```js + { + type: ePropType.Enum, + name: 'myField', + options: data => { + const restService = data.getInjected(RestService); + const usersComponent = data.getInjected(UsersComponent); + + // Use restService and usersComponent public props and methods here + } + }, + ``` + +- **record** is the row data, i.e. current value of the selected item to edit. This property is _available only on edit forms_. + + ```js + { + type: ePropType.String, + name: 'myProp', + readonly: data => data.record.someOtherProp, + } + ``` + +### PropCallback\ + +`PropCallback` is the type of the callback function that can be passed to a `FormProp` as `prop` parameter. A prop callback gets a single parameter, the `PropData`. The return type may be anything, including `void`. Here is a simplified representation: + +```js +type PropCallback = (data?: PropData) => R; +``` + +### PropPredicate\ + +`PropPredicate` is the type of the predicate function that can be passed to a `FormProp` as `visible` parameter. A prop predicate gets a single parameter, the `PropData`. The return type must be `boolean`. Here is a simplified representation: + +```js +type PropPredicate = (data?: PropData) => boolean; +``` + +### FormPropOptions\ + +`FormPropOptions` is the type that defines required and optional properties you have to pass in order to create a form prop. + +Its type definition is as follows: + +```js +type FormPropOptions = { + type: ePropType; + name: string; + displayName?: string; + id?: string; + permission?: string; + visible?: PropPredicate; + readonly?: PropPredicate; + disabled?: PropPredicate; + validators?: PropCallback; + asyncValidators?: PropCallback; + defaultValue?: boolean | number | string | Date; + options?: PropCallback[]>>; + autocomplete?: string; + isExtra? boolean; +}; +``` + +As you see, passing `type` and `name` is enough to create a form prop. Here is what each property is good for: + +- **type** is the type of the prop value. It defines which input is rendered for the prop in the form. (_required_) +- **name** is the property name (or key) which will be used to read the value of the prop. (_required_) +- **displayName** is the name of the property which will be localized and shown as column header. (_default:_ `options.name`) +- **id** will be set as the `for` attribute of the label and the `id` attribute of the input for the field. (_default:_ `options.name`) +- **permission** is the permission context which will be used to decide if a column for this form prop should be displayed to the user or not. (_default:_ `undefined`) +- **visible** is a predicate that will be used to decide if this prop should be displayed on the form or not. (_default:_ `() => true`) +- **readonly** is a predicate that will be used to decide if this prop should be readonly or not. (_default:_ `() => false`) +- **disabled** is a predicate that will be used to decide if this prop should be disabled or not. (_default:_ `() => false`) +- **validators** is a callback that returns validators for the prop. (_default:_ `() => []`) +- **asyncValidators** is a callback that returns async validators for the prop. (_default:_ `() => []`) +- **defaultValue** is the initial value the field will have. (_default:_ `null`) +- **options** is a callback that is called when a dropdown is needed. It must return an observable. (_default:_ `undefined`) +- **autocomplete** will be set as the `autocomplete` attribute of the input for the field. Please check [possible values](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete#Values). (_default:_ `'off'`) +- **isExtra** indicates this prop is an object extension. When `true`, the value of the field will be mapped from and to `extraProperties` of the entity. (_default:_ `undefined`) + +> Important Note: Do not use `record` property of `PropData` in create form predicates and callbacks, because it will be `undefined`. You can use it on edit form contributors though. + +You may find a full example below. + +### FormProp\ + +`FormProp` is the class that defines your form props. It takes a `FormPropOptions` and sets the default values to the properties, creating a form prop that can be passed to a form contributor. + +```js +const options: FormPropOptions = { + type: ePropType.Enum, + name: 'myProp', + displayName: 'Default::MyPropName', + id: 'my-prop', + permission: 'AbpIdentity.Users.ReadSensitiveData', // hypothetical + visible: data => { + const store = data.getInjected(Store); + const selectSensitiveDataVisibility = ConfigState.getSetting( + 'Abp.Identity.IsSensitiveDataVisible' // hypothetical + ); + + return store.selectSnapshot(selectSensitiveDataVisibility).toLowerCase() === 'true'; + }, + readonly: data => data.record.someProp, + disabled: data => data.record.someOtherProp, + validators: () => [Validators.required], + asyncValidators: data => { + const http = data.getInjected(HttpClient); + + function validate(control: AbstractControl): Observable { + if (control.pristine) return of(null); + + return http + .get('https://api.my-brand.io/hypothetical/endpoint/' + control.value) + .pipe(map(response => (response.valid ? null : { invalid: true }))); + } + + return [validate]; + }, + defaultValue: 0, + options: data => { + const service = data.getInjected(MyIdentityService); + + return service.getMyPropOptions() + .pipe( + map(({items}) => items.map( + item => ({key: item.name, value: item.id }) + )), + ); + }, + autocomplete: 'off', + isExtra: true, +}; + +const prop = new FormProp(options); +``` + +It also has two static methods to create its instances: + +- **FormProp.create\\(options: FormPropOptions\\)** is used to create an instance of `FormProp`. + ```js + const prop = FormProp.create(options); + ``` +- **FormProp.createMany\\(options: FormPropOptions\\[\]\)** is used to create multiple instances of `FormProp` with given array of `FormPropOptions`. + ```js + const props = FormProp.createMany(optionsArray); + ``` + +### FormPropList\ + +`FormPropList` is the list of props passed to every prop contributor callback as the first parameter named `propList`. It is a **doubly linked list**. You may find [all available methods here](../Common/Utils/Linked-List.md). + +The items in the list will be displayed according to the linked list order, i.e. from head to tail. If you want to re-order them, all you have to do is something like this: + +```js +export function reorderUserContributors( + propList: FormPropList, +) { + // drop email node + const emailPropNode = propList.dropByValue( + 'AbpIdentity::EmailAddress', + (prop, displayName) => prop.displayName === displayName, + ); + + // add it back after phoneNumber + propList.addAfter( + emailPropNode.value, + 'phoneNumber', + (value, name) => value.name === name, + ); +} +``` + +### CreateFormPropContributorCallback\ + +`CreateFormPropContributorCallback` is the type that you can pass as **create form** prop contributor callbacks to static `forLazy` methods of the modules. + +```js +export function myPropCreateContributor( + propList: FormPropList, +) { + // add myProp as 2nd field from the start + propList.add(myProp).byIndex(1); +} + +export const identityCreateFormPropContributors = { + [eIdentityComponents.Users]: [myPropCreateContributor], +}; +``` + +### EditFormPropContributorCallback\ + +`EditFormPropContributorCallback` is the type that you can pass as **edit form** prop contributor callbacks to static `forLazy` methods of the modules. + +```js +export function myPropEditContributor( + propList: FormPropList, +) { + // add myProp as 2nd field from the end + propList.add(myProp).byIndex(-1); +} + +export const identityEditFormPropContributors = { + [eIdentityComponents.Users]: [myPropEditContributor], +}; +``` + +## See Also + +- [Customizing Application Modules Guide](../../Customizing-Application-Modules-Guide.md) diff --git a/docs/en/UI/Angular/Entity-Action-Extensions.md b/docs/en/UI/Angular/Entity-Action-Extensions.md new file mode 100644 index 0000000000..d46bd8e194 --- /dev/null +++ b/docs/en/UI/Angular/Entity-Action-Extensions.md @@ -0,0 +1,442 @@ +# Entity Action Extensions for Angular UI + +## Introduction + +Entity action extension system allows you to add a new action to the action menu for an entity. A "Click Me" action was added to the user management page below: + +![Entity Action Extension Example: "Click Me!" Action](images/user-action-extension-click-me-ng.png) + +You can take any action (open a modal, make an HTTP API call, redirect to another page... etc) by writing your custom code. You can access to the current entity in your code. + +## How to Set Up + +In this example, we will add a "Click Me!" action and alert the current row's `userName` in the user management page of the [Identity Module](../../Modules/Identity.md). + +### Step 1. Create Entity Action Contributors + +The following code prepares a constant named `identityEntityActionContributors`, ready to be imported and used in your root module: + +```js +// entity-action-contributors.ts + +import { EntityAction, EntityActionList } from '@abp/ng.theme.shared/extensions'; +import { IdentityEntityActionContributors, IdentityUserDto } from '@volo/abp.ng.identity'; + +const alertUserName = new EntityAction({ + text: 'Click Me!', + action: data => { + // Replace alert with your custom code + alert(data.record.userName); + }, + // See EntityActionOptions in API section for all options +}); + +export function alertUserNameContributor( + actionList: EntityActionList, +) { + actionList.addTail(alertUserName); +} + +export const identityEntityActionContributors: IdentityEntityActionContributors = { + // enum indicates the page to add contributors to + [eIdentityComponents.Users]: [ + alertUserNameContributor, + // You can add more contributors here + ], +}; +``` + +The list of actions, conveniently named as `actionList`, is a **doubly linked list**. That is why we have used the `addTail` method, which adds the given value to the end of the list. You may find [all available methods here](../Common/Utils/Linked-List.md). + +> **Important Note 1:** AoT compilation does not support function calls in decorator metadata. This is why we have defined `alertUserNameContributor` as an exported function declaration here. Please do not forget exporting your contributor callbacks and forget about lambda functions (a.k.a. arrow functions). Please refer to [AoT metadata errors](https://angular.io/guide/aot-metadata-errors#function-calls-not-supported) for details. + +> **Important Note 2:** Please use one of the following if Ivy is not enabled in your project. Otherwise, you will get an "Expression form not supported." error. + +```js +export const identityEntityActionContributors: IdentityEntityActionContributors = { + 'Identity.UsersComponent': [ alertUserNameContributor ], +}; + +/* OR */ + +const identityContributors: IdentityEntityActionContributors = {}; +identityContributors[eIdentityComponents.Users] = [ alertUserNameContributor ]; +export const identityEntityActionContributors = identityContributors; +``` + +### Step 2. Import and Use Entity Action Contributors + +Import `identityEntityActionContributors` in your routing module and pass it to the static `forLazy` method of `IdentityModule` as seen below: + +```js +import { identityEntityActionContributors } from './entity-action-contributors'; + +const routes: Routes = [ + { + path: '', + component: DynamicLayoutComponent, + children: [ + { + path: 'identity', + loadChildren: () => + import('@volo/abp.ng.identity').then(m => + m.IdentityModule.forLazy({ + entityActionContributors: identityEntityActionContributors, + }), + ), + }, + // other child routes + ], + // other routes + } +]; +``` + +That is it, `alertUserName` entity action will be added as the last action on the grid dropdown in the users page (`UsersComponent`) of the `IdentityModule`. + +## How to Place a Custom Modal and Trigger It by Entity Actions + +Incase you need to place a custom modal that will be triggered by an entity action, there are two ways to do it: A quick one and an elaborate one. + +### The Quick Solution + +1. Place your custom modal inside `AppComponent` template. + ```html + + +

+
+ + + + + + + + + + +
+ ``` + +2. Add the following inside your `AppComponent` class: + ```js + isModalOpen: boolean; + + openModal(/* may take parameters */) { + /* and set things before showing the modal */ + this.isModalOpen = true; + } + ``` + +3. Add an entity action similar to this: + ```js + const customModalAction = new EntityAction({ + text: 'Custom Modal Action', + action: data => { + const component = data.getInjected(AppComponent); + component.openModal(/* you may pass parameters */); + }, + }); + ``` + +That should work. However, there is a longer but lazy-loading solution, and we are going to use NGXS for it. + +### The Elaborate Solution + +Consider the modal will be displayed in the Identity module. How can we lazy-load it too? + +1. Create a folder called `identity-extended` inside your app folder. +2. Create a file called `identity-popups.store.ts` in it. +3. Insert the following code in the new file: + ```js + import { Action, Selector, State, StateContext } from '@ngxs/store'; + + export class ToggleIdentityPopup { + static readonly type = '[IdentityPopups] Toggle'; + constructor(public readonly payload: boolean) {} + } + + @State({ + name: 'IdentityPopups', + defaults: { + isVisible: false, + }, + }) + export class IdentityPopupsState { + @Selector() + static isVisible(state: IdentityPopupsStateModel) { + return state.isVisible; + } + + @Action(ToggleIdentityPopup) + toggleModal( + context: StateContext, + { payload }: ToggleIdentityPopup, + ) { + context.patchState({ isVisible: payload }); + } + } + + interface IdentityPopupsStateModel { + isVisible: boolean; + } + ``` + +4. Create a file called `identity-extended.module.ts` in the same folder. +5. Insert the following code in the new file: + ```js + import { CoreModule } from '@abp/ng.core'; + import { ThemeSharedModule } from '@abp/ng.theme.shared'; + import { Component, NgModule } from '@angular/core'; + import { RouterModule } from '@angular/router'; + import { NgxsModule, Select, Store } from '@ngxs/store'; + import { Observable } from 'rxjs'; + import { IdentityPopupsState, ToggleIdentityPopup } from './identity-popups.store'; + + @Component({ + template: ` + + + `, + }) + export class IdentityOutletComponent {} + + @Component({ + template: ` + + +

+
+ + + + + + + + + + +
+ `, + }) + export class IdentityPopupsComponent { + @Select(IdentityPopupsState.isVisible) + isVisible$: Observable; + + constructor(private store: Store) {} + + onDisappear() { + this.store.dispatch(new ToggleIdentityPopup(false)); + } + } + + @NgModule({ + declarations: [IdentityPopupsComponent, IdentityOutletComponent], + imports: [ + CoreModule, + ThemeSharedModule, + NgxsModule.forFeature([IdentityPopupsState]), + RouterModule.forChild([ + { + path: '', + component: IdentityOutletComponent, + children: [ + { + path: '', + outlet: 'popup', + component: IdentityPopupsComponent, + }, + { + path: '', + loadChildren: () => import('@volo/abp.ng.identity').then(m => m.IdentityModule), + }, + ], + }, + ]), + ], + }) + export class IdentityExtendedModule {} + ``` + +6. Change the `identity` path in your `AppRoutingModule` to this: + ```js + { + path: 'identity', + loadChildren: () => + import('./identity-extended/identity-extended.module').then(m => m.IdentityExtendedModule), + }, + ``` + +7. Add an entity action similar to this: + ```js + const customModalAction = new EntityAction({ + text: 'Custom Modal Action', + action: data => { + const store = data.getInjected(Store); + store.dispatch(new ToggleIdentityPopup(true)); + }, + }); + ``` + +It should now be working well with lazy-loading. The files are compact in the description to make it quicker to explain. You may split the files as you wish. + +## API + +### ActionData\ + +`ActionData` is the shape of the parameter passed to all callbacks or predicates in an `EntityAction`. + +It has the following properties: + +- **record** is the row data, i.e. current value rendered in the table. + + ```js + { + text: 'Click Me!', + action: data => { + alert(data.record.userName); + }, + } + ``` + +- **index** is the table index where the record is at. + +- **getInjected** is the equivalent of [Injector.get](https://angular.io/api/core/Injector#get). You can use it to reach injected dependencies of `GridActionsComponent`, including, but not limited to, its parent component. + + ```js + { + text: 'Click Me!', + action: data => { + const restService = data.getInjected(RestService); + + // Use restService public props and methods here + }, + visible: data => { + const usersComponent = data.getInjected(UsersComponent); + + // Use usersComponent public props and methods here + }, + } + ``` + +### ActionCallback\ + +`ActionCallback` is the type of the callback function that can be passed to an `EntityAction` as `action` parameter. An action callback gets a single parameter, the `ActionData`. The return type may be anything, including `void`. Here is a simplified representation: + +```js +type ActionCallback = (data?: ActionData) => R; +``` + +### ActionPredicate\ + +`ActionPredicate` is the type of the predicate function that can be passed to an `EntityAction` as `visible` parameter. An action predicate gets a single parameter, the `ActionData`. The return type must be `boolean`. Here is a simplified representation: + +```js +type ActionPredicate = (data?: ActionData) => boolean; +``` + +### EntityActionOptions\ + +`EntityActionOptions` is the type that defines required and optional properties you have to pass in order to create an entity action. + +Its type definition is as follows: + +```js +type EntityActionOptions = { + action: ActionCallback, + text: string, + icon?: string, + permission?: string, + visible?: ActionPredicate, +}; +``` + +As you see, passing `action` and `text` is enough to create an entity action. Here is what each property is good for: + +- **action** is a callback that is called when the grid action is clicked. (_required_) +- **text** is the button text which will be localized. (_required_) +- **icon** is the classes that define an icon to be placed before the text. (_default:_ `''`) +- **permission** is the permission context which will be used to decide if this type of grid action should be displayed to the user or not. (_default:_ `undefined`) +- **visible** is a predicate that will be used to decide if the current record should have this grid action or not. (_default:_ `() => true`) + +You may find a full example below. + +### EntityAction\ + +`EntityAction` is the class that defines your entity actions. It takes an `EntityActionOptions` and sets the default values to the properties, creating an entity action that can be passed to an entity contributor. + +```js +const options: EntityActionOptions = { + action: data => { + const component = data.getInjected(UsersComponent); + component.unlock(data.record.id); + }, + text: 'AbpIdentity::Unlock', + icon: 'fa fa-unlock', + permission: 'AbpIdentity.Users.Update', + visible: data => data.record.isLockedOut, +}; + +const action = new EntityAction(options); +``` + +It also has two static methods to create its instances: + +- **EntityAction.create\\(options: EntityActionOptions\\)** is used to create an instance of `EntityAction`. + ```js + const action = EntityAction.create(options); + ``` +- **EntityAction.createMany\\(options: EntityActionOptions\\[\]\)** is used to create multiple instances of `EntityAction` with given array of `EntityActionOptions`. + ```js + const actions = EntityAction.createMany(optionsArray); + ``` + +### EntityActionList\ + +`EntityActionList` is the list of actions passed to every action contributor callback as the first parameter named `actionList`. It is a **doubly linked list**. You may find [all available methods here](../Common/Utils/Linked-List.md). + +The items in the list will be displayed according to the linked list order, i.e. from head to tail. If you want to re-order them, all you have to do is something like this: + +```js +export function reorderUserContributors( + actionList: EntityActionList, +) { + // drop "Unlock" button + const unlockActionNode = actionList.dropByValue( + 'AbpIdentity::Unlock', + (action, text) => action.text === text, + ); + + // add it back to the head of the list + actionList.addHead(unlockActionNode.value); +} +``` + +### EntityActionContributorCallback\ + +`EntityActionContributorCallback` is the type that you can pass as entity action contributor callbacks to static `forLazy` methods of the modules. + +```js +// lockUserContributor should have EntityActionContributorCallback type + +export function lockUserContributor( + actionList: EntityActionList, +) { + // add lockUser as 3rd action + actionList.add(lockUser).byIndex(2); +} + +export const identityEntityActionContributors = { + [eIdentityComponents.Users]: [lockUserContributor], +}; +``` + +## See Also + +- [Customizing Application Modules Guide](../../Customizing-Application-Modules-Guide.md) diff --git a/docs/en/UI/Angular/images/user-action-extension-click-me-ng.png b/docs/en/UI/Angular/images/user-action-extension-click-me-ng.png new file mode 100644 index 0000000000000000000000000000000000000000..675f05217acf03531f66ad82536cd26d0e693f89 GIT binary patch literal 142395 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�Uph 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%0AjwwLcC7_cd(~SCo%BN7+#gJ-}1%F7f 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 literal 0 HcmV?d00001 diff --git a/docs/en/UI/Angular/images/user-prop-extension-date-of-birth-field-ng.png b/docs/en/UI/Angular/images/user-prop-extension-date-of-birth-field-ng.png new file mode 100644 index 0000000000000000000000000000000000000000..948c4a9fd542cff4dbcee0d2c53c9fd281e37435 GIT binary patch literal 154453 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%0A5bu;~@P*;Zc3>W>7C4mD5x~E_ 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%0A1#Q%InYZYaVoC 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 LdTP~AY~K6_NEhgy literal 0 HcmV?d00001 diff --git a/docs/en/UI/Angular/images/user-prop-extension-name-column-ng.png b/docs/en/UI/Angular/images/user-prop-extension-name-column-ng.png new file mode 100644 index 0000000000000000000000000000000000000000..82d72b40ecb0823e6dfcefbe82552ea8c311b211 GIT binary patch literal 82388 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 bV7_qCF+_-G;RSFyh^|~zzK|+s^zi=xvyF1L literal 0 HcmV?d00001 From a3f1dd1d191e8f57e8c36aaaad091164a477448a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 1 Jan 2021 13:52:44 +0300 Subject: [PATCH 161/217] Added page toolbar extensions document --- .../Customizing-Application-Modules-Guide.md | 7 + docs/en/UI/Angular/Page-Toolbar-Extensions.md | 420 ++++++++++++++++++ ...ser-page-toolbar-extension-click-me-ng.png | Bin 0 -> 106292 bytes ...e-toolbar-extension-custom-click-me-ng.png | Bin 0 -> 98093 bytes .../UI/AspNetCore/Page-Toolbar-Extensions.md | 163 +++++++ docs/en/images/page-toolbar-button.png | Bin 0 -> 45092 bytes .../images/page-toolbar-custom-component.png | Bin 0 -> 34814 bytes 7 files changed, 590 insertions(+) create mode 100644 docs/en/UI/Angular/Page-Toolbar-Extensions.md create mode 100644 docs/en/UI/Angular/images/user-page-toolbar-extension-click-me-ng.png create mode 100644 docs/en/UI/Angular/images/user-page-toolbar-extension-custom-click-me-ng.png create mode 100644 docs/en/UI/AspNetCore/Page-Toolbar-Extensions.md create mode 100644 docs/en/images/page-toolbar-button.png create mode 100644 docs/en/images/page-toolbar-custom-component.png diff --git a/docs/en/Customizing-Application-Modules-Guide.md b/docs/en/Customizing-Application-Modules-Guide.md index da18d04d40..3f8597bc71 100644 --- a/docs/en/Customizing-Application-Modules-Guide.md +++ b/docs/en/Customizing-Application-Modules-Guide.md @@ -84,6 +84,13 @@ Data table column extension system allows you to add a new column in the data ta * [Data Table Column Extensions for ASP.NET Core UI](UI/AspNetCore/Data-Table-Column-Extensions.md) * [Data Table Column Extensions for Angular](UI/Angular/Data-Table-Column-Extensions.md) +#### Page Toolbar (TODO) + +Page toolbar system allows you to add components to the toolbar of a page; + +* [Page Toolbar Extensions for ASP.NET Core UI](UI/AspNetCore/Page-Toolbar-Extensions.md) +* [Page Toolbar Extensions for Angular](UI/Angular/Page-Toolbar-Extensions.md) + #### Others * [Dynamic Form Extensions for Angular](UI/Angular/Dynamic-Form-Extensions.md) diff --git a/docs/en/UI/Angular/Page-Toolbar-Extensions.md b/docs/en/UI/Angular/Page-Toolbar-Extensions.md new file mode 100644 index 0000000000..187ac9387d --- /dev/null +++ b/docs/en/UI/Angular/Page-Toolbar-Extensions.md @@ -0,0 +1,420 @@ +# Page Toolbar Extensions for Angular UI + +## Introduction + +Page toolbar extension system allows you to add a new action to the toolbar of a page. A "Click Me" action was added to the user management page below: + +![Page Toolbar Extension Example: "Click Me!" Action](images/user-page-toolbar-extension-click-me-ng.png) + +You can take any action (open a modal, make an HTTP API call, redirect to another page... etc) by writing your custom code. You can also access to page data (the main record, usually an entity list) in your code. Additionally, you can pass in custom components instead of using the default button. + +## How to Add an Action to Page Toolbar + +In this example, we will add a "Click Me!" action and log `userName` of all users in the user management page of the [Identity Module](../../Modules/Identity.md) to the console. + +### Step 1. Create Toolbar Action Contributors + +The following code prepares a constant named `identityToolbarActionContributors`, ready to be imported and used in your root module: + +```js +// toolbar-action-contributors.ts + +import { ToolbarActionList, ToolbarAction } from '@abp/ng.theme.shared/extensions'; +import { IdentityToolbarActionContributors, IdentityUserDto } from '@volo/abp.ng.identity'; + +const logUserNames = new ToolbarAction({ + text: 'Click Me!', + action: data => { + // Replace log with your custom code + data.record.forEach(user => console.log(user.userName)); + }, + // See ToolbarActionOptions in API section for all options +}); + +export function logUserNamesContributor( + actionList: ToolbarActionList +) { + actionList.addHead(logUserNames); +} + +export const identityToolbarActionContributors: IdentityToolbarActionContributors = { + // enum indicates the page to add contributors to + [eIdentityComponents.Users]: [ + logUserNamesContributor, + // You can add more contributors here + ], +}; + +``` + +The list of actions, conveniently named as `actionList`, is a **doubly linked list**. That is why we have used the `addHead` method, which adds the given value to the beginning of the list. You may find [all available methods here](../Common/Utils/Linked-List.md). + +> **Important Note:** AoT compilation does not support function calls in decorator metadata. This is why we have defined `logUserNamesContributor` as an exported function declaration here. Please do not forget exporting your contributor callbacks and forget about lambda functions (a.k.a. arrow functions). Please refer to [AoT metadata errors](https://angular.io/guide/aot-metadata-errors#function-calls-not-supported) for details. + +### Step 2. Import and Use Toolbar Action Contributors + +Import `identityToolbarActionContributors` in your routing module and pass it to the static `forLazy` method of `IdentityModule` as seen below: + +```js +import { identityToolbarActionContributors } from './toolbar-action-contributors'; + +const routes: Routes = [ + { + path: '', + component: DynamicLayoutComponent, + children: [ + { + path: 'identity', + loadChildren: () => + import('@volo/abp.ng.identity').then(m => + m.IdentityModule.forLazy({ + toolbarActionContributors: identityToolbarActionContributors, + }), + ), + }, + // other child routes + ], + // other routes + } +]; +``` + +That is it, `logUserNames` toolbar action will be added as the first action on the page toolbar in the users page (`UsersComponent`) of the `IdentityModule`. + +## How to Add a Custom Component to Page Toolbar + +In this example, we will add a custom "Click Me!" button and log `userName` of all users in the user management page of the [Identity Module](../../Modules/Identity.md) to the console. + +### Step 1. Create A Custom Component + +We need to have a component before we can pass it to the toolbar action contributors: + +```js +// click-me-button.component.ts + +import { Component, Inject } from '@angular/core'; +import { ActionData, EXTENSIONS_ACTION_DATA } from '@abp/ng.theme.shared/extensions'; +import { IdentityUserDto } from '@volo/abp.ng.identity'; + +@Component({ + selector: 'app-click-me-button', + template: ` + + `, +}) +export class ClickMeButtonComponent { + constructor( + @Inject(EXTENSIONS_ACTION_DATA) + private data: ActionData + ) {} + + handleClick() { + this.data.record.forEach(user => console.log(user.userName)); + } +} +``` + +Here, `EXTENSIONS_ACTION_DATA` token provides us the context from the page toolbar. Therefore, we are able to reach the page data via `record`, which is an array of users, i.e. `IdentityUserDto[]`. + +> We could also import `EXTENSIONS_ACTION_CALLBACK` from **@abp/ng.theme.shared/extensions** package, which is a higher order function that triggers the predefined `action` when called. It passes `ActionData` as the first parameter, so you do not have to pass it explicitly. In other words, `EXTENSIONS_ACTION_CALLBACK` can be called without any parameters and it will not fail. + +### Step 2. Create Toolbar Action Contributors + +The following code prepares a constant named `identityToolbarActionContributors`, ready to be imported and used in your root module. When `ToolbarComponent` is used instead of `ToolbarAction`, we can pass a component in: + +```js +// toolbar-action-contributors.ts + +import { ToolbarActionList, ToolbarComponent } from '@abp/ng.theme.shared/extensions'; +import { IdentityUserDto } from '@volo/abp.ng.identity'; +import { IdentityToolbarActionContributors } from '@volo/abp.ng.identity/config'; +import { ClickMeButtonComponent } from './click-me-button.component'; + +const logUserNames = new ToolbarComponent({ + component: ClickMeButtonComponent, + // See ToolbarActionOptions in API section for all options +}); + +export function logUserNamesContributor( + actionList: ToolbarActionList +) { + actionList.addHead(logUserNames); +} + +export const identityToolbarActionContributors: IdentityToolbarActionContributors = { + // enum indicates the page to add contributors to + [eIdentityComponents.Users]: [ + logUserNamesContributor, + // You can add more contributors here + ], +}; + +``` + +The list of actions, conveniently named as `actionList`, is a **doubly linked list**. That is why we have used the `addHead` method, which adds the given value to the beginning of the list. You may find [all available methods here](../Common/Utils/Linked-List.md). + +> **Important Note 1:** AoT compilation does not support function calls in decorator metadata. This is why we have defined `logUserNamesContributor` as an exported function declaration here. Please do not forget exporting your contributor callbacks and forget about lambda functions (a.k.a. arrow functions). Please refer to [AoT metadata errors](https://angular.io/guide/aot-metadata-errors#function-calls-not-supported) for details. + +> **Important Note 2:** Please use one of the following if Ivy is not enabled in your project. Otherwise, you will get an "Expression form not supported." error. + +```js +export const identityToolbarActionContributors: IdentityToolbarActionContributors = { + 'Identity.UsersComponent': [ logUserNamesContributor ], +}; + +/* OR */ + +const identityContributors: IdentityToolbarActionContributors = {}; +identityContributors[eIdentityComponents.Users] = [ logUserNamesContributor ]; +export const identityToolbarActionContributors = identityContributors; +``` + +### Step 3. Import and Use Toolbar Action Contributors + +Import `identityToolbarActionContributors` in your routing module and pass it to the static `forLazy` method of `IdentityModule` as seen below. If Ivy is not enabled in your project, do not forget putting `ClickMeButtonComponent` into `entryComponents`: + +```js +import { identityToolbarActionContributors } from './toolbar-action-contributors'; + +const routes: Routes = [ + { + path: '', + component: DynamicLayoutComponent, + children: [ + { + path: 'identity', + loadChildren: () => + import('@volo/abp.ng.identity').then(m => + m.IdentityModule.forLazy({ + toolbarActionContributors: identityToolbarActionContributors, + }), + ), + }, + // other child routes + ], + // other routes + } +]; +``` + +That is it, `logUserNames` toolbar action will be added as the first action on the page toolbar in the users page (`UsersComponent`) of the `IdentityModule` and it will be triggered by a custom button, i.e. `ClickMeButtonComponent`. Please note that **component projection is not limited to buttons** and you may use other UI components. + +![Page Toolbar Extension Example: Custom "Click Me!" Button](images/user-page-toolbar-extension-custom-click-me-ng.png) + +## How to Place a Custom Modal and Trigger It by Toolbar Actions + +Please check the same topic in [entity action extensions document](Entity-Action-Extensions.md) and replace entity action with a toolbar action. + +## API + +### ActionData\ + +`ActionData` is the shape of the parameter passed to all callbacks or predicates in a `ToolbarAction`. + +It has the following properties: + +- **record** is the page data, the main record on a page, usually an entity list (e.g. list of users). + + ```js + { + text: 'Click Me!', + action: data => { + data.record.forEach(user => { + console.lof(user.userName); + }); + }, + } + ``` + +- **getInjected** is the equivalent of [Injector.get](https://angular.io/api/core/Injector#get). You can use it to reach injected dependencies of `PageToolbarComponent`, including, but not limited to, its parent component. + + ```js + { + text: 'Click Me!', + action: data => { + const restService = data.getInjected(RestService); + + // Use restService public props and methods here + }, + visible: data => { + const usersComponent = data.getInjected(UsersComponent); + + // Use usersComponent public props and methods here + }, + } + ``` + +### ActionCallback\ + +`ActionCallback` is the type of the callback function that can be passed to a `ToolbarAction` as `action` parameter. An action callback gets a single parameter, the `ActionData`. The return type may be anything, including `void`. Here is a simplified representation: + +```js +type ActionCallback = (data?: ActionData) => R; +``` + +### ActionPredicate\ + +`ActionPredicate` is the type of the predicate function that can be passed to a `ToolbarAction` as `visible` parameter. An action predicate gets a single parameter, the `ActionData`. The return type must be `boolean`. Here is a simplified representation: + +```js +type ActionPredicate = (data?: ActionData) => boolean; +``` + +### ToolbarActionOptions\ + +`ToolbarActionOptions` is the type that defines required and optional properties you have to pass in order to create an toolbar action. + +Its type definition is as follows: + +```js +type ToolbarActionOptions = { + action: ActionCallback, + text: string, + icon?: string, + permission?: string, + visible?: ActionPredicate, +}; +``` + +As you see, passing `action` and `text` is enough to create an toolbar action. Here is what each property is good for: + +- **action** is a callback that is called when the toolbar action is clicked. (_required_) +- **text** is the button text which will be localized. (_required_) +- **icon** is the classes that define an icon to be placed before the text. (_default:_ `''`) +- **permission** is the permission context which will be used to decide if this toolbar action should be displayed to the user or not. (_default:_ `undefined`) +- **visible** is a predicate that will be used to decide if the page toolbar should have this action or not. (_default:_ `() => true`) + +You may find a full example below. + +### ToolbarAction\ + +`ToolbarAction` is the class that defines your toolbar actions. It takes an `ToolbarActionOptions` and sets the default values to the properties, creating an toolbar action that can be passed to an toolbar contributor. + +```js +const options: ToolbarActionOptions = { + action: data => { + const service = data.getInjected(MyCustomIdentityService); + const lockedUsers = data.record.filter(user => user.isLockedOut); + service.unlockAll(lockedUsers); + }, + text: 'MyProjectName::UnlockAll', + icon: 'fa fa-unlock', + permission: 'AbpIdentity.Users.Update', + visible: data => data.record.some(user => user.isLockedOut), +}; + +const action = new ToolbarAction(options); +``` + +It also has two static methods to create its instances: + +- **ToolbarAction.create\\(options: ToolbarActionOptions\\)** is used to create an instance of `ToolbarAction`. + ```js + const action = ToolbarAction.create(options); + ``` +- **ToolbarAction.createMany\\(options: ToolbarActionOptions\\[\]\)** is used to create multiple instances of `ToolbarAction` with given array of `ToolbarActionOptions`. + +### ToolbarComponentOptions\ + +`ToolbarComponentOptions` is the type that defines required and optional properties you have to pass in order to create an toolbar component. + +Its type definition is as follows: + +```js +type ToolbarComponentOptions = { + component: Type, + action?: ActionCallback, + permission?: string, + visible?: ActionPredicate, +}; +``` + +As you see, passing `action` and `text` is enough to create an toolbar action. Here is what each property is good for: + +- **component** is the constructor of the component to be projected. (_required_) +- **action** is a predefined callback that you can reach in your component via `EXTENSIONS_ACTION_CALLBACK` token and trigger. (_optional_) +- **permission** is the permission context which will be used to decide if this toolbar action should be displayed to the user or not. (_default:_ `undefined`) +- **visible** is a predicate that will be used to decide if the page toolbar should have this action or not. (_default:_ `() => true`) + +You may find a full example below. + +### ToolbarComponent\ + +`ToolbarComponent` is the class that defines toolbar actions which project a custom component. It takes an `ToolbarComponentOptions` and sets the default values to the properties, creating a toolbar action that can be passed to an toolbar contributor. + +```js +const options: ToolbarComponentOptions = { + component: UnlockAllButton, + action: data => { + const service = data.getInjected(MyCustomIdentityService); + const lockedUsers = data.record.filter(user => user.isLockedOut); + service.unlockAll(lockedUsers); + }, + permission: 'AbpIdentity.Users.Update', + visible: data => data.record.some(user => user.isLockedOut), +}; + +const action = new ToolbarComponent(options); +``` + +It also has two static methods to create its instances: + +- **ToolbarComponent.create\\(options: ToolbarComponentOptions\\)** is used to create an instance of `ToolbarComponent`. + ```js + const action = ToolbarComponent.create(options); + ``` +- **ToolbarComponent.createMany\\(options: ToolbarComponentOptions\\[\]\)** is used to create multiple instances of `ToolbarComponent` with given array of `ToolbarComponentOptions`. + ```js + const actions = ToolbarComponent.createMany(optionsArray); + ``` + +### ToolbarActionList\ + +`ToolbarActionList` is the list of actions passed to every action contributor callback as the first parameter named `actionList`. It is a **doubly linked list**. You may find [all available methods here](../Common/Utils/Linked-List.md). + +The items in the list will be displayed according to the linked list order, i.e. from head to tail. If you want to re-order them, all you have to do is something like this: + +```js +export function reorderUserContributors( + actionList: ToolbarActionList, +) { + // drop "New User" button + const newUserActionNode = actionList.dropByValue( + 'AbpIdentity::NewUser', + (action, text) => action['text'] === text, + ); + + // add it back to the head of the list + actionList.addHead(newUserActionNode.value); +} + +export const identityEntityActionContributors = { + [eIdentityComponents.Users]: [ + logUserNamesContributor, + reorderUserContributors, + ], +}; +``` + +### ToolbarActionContributorCallback\ + +`ToolbarActionContributorCallback` is the type that you can pass as toolbar action contributor callbacks to static `forLazy` methods of the modules. + +```js +// exportUsersContributor should have ToolbarActionContributorCallback type + +export function exportUsersContributor( + actionList: ToolbarActionList, +) { + // add exportUsers just before the last action + actionList.add(exportUsers).byIndex(-1); +} + +export const identityEntityActionContributors = { + [eIdentityComponents.Users]: [exportUsersContributor], +}; +``` + +## See Also + +- [Customizing Application Modules Guide](../../Customizing-Application-Modules-Guide.md) diff --git a/docs/en/UI/Angular/images/user-page-toolbar-extension-click-me-ng.png b/docs/en/UI/Angular/images/user-page-toolbar-extension-click-me-ng.png new file mode 100644 index 0000000000000000000000000000000000000000..fcd36e4a7b415e14768936e029d0eae313f8231a GIT binary patch literal 106292 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

#L)Y9yMur3 z@k@}~T3CN37W;W}ozJCXRnG9+x1v64F^+TW5>>MIG{`S+;seq81dZ|%;4+IAZGE#k ze@HjBdbSZHXg!m35MvyPI4PNujs_&&HGlC*2*r_*fevKBN|*3nQOs-9U?Bn!&CKvuSyHG_JLrmr1xaZqO}|92>QBF6ju8eA{NtJd5TX3^;}m@N^hx!FmkZ= z_j7&kXM1;T+M)`Sc=Oq5%*6Wa3UIU7Tnuq4-_%?tcC~1|pKjZ&iJSj0vsRq=Ey!6q z1*@~WpMF8p`OINhQ9%6^Q~*h_(Q?9-Z@I@mUCtDF3n80ui$UA7*ond-+X}+edWhAH zp&TZehij{95 zD>FoXX*woS4&#Z8jhY`UAB%4hoCQayc~#pJ!Jq9Q7IceTvKIV9{-Tsjf4f~ozXr|< zKOKVAA7yoA13p4+B%ZFJ@^&;Pbn|D+(Voj`shu0 zUCoHCDD4*ECRwpuq6aGWBS)A0=fx1h3XtRGsrtkk`+?}$EGUh2xB#O`lq}v4XZwEw~@`uqRN=Wi$b?kx;bh6S|{_zVmq7kgtmVkO;7w< zxmEAKF0Ameo%t+X$Tuze8Cg}y9DZnJ$nqbpznjl*m*>@EQjaoyWxr5|)t7V=_|eV_ z26l?sVu27#_Zb&91r@@xg=SfZ4$GnGUyofMvFnv^QuUPdsd1d&xa%{7!-;6A}1t-A^PGYg;yp##q{OCXFvU*v&``UgbUkxHb^ zb4O~9Eqpn&^80lLn@mBVFB&fV1aHrg>@P5E?a%agTTk{9uTtwRhk)f7Y6n|+We&}1 zDi)fK1>f@&I0{ zw;W%YRn@juUJ*V2r2kX@&<3!b!#mL@$}kL*X3ih0EZRC zq31L%sia=k=1bk5UYk!dpZ9gxkQaT#H@wdT(Az4?m(7}!KPoCK+f?`MN%CL#i>&Hm zaWGgCk3poM1g~15jN6>617|XwtPGscEW=1-q?#7sSqk^cbKBIhXd8pUK=H+tLpov5 zTVN&@1a770B|mj`}syM7tPM4{WHoprV03&JOtw(lUOZ@j5H5v#Tc=j>s&+`p|+ z8y7@gUuS~)f5L0!*c1D`7Zy}CSPHJKq>ByJuDqJLla1T!AJ!>!vw@qDAf31;(R1X? zR~o2;Pu^Zl+hH<*$>59=->q7VZXPtgXA1rGJkg?g^C|Y; zz5MAfl3hA0A5f%*9l{_4ZNp);C)5Q|d^O{OKi@nQ6|;#YWJvBNIU6WK_%|=Z(+w%v zMi z{dU!ZaT)YVH;n}tA7a=>j6`)Tc8W_I?Xg{9zuB_fy#6yTqG0?f(sKp6UBfwBRWPE`mLedXJYAams=~&-ZQs2{f-P(YdlPR#NpvfiM4A)fQ%n|!ZHfc z+nr+Qr7mYKcqX>;yA~FJZ(7KpSM4Ph6wrWz^}@jbfdVK+WIdhKSD}Y&dbPvkKK()| zvn;9q8*ymiWN*51;iqL8Let&h09tbiG$_1@t6tsle3U2~$F?Z5NXPlSu!tL`vU)o(tRst-*x*$(i1>2WZp~f71ivSCuMUix$aA%wKtvDN{D0ov&VelaR8n&LN@kvae zh;+}y7KIFOW?#o;;$Xi#|MlzYuoHj%_F)2_(@s|IDqI$%>0evZO)%|+-!}RPa3y9x z-sC?=xqH>QNWb>QXT~wZ<&Nl&0VqG3-W4QZGLcomA3q8{u#$-oSJ=4~ zhjIn`8J9KzHT`n!>Yow4WGRWu(2zwZ?@Fr6T`ht}{aY$u=^kcJg`oh%8SR)I^^$pr zA8m|Mp5Cf!t~(WA?hsZKOco>1!4EYDR8_3UZ0B=gs`7l!U^$D*sWVwPc0}`H$em9O z@77vDT4(ebxMukE#Vt*7p%j&G`TUOf^q5?D%(fik zB`^BM;vBlGt}WnBbko?$6{gQ@uGhGwYWsA!6db?I4m+@XX12&x@%dnIZ zgN6_TTKLxSd)d)1*m~}F7u1VO?;V%$VU4?C*YO0t!48u-f0|�|$NMDDOs0qkxK1 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�pO%uh5lA%)4<#H1tkxa>$f!(K3`~8 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 literal 0 HcmV?d00001 diff --git a/docs/en/UI/AspNetCore/Page-Toolbar-Extensions.md b/docs/en/UI/AspNetCore/Page-Toolbar-Extensions.md new file mode 100644 index 0000000000..db466bebdb --- /dev/null +++ b/docs/en/UI/AspNetCore/Page-Toolbar-Extensions.md @@ -0,0 +1,163 @@ +# Page Toolbar Extensions for ASP.NET Core UI + +Page toolbar system allows you to add components to the toolbar of any page. The page toolbar is the area right to the header of a page. A button ("Import users from excel") was added to the user management page below: + +![page-toolbar-button](../../images/page-toolbar-button.png) + +You can add any type of view component item to the page toolbar or modify existing items. + +## How to Set Up + +In this example, we will add an "Import users from excel" button and execute a JavaScript code for the user management page of the [Identity Module](../../Modules/Identity.md). + +### Add a New Button to the User Management Page + +Write the following code inside the `ConfigureServices` of your web module class: + +````csharp +Configure(options => +{ + options.Configure(toolbar => + { + toolbar.AddButton( + LocalizableString.Create("ImportFromExcel"), + icon: "file-import", + id: "ImportUsersFromExcel", + type: AbpButtonType.Secondary + ); + }); +}); +```` + +`AddButton` is a shortcut to simply add a button component. Note that you need to add the `ImportFromExcel` to your localization dictionary (json file) to localize the text. + +When you run the application, you will see the button added next to the current button list. There are some other parameters of the `AddButton` method (for example, use `order` to set the order of the button component relative to the other components). + +### Create a JavaScript File + +Now, we can go to the client side to handle click event of the new button. First, add a new JavaScript file to your solution. We added inside the `/Pages/Identity/Users` folder of the `.Web` project: + +![user-action-extension-on-solution](../../images/user-action-extension-on-solution.png) + +Here, the content of this JavaScript file: + +````js +$(function () { + $('#ImportUsersFromExcel').click(function (e) { + e.preventDefault(); + alert('TODO: import users from excel'); + }); +}); +```` + +In the `click` event, you can do anything you need to do. + +### Add the File to the User Management Page + +Then you need to add this JavaScript file to the user management page. You can take the power of the [Bundling & Minification system](Bundling-Minification.md). + +Write the following code inside the `ConfigureServices` of your module class: + +````csharp +Configure(options => +{ + options.ScriptBundles.Configure( + typeof(Volo.Abp.Identity.Web.Pages.Identity.Users.IndexModel).FullName, + bundleConfiguration => + { + bundleConfiguration.AddFiles( + "/Pages/Identity/Users/my-user-extensions.js" + ); + }); +}); +```` + +This configuration adds `my-user-extensions.js` to the user management page of the Identity Module. `typeof(Volo.Abp.Identity.Web.Pages.Identity.Users.IndexModel).FullName` is the name of the bundle in the user management page. This is a common convention used for all the ABP Commercial modules. + +## Advanced Use Cases + +While you typically want to add a button action to the page toolbar, it is possible to add any type of component. + +### Add View Component to a Page Toolbar + +First, create a new view component in your project: + +![page-toolbar-custom-component](../../images/page-toolbar-custom-component.png) + +For this example, we've created a `MyToolbarItem` view component under the `/Pages/Identity/Users/MyToolbarItem` folder. + +`MyToolbarItemViewComponent.cs` content: + +````csharp +public class MyToolbarItemViewComponent : AbpViewComponent +{ + public IViewComponentResult Invoke() + { + return View("~/Pages/Identity/Users/MyToolbarItem/Default.cshtml"); + } +} +```` + +`Default.cshtml` content: + +````xml + + + +```` + +* `.cshtml` file can contain any type of component(s). It is a typical view component. +* `MyToolbarItemViewComponent` can inject and use any service if you need. + +Then you can add the `MyToolbarItemViewComponent` to the user management page: + +````csharp +Configure(options => +{ + options.Configure( + toolbar => + { + toolbar.AddComponent(); + } + ); +}); +```` + +* If your component accepts arguments (in the `Invoke`/`InvokeAsync` method), you can pass them to the `AddComponent` method as an anonymous object. + +#### Permissions + +If your button/component should be available based on a [permission/policy](../../Authorization.md), you can pass the permission/policy name as the `requiredPolicyName` parameter to the `AddButton` and `AddComponent` methods. + +### Add a Page Toolbar Contributor + +If you perform advanced custom logic while adding an item to a page toolbar, you can create a class that implements the `IPageToolbarContributor` interface or inherits from the `PageToolbarContributor` class: + +````csharp +public class MyToolbarContributor : PageToolbarContributor +{ + public override Task ContributeAsync(PageToolbarContributionContext context) + { + context.Items.Insert(0, new PageToolbarItem(typeof(MyToolbarItemViewComponent))); + + return Task.CompletedTask; + } +} +```` + +* You can use `context.ServiceProvider` to resolve dependencies if you need. + +Then add your class to the `Contributors` list: + +````csharp +Configure(options => +{ + options.Configure( + toolbar => + { + toolbar.Contributors.Add(new MyToolbarContributor()); + } + ); +}); +```` + diff --git a/docs/en/images/page-toolbar-button.png b/docs/en/images/page-toolbar-button.png new file mode 100644 index 0000000000000000000000000000000000000000..05e3f9da112a4e4f52a732304c9421c772df3656 GIT binary patch literal 45092 zcmdSAbyQnH7wAh%DQ&S*XmKdP+G52WS_p2%9a`Lj2MB=zEd(#_P~6?!-3q}axJz({ zT-xt_|J?iTd+Yx9-db7fWbK(Vd(NJHX74#Ozkn|ak~l9&U!b9(;YdpXmC?}9x6sfY z%RGDhAo*x`xq^oF7EK!XS=BXZZvpH|-gPH(I1*F9pRCZNAsb^XTW(Uf>h}n4^SJE? z0&*E4`Yf-7P*n88%V%i>uUcPg*dd$x9Kt6cB@Elw)mL}aGchJQEYoonizS=hJ+pIj ziDX3w2o3>`0ls8~zZ%iLgLv+hiT?gWLmS3!qxgGm#e>DxKV0pGJxFL+o$=AomeM&0 ziB3`YLI;1#(LB-qTk&lz`d`82qbK0MS2U6DeR&V%pw>OQ?~d)n4dddM>Px%_f+;^| zeI2G({-CYWVi#VmQyXzy|PJ^lQy!1DDZ9mz3><+c5du)X_jMyHo zM4aq66?K08_fWd`*OGmR`8;!LFEWksz6n0w5PbX$g0YP&rm~e-UciczU>C;Nv{Z~K z{HaqDUM@dijB^OSV>LH7p|T!B&Q6`zF|!1tQTTHb19V)Q{wmuTu<6F17tMRg_HzCa z8d@=Lk*#~vcLRf-E7h@3{nnOB@%lB_&_eeE1h$L8Q;uDQhQtq6Lv#Eu?)49BPa*<) zaW{hrczxx0ZUfdj6Vrhib_ye1`F~9oTlWas9nmk$x~{J3NV%?Qi8)5>e6@AgF~38q zATacmxLXq(zxpTfbum4j3bC?45@t3#$lqyeC@@AZ`OaT28RtJ{d}dUb8TrrzY%ga` z#X_HCYJ2;}zSS75TXP~}BZc&Wj)_{AlGb0DJ4Zjd@}6vjcm@C8lMptQ{T>z9YnIiE z0+l6DIxyzwNn}^lZYmSLU=h>HQpis0`Ri8-zHA%6dJA-S96W;fOq46(#WkxokX+_8wo1aArg%fo!C$n^^(#1IZ zTh<)_o(&^Fe|%%}8pG&UZ|a=9D~p+*`P?6Wj*`0@SZ`XltX@pXkYQj03qAXc(<7vf zOSrE9yphr@b^$RnGc&Pz+PAZPVH`2Fuwa7R+p7d$xOyD7o|%xG)F& zzn$6KE(b%Rjr>i@M|QUkb{=ZZH7w{q4;p`%6_R+Cg9B((Z}*+MMK%N4deU=R^*DwP z`={ZH?x+2kmJVTSj=61c6^CLxg0KzNZ-y(uE$dGhbbWsH>zsCYaq%Nl{($bY6cuC7 zR$xbA-S!I7(RU&pKc9wON~>S<&SA*SnenM^c(^v~au;h>Td&un`!hB)mNUEe=CTo( z%?nyx*J7UpuX{Q?oX2tt2*#Aw7UH`_X6rhxo<#zfp*AiPo0rJc6uk%# zLwe=5;@yEHNB`uILA}$$EXBT}=i$a3-}8hu{z{vP_AJKpeGyIg!7HY3bs63A&FF~{w1q7v8!wqx36vWF?32*<3I_TQ{%m*N*kZoLud* z>m9tn9cOa<6Lm-!#ZN3Qf4rIur zO)1B60?9$q=3I*KL=nhw2bVZ*i6}Yi;kaIsfl8y-Q2qp1@Mx?grFQra&v)tlcMInY z2B>dm&98DwN>&>i8XD5l?K=8RPBa#-au$VCU)!w1;e#k7Wccn!5ZgFF5k1VwjwL_ib>9f;ka3?OdwWiZUpEPt7pUn@cf1*-4b6ACn zr6~tnArHdO1bL5Uo(>IHOQxyH{`ov=H99NryD3b zE@r+Yk(PoITKqHuPyWt|?BhTE=ZHn`U*UEOBY+?;4NbjetQHoxHKB0+6y9uAk1wjt z@U-4wcmTD^ip2bDvajpX@Oqc2O)p*KfwGqR>1odDPRvw%Hytew0bWaG1r3w!Y2=Ya zIBdMWE=zoOue_v0Jw$1F6%}KFH5!i`uC;daWE11?y9$iu^A{#ADJaoL`MaC4 z(Jdy2bHD$Rvl)e}(bd@BAL1hYZJB`Gk%~v7af0yfi?UQysGDGPs(RG^A)UxaS{sL7 zt&ub>_9#rX^GO1K&#kUs;iEHQ^qRh|fXS+gvP1anFgMHk^5E&H^+;;q+^#VjJ?(|R z*p=@DMk<%p8^^J`JPVB(C;qYd=HrW?elVX&YWMR-6XR1DCV>wP5U}yyX5r2~I%73m zm%Uc1O|MAvAdc` z6l3>_HAs#mtTtecJX3bqw08D>P^ogAgXEh`wJPWpwHbP8tKa)7)C^u@YN0?c#>!?mvE0X`pIn4 zZ$^YtE!1Wh9i4gW(XjraDbwzkUmD6QA=tEt~7DjYO&Wivp$CiE88?-KAOl5OJT4StKLOAK4S7%7{G$M`0- zc1aYGtWzM%Eg;via;)E%Wp+VG<%GEyUnV=vNy4 zjauuoWpc(hqacotPJ^-}9v1t{uU(*)P6t6WPd1zH5^oNG1@%HW0uAZ@q!j-AmgjQ| zE_494ccux$F&WPLpuENX%(o|{sp}!VultF3PN&sQ{`8J|k&;~=r!)l#oL0BO%GxBP z7d8JV*GG%bC$Vqf(THjA%BAPr25IYQe%yf&|{Q$Hpz z0X>FVXqd%mh&a}I>J9w4Iq9BXtXNj$Dyx9|DSWhb%@Cj5mb|qbEER0F{A^Pb87$U* za?d__91DfKnU;4un!2}%1Ify7OJH&&ys`~wIT-0a6A>|Nd6qLS{^B4M9TFy0F44$) zl|tlof4BYUF~b5M$Iy8@5>+D}LAC)cHJ?qT3L0a)3PR|V=IEOkKa;-e+C^O}==&%! zywjI#i$%7a_FP!iXNeVTLOmBIM3VW^QKJny`L23jO>IrBjbTc`3NN^)h^UIe`~mMw zItx=#*PGj))3a-HOn(TU?Sd1Nj$`PkC>l-Le{^Dnt8wL(xn5u*p{lcaWRQV7_}I{H zER*i_Xv^bHj(OkV)%=o+pSl#bJ1t7*)gayScZ~GNwWZ?s4iJ^1HpgqNN4_n(U6UQ~?#+SKnbs;UkWcm*xb$3tvu;Bn@;=wiu08hmoxsOj)K=5kE0~Q#_U%mUBFG z_dl@M%8_ynIEa#|*b3H~=vleAv@CgkU5J&B_s-xj8fC^qTNEY1U#WCOaDHV}6cY{g zGN%jND=_`tO(yLOBv5fCYy1Mb!V@xVsqvI7p8|beNF#3eWMrd z>^~U72U8y1yQl7q!d7$tNTPb-^2O?bB=|}eMW?$>GC`t?tzWV8>WxrVSqnv48OWfQ zBbRlo$4ib*Orle$UFKvH6yH?k+QOe}=47iK`%^T#US;$lm zY}FF4pyEE7eXSzK7f5^DAJaeKm49@ed#zNq@yT*pOQWVM%f@2r=jM|x3M5V>B+0~} z$^^lU> z0buCS5sP`@wLQj}FSPgUcB&SZTP@E@SnX_;^!p^-ZCsuWUy18XQu67MsotznUw?DC zJgbJZutaAS=R1v-q;Pj=*S(s}4N9MDT{5quX);p>-3r0`N3{pL?s+^sgsx>ix}{te z4uelgJt9y61q)RENp=GPT1qSj3bI0NLwJkbD~vW)<_nLUbzThbTl0|-S><9c&czuI z&LCD)G{3iQ7qQg{9XBR$iYse=J$;$n4x1>^D(fl0Kbp+LyWeVlPg0Likjk(h(;FE? zR9>?(_N#$A0-YgGpMVvp9PY$eZ#U`$(tWS#chsZKoDJ&dlX1g21jwLOdIn6M2 z|1chZzb(4-5~}&C2#SIGlbP6P7PxcGLNvj2eNn5h$+=Os2^EOX$&cFb!0$z0%u7Q- z`%YXVIe4g^8(dHi6OX(U@}8cHVWZRHgWQ=q1)t{J2D@LUDGr(8C>C(dmU&TQb(kb( zBUi+sG#x zP4n6x@4)O{>N-A>qn`S>*JeF!V*U_XVHb0S#^^x2gNiIgdF&0DbK58y2Y){q%yU9c zfzD-u?(83!lr}vT#o7Js5u`&eBf^uv9gY)G+GD3C%r&IvX4LK2X+<+V$-<>FjZO@U za>?8X!DV}ie?`tLF4@m7!~_uLa+GocX%{ojj}9^z_mBnQ9TaSjnQW}#hE!Mt)>N;3 z{iX$Rb)U=~{9$C)xZ@l}$u~Z}Ue%R}L-xvQ{0L~N^*=Q_^}o-Z8N z^zG$}*;{~QW><|?Lhr7pVdHy+KOQkeS|gc2Y7Cj;I9p=dcNi6s)u;E$yRvxd+%C^2 zbCU|wy#1PcOZrmk%i9AtC>^DA)lKueS_zcERx{xMjmfp(gRyk?_wT^2>~-3BluQo2 z9xI1Reaml77tvcWMwis*8a*yYM`V~K5`m6~oXa8RF$J;g4{ zgyn5zh&PW$FI~$(f4=wDy_R|QiZixxPC7E3H-7~b{PKK4HYo0LiaP!3cLKqXte&>Y zl$Oa(Hl?!|L4#QWb)M1yNO^Pb+_@l%ki`^38NWv_aqNP-7EOVWH!+@p2*1pSKTDeO zw06@MFZGRxvGU6v{P@f2i3w)gXjmOqLndxd_!KUwShw*aAuV>w0#}t$jfw*sz_7d~ zqc6jmamWUNz~GC@w+&M)r4ItKjgCckd>E_E)@aYPlsE> znz*yUJZ-&Sk~W z|8#tOk{y$IjzA3JXo0LkC1S-t6LIs0*tZuSzsFu#Yvus)6!Ph7dI+na>u(hGKkp%(*r`uCSQu~SCA7ScL7FL3_mnpj!LrGBNbkf?|kMROf3(s^W z5?WVs6+^3WgNRPOgS6p3g!K+Q4-H10lM%OurVsmkx@SvJyeBVo#MoB*hY-PP@q*sgSdjlOs#|S*eO!PrJ*M8_>-3J$}u73Ajky{ zi(0zn3c|AC!L5^MK}r3D?-%ixPtD|oBE{ky#x~JW@_Ir6% z0$<3$s!71s2;!6^wFZa+VwK>PPbYKGqD62MvvwZXihlxrH4#{nEpoZHcl2KF>_Gc? zILE5L;}t=XyLO8URNK#f^LUs_ZU{#eieYtsvK)clb|l>F!E+5UN&>1>(HkesSF3wDcQ+I`(C zxa>z`eiH_T$*w34utGISZFc(^5?Y=l`iiE=Z#bl2V~Zfw<9w95O*Og2c9N=B{wqh{8L zV_vaM)?s_Le>LN|r-x2!WH`B76=p2t zSRi!4HF`X9CFVm#ShZ{<^5dOtW_3M?tOvh`c>75)NZwYWAymq$K^0J)uiRi0N34>K zjhDTC6D>-`WlCm?x9m*a9`2G?xY&yGGdxTQg+YK3x_j5@2&oh)v||k>CtkzcN*feBmS`R+WTdQIPtp(HuJfv8uy=;#tHa`-Fio$Q0K8SKyo(kRcELHQ0|1V z*}k)RM2xL1lP%S~5>2QWoz=RaKR~XTUhp_3ZDz!T@Qx3)sMDT7RYa1UhF{-$=P1fc(|U1E9GJO^4){gl`j_+*Ai`0-B32y z7>qSuhZ`adlx{26N&yU^apon3C$xhwcrwdWS+O%#%xS0YS%xGMRvvFGIgs6zx_^*K z4Fooa1Z}!V$X~Yk*7#w-$_pGP%uopp)<%;R6)-kMNrtY)qdQCo?8aGl?oQNWLhDw;=dweejk7_FmU~d{HU8oR;RRWC%S2Z+ra}%q6Lp`T7Uxv$wV>Q9 z2Fy%=#lwN(Sll6v``cOs{t4nc7A%m9vnh=|c`qk-ezr;FDXyC=Gs!N0^WsT06x8vE z0hM^XaDzfNlUKauInX)Z4VxrX7)&7EzOy{imOTJdHrp7MDmj7GncOcHx)?8n_yof6 z9o=R{ISv{x4vZ;s2yNp|?$gyUNlQq0pw%1BBdpKdFRuh>T#wd75<_QSP;+x#X71;# zTQBH;2?w8q9V8Nt2--LU22DB>sMR2u1`fo&P#_{V{MZ!w(FVYHOzVp5s%S4Y=Wh>V}nEKgrk#7 z@5V>YEI`Ou6sNjZkm$G=P}{SHo9~ypTCW~EzS8e_FZ=wqygXUhtj_qb?i~R>lk(_f zl~RuW!n{PJ#0w$ygD+*XBH9hAlYlb2px>*6@edK1?M)i^+PYBQgI!UxY~~`2zsq>V zi=%^AKy6wjQ@y@#A088x--Hv4-&ddG|3ZyfX7^`)w#t{C*r>vRk`36q$%Jc7_0Rws z!_bh|b0W6imX`^oEIM&B z0j!{R!YsUHtRj=mTkFH1Epw3&?m1{gq!s~AdMIH$Y*W-P-o54Wu|tM~?Tg|BmGX<| zrwCI@RB9ecg{TZ_%Vm};Z9=W0P(e8W#<51H57mhSt+uv3%Rc>6I8!!cK=|f1E1-s0 z^44*zbSB&v^Wr{JNNCI^yidzeI<1}9o?pz#{TW|lvuVKaGFEL^e*G-j_}3wgvch7X zB^^nLO`&L74bGQ6lKPQJQN5u|MY1VLzl8Fj7cvbQty#ivNU1=jQ!>FYSK;le@Vsxs zAtFWl7BNiuIkwJC14A&WXJHBFQ*q~k>h;fj=SSFU$=YcOeLj`T=n2WQ)W}T|IF!N{ zG`8!vwwm(^ig*O?jw>5dv>Gh85$GnbP5kl5^K%&mbTwRDhmO~|P)R4_^6}}vS0QtQ zPpuG9WECsE3Rknba<+uYrG5}^00Tk_|U zseqoH&{d3N{T}C=mkeUzcIP%XBkm6Law6%w1KK-NV_r-0D&*HBvitwkU~7Qc7YoAln)T7PV@ zdIQWa@lxqGv$L^6U?>AXulrDm+UjD0$5{@B^;$gT!A5O%`SfoKK3GW&COKrEaq_hs(W}Jx;j(a1UmQinu^)z2zCWadoUd~;{O>MGk1eb388WSHrV71p z7wWEmyJY1@J_fKNbj%JCY{5wEStjaDX&vKWsZMMzoS1KA8D7b+Q{BD^XvAqeZ`?8K z7?`Xa_&^j#lqlr)x=H(hHvi^#zR4ae&ufT9e|#sJZ!YS`={K1+S+(X!+_WoA@K08L z0bwidMXm8M*IvkJ_`$5l=9+*?`R;i3t1xP2T9c$AFnwx+-g9!YL?c>T&q!L*Lhm)3 z=)MK5%2NA&j%}J`52HMt;8NTs5xQ2y_$-am>GP7UedQ3b4hPBsW0aMhY&!Fg6G~qH z0jlJi4eDxXgCuYlkz`&Y*p(;>mROk-Dc`HOkle`{P8)CGIf=!(jV2 ztG^i7GjdlyH7gPk39q1D)wl3BB9S2ni;9DHY6>>XlatVithsa!FE$@kZv9*rwirMH z%2RoeY#C4&v@z9nPj53Asl85#sWm8Fp#pfE^m9UZ1${&})X}NBO$fm6L&U4BrK9Kk z4SI5zd%237pDML7FhREX5*YfxU>3G!VRJbzNwNpsPrC*3aw@9QiXFPV5Uyt1wy9%R zGybS%dgR3Nw{WFLkLcFuhdK8WkoV>ruvL3q=V+p6@C_kg472Bm^U}Rk?!4ArS6_nD zcrQ47YVeqEk6AwCX3FC_wuXq4H*;V1zUKJ)J)VLbe@{Oj%UhQvcu zIp&|(CK_yxj;UKN+rqqr1Mz}OlMa7Rj%zYw(0AdEk)OH=rhjE4Z^;C})K!qDjwMq? z?)kU}qog<48H~afYicu(0E)o$chB0767^yHRXtE#FLdgo_*Fkl9S-x3E)001R(Hh;8EdpL@6Ye;V>`hN=uo2J5_C(W(W z9oNrGi2a&I9!eB+eX;?r9o3)FM=oFLtOjqOB})M_-R8@4j5e#8vzx7S22G@hg#=@E z8I@bwUnxrXuDddh7;_Wg_X$g%*9IN)I8!o5?Ujd8;p6|_74rEkcrE-SWfRtjh!i)1wp@d;UhyJ0d5c${Ph(}AJk=GIg zsrUCMFRb=P>(^I>P6p0pRXT9!iD=R{aMu}jw_;aMN5o%zun$y(xHW;)h-d&^UB|l< z^RBj@&_zcuPriQxhEc;<>(l1W2%+XD8Q-oyE~ve-LMjmv_19!QQ}|g=K8xhJ^5po8 z$~Z~~(mLmX-n?gtt|pZBS~|tc+@{ZF_g*F4%@QH%<@%8Ip|DwUm#@R&6%aU|_jJaA z92`mms{4KO@pCY>X{KS*~r4j~K(FRUk>r`$YJ!pUElg7;eWAK9}MyT?vW)c8WI zp!ONUtKOWx0Sw|Sw>oWU>$rg9Ngfb1ob2xQ*IXkP2gD^znZUd$9Pz_|c18@j?uhTh&zo7%m@f8MAocpSer z%KFoSyyT$xecYlna0qLlx_76yA;O5aJ0Pj1+#X(FGK?GD7+8T|uDcc`w|WTA{_RR4 z3IkATO*pUmLit5U3_-q_dJ>K;Xz{Ux+`%DlLMRS7eO8y&VS&e4j#eKy%YocNKX32s zPV!B4KJa0SHFq@(W%zn%Zf%1<4D=OfN%y%dUJMkn84~1cc z!pPpR6lr>u7S6%PRTsa3597shu*0TR5fTS6tVG40mwtP8P*C?+!UeP2_0b|B*d4|p ze|K+yx>y2d+seO zsOo2LvuQ(QF6-@;J1Kwt`xqG0=QMXc>&aR&$D7c3r82Nlfbr^8MN>6r?;QINg(mmG zSSoA2q_MgduH&-C%oB138!X(jTJ3th9(o$rdeS{1GgoChsoaW&f$b9s&FjY&lF*Dq z7_6}ROIAhk0E6U{b3gORnX$cx7uKnb+O*kh@YHIR`6<9KLAlmZErWV*uYvtB(;MIS zU$=5C2nZlV3SV~cY(?g6xVDBJ`~6i75G)d%z@&M0xYlFz`XEb)d(_g~a2RK7(@a(n ztdy-!ZR!uV@rq5P?MuP)>nmgv7g()R1>Qbn3f(*G<1szwzNJNrC58PZ8uPUCpyu)MWbw#`SQRO57d$*$wsT62r`^QoOat3drPy6BpI@KDp?i85wd(DN5$PMFTl z+qcbpk5bO?QhpgG3JX?lb=;GY@3z#0!>*exo0J!Fver{iBog0UNbQs*sBmqz`GtgW zKYNoLI^`kMvq=+m=c%EET4mdq)~Pvft5=E2&$?*^xlrPc?_vzWvtBBlwMQWQ_aHkw zg1W5QIO*B0VcZ;?spB78YL|nQ#eSvKLC4D8=Ukl`EX;ZJk!~>A&fK~NeI4C(9oqcz zG_2AUN14zX0(pwJG_`8P5l*DWnie)#j$qt z6cn`R>Ioe}uh%wM2b!}q31`*YjJMYp+_GneQAW;(s=n_hx zm37MP=|A@L1^Wez8YM+zI%i2tH=*3BxoOTF9Yn4klQZ&975m@;Z9>Y2~Qe zF3xO32E1#v<|aMs#8|LHLLIs9>kD;?XK(L0M53sgt+b85PwSTtNBgxX}b{I7d<32VF3e20k9I>{WWO2-9?fV-LSZ6e|VXC z%(K}IWU=~IRwgg7Bt4tqZ1Qu-$jn%dDOoI&<}XrD4X5u44wcph6&X1-o!6Zf8sbcP zbsv~dH>3(ir}SEGD@JzH&F1BNo2ZA4$N05n`WbP=3_Ij{uo!ku8}kW?Uel7Sii)*k z1I);{O){4UMuZDqP_Z$x4Z7P_*~v*wRxVc>-V>F1*N7)LH>YF|F@hV0Racd07_yk$ zZ4Snq!Fq{SuPTfE#CCD39SDIy>g`nt;u??UuR}sSq19V`GrHxbkPvzpkT6M*pVetD zJz4;inq)FsQN4qn3axiogKC)>Xv(e}mK~8zF&j{_S!uieHZKtn1P!ORKF5=%u%>)s z_K{R?;Wgb)E>Y{ap-Hd#Xl)&J%U}gOJpQ@~n(WXNbM5>4i0DL9h2EE(Q_J$QWOCsg zV=KTRM`QR{|F0B?E%|Hf(x;d&xXKNm1wG73rQ$)G-Mb(;Y@UW$%b1bmIea#wl~eDY zv&tw>eq^tZqDUO2Mb)h6X(MgwW_ubMn(uq2=#-Kb&JbM#)`NPFy-a6wmbK4w4{S)eyRh$bY3Pxr#Iaf5h`wy~vGQ=x}` zfg(fuzxEgrSI%uaBM)DsZMY=!6YB%sxld0QI4U@b!B2Wl1SNs<@srCc9wE*`8*JZv zLmgMJRcyWf2%##b46dMGzJ90v=rBJnE&W;`047BYIe{WriEeL@US&_UlFo;FleY1o zX65#Oyz%{hDDjx=#i5Wbpx%c2oC|U)h)tkWyfDk|i5rLz+3T?tpNbvy_LXS2L3DJ> z(x-#kqtAXPHVbxsy9e&$0v9J!`ff9%=G@vD3<{J~I#phW3?$au7s4JrIjPL|tHrM$ zNn|inJC6M*+}PoNSocO8G@=ehgp*O58tRyFr!jHC7Lkr~u~YznFZ01U1equTZWD1S z!sX20$L0Pu>B|$$@9(_Lr`KCmfjl3KznQeUs{WMR)DfNpUPzu=kE{JGEZOxVNt&c# z@n(z4YcS=sNs=r48^r?wstUKb|hdYAOm;MSIz!%lcO#-Rrt&!p?g z%lMoH2iXNLqQX*LbJAsY+-b_sh_Uo92MB%%&$eMe6a}ELiy|nE}WF53TI){Lj zPT93vttO--@nljbP3d!J^?B_mPZka$3mwf)pEJbWBNlLTT}9dBt#MAtd*X?<8SKbE z;@*m3q-?f6=jG|v=Xcv5GmNOR=T-QKDH)pJak8o?!tJanhkChd%Zl1d<`L0pPRkzk zbfNYn{re%OM%{Tq1dwbM(vOvq`gMBQK+a9lGUS*}t(=)EM(?@9*G&%QsH7Jmb zdoRYey}?-6IvjLPFY{0CZ{!$5kN`q}`gy~nhCm`}4SfOMb(Tc7b{nUL9q~6QyamXI(`iwE=G+3R#i%Nb?_TRmL>NmX4gb-ps&u?B zNZrIl9k2Iv{Pd<%HBN1RlF?k^os(BiYjJH4yz4C!#YyZPF*?1t`CkR^n?~-fHKUJCT0Hy5szK@g_YY{n$sLL zU%hM0@e-!K?yR~9L&d~1N!!+l(L=v}*D4_h!!cDcmOidsc%k+9F}9>ZR9>LsF+YXA z*r)G(=39*W-xH8`Lf4Hfv67sa2_f$ISak;99=M7dl=-{nX9E}=>nqd8UVFJeO-_$f zuxi`;Otyj&qY23r@4Bfj)HAXz3>NC)aF*H<2|aD?AV2r^On z?B*<{6Pt)1AR((OBXM4;I`_ScBz_jI-Q?w^%L2!p%?Za$M zUH*_Hu)4OejOLXhSMg`7g7J!uRX&(V?FY%*4S{u9QO11uc!6mFw1E=8t=$n;e zU>pJy*2)BQgYg-*9v69Edt)JT{bQP%COOXY1bXzB+W3hAXOAy7y}I=-=JCwdQ`|N| zfg>}Q+hirX3?kP}1!KSzqlEJ96A@-6dDp8Nyd?MiG}#{gnwtVf9S4 z?srBsAAuyHCl@EBTW`4dwg}sj+0NIQ1zyfCi}Fn^g$lPbCT6=1N#o568Jds(G_X9i zTJDT0;}NEaDsB1wyRdeKoPQ7H$<8LUJXrAnMSMjIT@5w4K-j(fP1E$rz{-8eWa#Y| zB(ZGD=8c9PvIU2m;-T9w)5DQ>k%Bj`sqyDatQ)B<*48p*^#WB0|Bo z?CJt4zQDp0TJHH-WAlD|Vo&uSYfchvQ0OathfVMKM*H9ehr zWNk;AE&}@4(GNIA?MkQC7E+}$bBL=D2HshL3y>}YJ@%#+GS9DvnSF}qk%kT@41)Pu$*Y)_cB462@nu_Iqc^M_`KMp+^q@h_3xhPE31lihVSLMYkl` z|EPRLfrUf7F}k~_qKXnyg4h)|E6m~j2UK!#2(EqAzV&m5m&z`QG3}uPy3?|p|5VsL z4t~l9dVr&HKX(6Lu-5;|U@hT3C`DVs{0GjUq1`_C>|eoms!xCU8Z@*+bj=4Mrxkg{ zE}_2zcz|2P{VD&;Z~f2rwqg*k4in#8WB%o6(7u1RQ^+~dP4&(Er{a*yo*b-jlWG$t z(9Zw2ycNTV>1(Qqk4ORAfz$f`3J=b^LlLek1F{;)^z) zo4(OTFc#on4_mKDK8j|0X(FLpPDgi@ZO~8r$VKn4%YVx3JfE%|BSOzBNH#pxBUMO@ z60+^dbKu)gK5q%J{O1WDMn43eke!$RVZZ?u;&jc%VMaE8=H4`FE;z+y^;b38*O&SE z?oIk?Y9n!#icR@)D1?(d+%<)V82i8djd}a*sjoMTQ(mC@D9T7j0e}7mIdubS(jPf7 ztFoj0*Gdw>=a;~vLG*9KFMA-q4R45T;j>Yu9wOJ^O;TgZ!DZJ?2ng23&vOq8tuA`q4at=|nPM zXx(|KkaPc@06i^1_*$L;mzk2}r{3T>5pvMA4laCd1ZB92R`^K#&Ow9^W3{US{f7k zJAv|2<)`N-NYGBF8*(VKTZfC$g;=Wt81Tc{KHA=LP5pTAkfR674$f(5&q(Ng@@TAU zt}e>Yv;=xoZ*S>x_|kdYR+5ZL7>sVv$%56YoLyYFcx6fJc}E|1Zwx3Vu0mUOtk0$;_5S5xlhn8>8bxhw@G*z%!1VOlaui3%>uWH=kGhn8EYLbO3<33-`pt5s>h0erFv0 zlxmCs)I(QS7w9VI1pJ~S22pc_IG9@_M;k-4nG0eZ5INUw%}M~1zAo`jz_s)dzwLZVDr`4XHduIQCbV=_x!hb0?4}ZZR92X?vbc1YekGbA zh;6^($eVtqg*av`&?Gv!12!y+<_%_Px6sEb93iQ%Q+bRwww?fv>prx&J}@9zdC$=< z{r>ZY;8o>(>k6!r*R$OCVdeNLqT})TOoOU;3>N?}rfQ(5p@B@9{3E4kV{a2izZHUb zIM&Mo0EDmVI*Y5FAF%;}nH(6K3eADe!;F>%2yo_o0{#)cy;!;r7UQhdWFdl+g;mdq z2f5f(Q$9hGAjra4QiARCn}ak22n>WBxO^X={Fk0wy+rSL)xo@8r3RT|WyE>e&|so~ zElu$%Yd4<;5Zh#ZwW-$h?Rp0(yu)0q1Y4<~U*zQvhrv8_h@dW+O$~*O?*aA5?>=k} z<8jMp1?N$F3-K{8`Dr;lS1!Yo3&5NjYpi*_$b}yAgpbSl;oh3L6ib0W{&|7^lM`4T zhm8`3{{X3A#KZD8B_%qM()PIjn}vnN9hfu!Am#h7%F5nl8f9PKo0#u|6g&#d7HqvP z;?HChWLFDEpL$#8xvlcAC%7o8IQIPdbGbEGa1bCh9qW}_G&l65iCNH7)z$?jt_b`b zE^X0Vn)|DnZVqEK;#bTY>q^a#XJ=@!%){GG=cstLNz`I6n>_q6Iy%N9swWRoAgA?V zotyBx0p_d5srIe$UD6a*ZoXyBoLkD&wi8jkF510(1Z}sbl+?3_7>~FCoIGR*C9#`s zp{uo?Dq}aO|3qa2te&IvgB8!+lgG^^kG``&PyQkFXv5F`_c;82qw7c6hiq-hq1%4G z=3Ab?cM#b@uB_fK$L}r14@uPkd5?Y5h3QdA@MF6p@|%pq5>w`XF`dOsa3oQVURG9S zt4M-c9K59O`dlp;& zcJm*uzr_A<8lvs%M`G*;5!zwZ^?2Yz(D0`;%;)B-2PE+iJ<;`By1zunId@C=#`QGMDAA@EC+~r~~-fSev zF*{@D&;4<8W5fg<#~86u%6M=TVX6@0fK%3RAR57?j$-qvgj@R{7gdY>{T9ugJcIs> zRwTdK0`sn!4r0#NSNgs1{BgJJoM>mak)86ej}Ay{pG_}*Um&8qyiso>$=YA)-ut}V zD2qhYWw~-~U|!dF%XlW>cU;Za8S-5>8-|XBv!2iz1)g<6KrPv?HX!zul%$=RO>ALElBtd+$B zqhH4=}*+P4e8&^&RYMpY4-(U+*0CRCllH zUR_Pp0+lj_OvX`#750q=A!-Vc?VD? zV=!BT9XDwzkqWoyA#rfM8cVI@OAX=i&3bze`d0@yS+To)0(={|tV(XpNB(?=xYADs z_kS8P63TGkzmT$mSTz_ja1v4`Xpg#pqLr{7e`aM8ah~yICyeT0h=!Q+<0X{zJnH;b zfTdEpd7*25!T%%w?W>Z#(7}zL8R|>be8$>@ok{#H+=}$Hv{|CvBM0jrCCk4}!w4_* zUXj{_&aeMGi%9@}MW;&;(m(X6kQb{XQpUzWe-p-z6CS2}kNmC>+Pzs{y5%~T+$j~U z{pz6?mzEgw3!QtXRfB$!9`j3euR4f?0Th~vkMr1)T>nVr+>edbLx?nnXWR;;D)$;p zjTt9Jxa?4u@1);pq=;{|W|oi-JV5 z0oHNH*%x-qFQZr!du>3u-WfslYtU@7hDBvdh;L!T4~H62RZzD@82PxMtfi7UmJy&~*lOilArtQ5_Vxc)t8(T5rIZvS5 zY~kkyY;k&q-C~)ng$2ijyA>#Ap(#2)@ekp~V_#!kb|6omXkr~n3j3g9stVPd`;U?j z48_o%++1)`BE?K;FF6Rt>ZxQ14!&V0hz3lhQnOT%J@50fDCjk=Hydmv(`U@Z7NiNV zH+6OxKTFmNvexXVbg@}r9!!`%~C`F4;qqC;-+n^n% zbaPPy14wJ#Ott4R-RY3@B*&xDzDEuHS5#%t zZ`wI&+0vf27>4nJ7|yfREw2s97n;4pSF?qgw151te=*F;m5G%G%t`9QIi8#6A=Kbs zNy%=pxI7zqjD;8W)BuM@Y+*^X(m|v@+Ww}O0n3(A58E_PNx%jGpGaZr8|wy_Q!aLF zTX8`$#VcBXt*bQVt?A!*J(p`k;S=|=s@?;vk&LsU(~dUV{(dqFRwut%E(hPOO zhGJaR4i5<*bNv^YTxzfdoPuvYve=H7V4rg}IU2_{YE#X7wo2gZ3U`VXy8-#tbjM$h z88!ru^Ht+h&pqrkmb8B>Na)R}E#j7*9jlyQR0AK&ZJWv2wC?5bh|13Pz=oBBvyl}Ah({H0|=!zQ;=hduJdgXAW0NeT|1Ln@qwc`EpKEN4ho+NJtdKx^7cS?X^~4Nvc=(DqrkGrt5N7jjbW& zO+8jJ1q0T*vLB06*Rvtp_>n+lehjMPFph4_UNY8Md8w)Ou9k?S&1F4CDS=KoQXqv! zLT8!}KayaR-m$BTh|SiDA=0RIeGiU)`AMGvix#r2EdEbyx~TL184*JUH5Sys_eaob z?&qV=|7cGNzZ=S~F|&8iU-Z}s+y8(a5&-=u>5cV{$D6cT)A*PLr|mq5XJ7yEVcLeH+Ll#4mi-|dI1oWj+d z((dJP))eFA_D99#kancN&t!T`+r;FNAdG7b44gj93)eT^lbUb1u&w5-ep)yHMC@IJ@lUD5y? zjYC`yDPHu;$KHmA2N^e1x3!m+*)lV-*$R}hd|EeOeLLLQUCKVFKhFaE*#Yueg(n>a z(>e$@2i$g^AwM1}DJXiY&m)aX7Z5>6JpFNRZOoV#SD~8>L+_-L41#?7D*}c#Ntc3(p_$~- zagi0|3DlT3;fR1ZDhXmb$JiC%h+6O9w+^4S6q_K|YmajEUW z_hYtn-7euaef>0LkT)Ph$=?<7DX192=(^JC=b2bFe%5A)JA?Zj7$hk5!Qkduka>bu z;z$S}^7mrdi}rg3UGmNOd0~d%nju?Srv9+x`p4&PA-nm;q7;btMg1+TaF^h7wSF`D z*WygmmhdY+r^VXh0*GwUU_NS$-_QNMP6mRzstM8GB}um?^ZviMl1hgD z>8NgL-j5Z$^1;5QBT&U~Gk2gbXRxtqp@Lu36Y`U5)JIQ;CM9Yo> zuQ)R@O8g{v?E)kd{d7o0=PCc>$o9c3*U+v!v~sD#dNy*RcBolXQzk8;IOb}(eU$F> zbUk%9Z+T*6b>dB>3fAoha)u_&5|WX6w;TCLmVf$stz+3`9_$|Zt7*pKQ`}+SeeDlSIz)(`6;FsiCnwz-403yVZ@}8;T7W8L2U3 zPxWl?AJh(^>+-vqeb?)~__vLGiP z7CZGwz-c6jLHUq~&S;j!hff`ek8+AtB~8Q^Ncn82G)nf%Q#Hwo;xDbd%b7N-{Rw!3Y#yd=j< zm@qM(A(%=m;b^%p>E(<}`Yc{8b`DyPT-4Dzvsn)A=c(>iT95nS?QC&2g-sz~#bD4d z_cP#tEkK2Trhb&A@rkv5Ly>RkXnKYnhnw&)#%9Tn@~5&geE9g2byzkwV*`rHW%hWN z=>>T41%P7x!zHS7hR$jp4c^J#fW(JLNyxO^ZJ9^aEcvOo&eSDl+*ZuiV-*ToT5XSN zqdIf{%n#VO2Btx$Qqdi40Pa;*N{;HJC$@v&SVb(JbaH#)#?4~%hHyny2!zV{Q)(3% zmY}iZaF^!K<=b#u9~^#u+%l}Gk~8p%+0fD@#q4MU7Q2Y6!Nr)W_jIZcJM)ld-gJDf zE{CE^vvZW;gjF82xg*v4ir?p&_iP28V)yWjNZG3Ts0V~=*W;Nz28;>omHDc2gL*DNf?QZG$k zyIFo9u~iruRjHdxS-MCDPr$yyk)c{GeN^i=Xfrf7S@dA62Fs2+_pcFTiQCBP5vQ*sM z-&gEWkerZXEr=-Z)ob(5dtd$B4i)8Hs zp{mqE1Xqz`{%g~@j5J>U$)L*h>r^v9xgZMzo9nw^V9qW}2Xh0s&g1ytvvP)stHn-o zSLl+JR>SerKDqR7#(wL0>8{CY#`EhUw6r!pr5whM4*r>ROY%}%N^?2rpx-gQ6bv?oZ6kW96e#u0ARSVN4qw^7i&|wJ=H=bd0kNv?CuE z(yVlvRZNjmfB2?S1CGjE3uU1Mz)JIbto3K+41GjxW88ZZfO*t>a+xJiu!@-EN|*+I z5pT3-j2u%=Is2<@(iEts5`V+pNKJ zUg{Sa!N)+yVK}WX6ME|KOMY}~)JRW*XQn^rjmD-_4=KTu^$W|wT`B?iDGzz|jm$$~ z{EQjudpp!?Fz@%Aj@D%XNkad=jD=KD9&|mpBs(Ygtt2Q%hcMgcAj6|CeLh3T+Mr$g z)kK4y&5oBeprq)zK>xn-)yTd}g`?db^hiX_IJm%JMHXgoFp?g0)$buGM+??Iu7OAWhY-;Jwhy)eGTNM=_w5BJx!MseB@cTBq?ZnIC zk1`{sc-uHGJfDj(MRe_v#OENvajuE(yQv1+>U{^+&Q66f?lE+=O_L?tyC+go{x&iQ z_M9sl`V)tUh!Mu{UZ*`FjN^|96(S6JrmOjQOegzlrl{YloDzv&$qRk~c>m)7kHjP_ z43Vr%3_@ki!VdwaLF>I~AT7WXyFf3Mo|YfD zDM1VjOhbxwH za$K*}S+5>p&e#0<5wb(@_QrF!6sC|fd`Ym(tGZg-i)?eJ3A!| z=?fIB!>r_=Pfx`za44R$!{{+eD?XR9E*82gPbS0qqDEie9O;Us?I~Y+6vaJG-m1)A zTFSPnFf#T#v$78VO3c`EDEjsv_8R=$b5-b1on3|hoGDP5~7;QcG(0q9B8n@R%Vi$^}fPKnH|&epay zqDww4hX)eV3xzSM@C8QcX{xe8ILPSD8wO?C=NQ{XG2;vDI_f$)LFMAXCPnQh<~-58 zT^kGE&dy62wJZ16^*TvG?RQB)Q44N2U@

+TEqn)vil;h$$vDlkh+ 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 Date: Fri, 1 Jan 2021 13:57:13 +0300 Subject: [PATCH 162/217] Update Customizing-Application-Modules-Guide.md --- docs/en/Customizing-Application-Modules-Guide.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/Customizing-Application-Modules-Guide.md b/docs/en/Customizing-Application-Modules-Guide.md index 3f8597bc71..774cc83366 100644 --- a/docs/en/Customizing-Application-Modules-Guide.md +++ b/docs/en/Customizing-Application-Modules-Guide.md @@ -51,7 +51,7 @@ This section suggests some approaches if you decided to use pre-built applicatio ### Module Entity Extension System -Module entity extension system is the **main and high level extension system** that allows you to **define new properties** for existing entities of the depended modules. It automatically **adds properties to the entity, database, HTTP API and the user interface** in a single point. +> Module entity extension system is the **main and high level extension system** that allows you to **define new properties** for existing entities of the depended modules. It automatically **adds properties to the entity, database, HTTP API and the user interface** in a single point. See the [Module Entity Extensions document](Module-Entity-Extensions.md) to learn how to use it. @@ -66,7 +66,7 @@ In addition to the extensibility systems, you can partially or completely overri * [Overriding Services](Customizing-Application-Modules-Overriding-Services.md) * [Overriding the User Interface](Customizing-Application-Modules-Overriding-User-Interface.md) -### Additional UI Extensibility Systems +### Additional UI Extensibility Points There are some low level systems that you can control entity actions, table columns and page toolbar of a page defined by a module. From 246c2f37fe326279d40832dcabd8b62c35f1dccf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 1 Jan 2021 14:02:01 +0300 Subject: [PATCH 163/217] Update Customizing-Application-Modules-Guide.md --- docs/en/Customizing-Application-Modules-Guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Customizing-Application-Modules-Guide.md b/docs/en/Customizing-Application-Modules-Guide.md index 774cc83366..56b94ae4fc 100644 --- a/docs/en/Customizing-Application-Modules-Guide.md +++ b/docs/en/Customizing-Application-Modules-Guide.md @@ -84,7 +84,7 @@ Data table column extension system allows you to add a new column in the data ta * [Data Table Column Extensions for ASP.NET Core UI](UI/AspNetCore/Data-Table-Column-Extensions.md) * [Data Table Column Extensions for Angular](UI/Angular/Data-Table-Column-Extensions.md) -#### Page Toolbar (TODO) +#### Page Toolbar Page toolbar system allows you to add components to the toolbar of a page; From 3a0569645c1de645c38ab2612e5492782f8bcc4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 1 Jan 2021 14:05:40 +0300 Subject: [PATCH 164/217] Update docs-nav.json --- docs/en/docs-nav.json | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index edfebc9544..217467e666 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -353,22 +353,8 @@ "path": "PlugIn-Modules.md" }, { - "text": "Customizing the Application Modules", - "path": "Customizing-Application-Modules-Guide.md", - "items": [ - { - "text": "Extending Entities", - "path": "Customizing-Application-Modules-Extending-Entities.md" - }, - { - "text": "Overriding Services", - "path": "Customizing-Application-Modules-Overriding-Services.md" - }, - { - "text": "Overriding the User Interface", - "path": "Customizing-Application-Modules-Overriding-User-Interface.md" - } - ] + "text": "Customizing/Extending Modules", + "path": "Customizing-Application-Modules-Guide.md" }, { "text": "Best Practices", From b4281ec1de5ff8e790ce5e6d41231c779421e9b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 1 Jan 2021 17:48:39 +0300 Subject: [PATCH 165/217] Create Page-Progress.md --- docs/en/UI/Blazor/Page-Progress.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 docs/en/UI/Blazor/Page-Progress.md diff --git a/docs/en/UI/Blazor/Page-Progress.md b/docs/en/UI/Blazor/Page-Progress.md new file mode 100644 index 0000000000..149c35293e --- /dev/null +++ b/docs/en/UI/Blazor/Page-Progress.md @@ -0,0 +1,3 @@ +# Blazor UI: Page Progress + +TODO \ No newline at end of file From 89523eac21790ef85a58b0ed6c36d68d0e0c30c8 Mon Sep 17 00:00:00 2001 From: GameBelial <243387971@qq.com> Date: Fri, 1 Jan 2021 23:34:28 +0800 Subject: [PATCH 166/217] Update the connection string information in the documentation and docker compose. --- docs/en/CLI.md | 2 +- docs/en/Entity-Framework-Core-Migrations.md | 10 +++++----- docs/en/Modules/Docs.md | 2 +- docs/en/Samples/Microservice-Demo.md | 6 +++--- docs/zh-Hans/CLI.md | 2 +- docs/zh-Hans/Entity-Framework-Core-Migrations.md | 10 +++++----- docs/zh-Hans/Modules/Docs.md | 2 +- docs/zh-Hans/Samples/Microservice-Demo.md | 6 +++--- .../appsettings.json | 2 +- .../appsettings.json | 2 +- .../ConsoleAppConsoleAppModule.cs | 2 +- .../appsettings.json | 2 +- .../app/Volo.BloggingTestApp/appsettings.json | 2 +- modules/cms-kit/docker-compose.override.yml | 14 +++++++------- .../host/Volo.CmsKit.HttpApi.Host/appsettings.json | 4 ++-- .../Volo.CmsKit.IdentityServer/appsettings.json | 2 +- .../host/Volo.CmsKit.Web.Unified/appsettings.json | 2 +- .../docs/app/VoloDocs.Migrator/appsettings.json | 2 +- modules/docs/app/VoloDocs.Web/appsettings.json | 2 +- modules/docs/docker-compose.migrate.yml | 2 +- modules/docs/docker-compose.override.yml | 2 +- .../module/aspnet-core/docker-compose.override.yml | 14 +++++++------- .../AbpPerfTest.WithAbp/appsettings.json | 2 +- .../AbpPerfTest.WithoutAbp/appsettings.json | 2 +- 24 files changed, 49 insertions(+), 49 deletions(-) diff --git a/docs/en/CLI.md b/docs/en/CLI.md index daf86025c4..a25b94aca0 100644 --- a/docs/en/CLI.md +++ b/docs/en/CLI.md @@ -105,7 +105,7 @@ abp new Acme.BookStore * `--preview`: Use latest preview version. * `--template-source` or `-ts`: Specifies a custom template source to use to build the project. Local and network sources can be used(Like `D:\local-template` or `https://.../my-template-file.zip`). * `--create-solution-folder` or `-csf`: Specifies if the project will be in a new folder in the output folder or directly the output folder. -* `--connection-string` or `-cs`: Overwrites the default connection strings in all `appsettings.json` files. The default connection string is `Server=localhost;Database=MyProjectName;Trusted_Connection=True;MultipleActiveResultSets=true` for EF Core and it is configured to use the SQL Server. If you want to use the EF Core, but need to change the DBMS, you can change it as [described here](Entity-Framework-Core-Other-DBMS.md) (after creating the solution). +* `--connection-string` or `-cs`: Overwrites the default connection strings in all `appsettings.json` files. The default connection string is `Server=localhost;Database=MyProjectName;Trusted_Connection=True` for EF Core and it is configured to use the SQL Server. If you want to use the EF Core, but need to change the DBMS, you can change it as [described here](Entity-Framework-Core-Other-DBMS.md) (after creating the solution). * `--database-management-system` or `-dbms`: Sets the database management system. Default is **SQL Server**. Supported DBMS's: * `SqlServer` * `MySQL` diff --git a/docs/en/Entity-Framework-Core-Migrations.md b/docs/en/Entity-Framework-Core-Migrations.md index a93ee217da..be5968a9af 100644 --- a/docs/en/Entity-Framework-Core-Migrations.md +++ b/docs/en/Entity-Framework-Core-Migrations.md @@ -586,7 +586,7 @@ First step is to change the connection string section inside all the `appsetting ````json "ConnectionStrings": { - "Default": "Server=localhost;Database=BookStore;Trusted_Connection=True;MultipleActiveResultSets=true" + "Default": "Server=localhost;Database=BookStore;Trusted_Connection=True" } ```` @@ -594,10 +594,10 @@ Change it as shown below: ````json "ConnectionStrings": { - "Default": "Server=localhost;Database=BookStore;Trusted_Connection=True;MultipleActiveResultSets=true", - "AbpPermissionManagement": "Server=localhost;Database=BookStore_SecondDb;Trusted_Connection=True;MultipleActiveResultSets=true", - "AbpSettingManagement": "Server=localhost;Database=BookStore_SecondDb;Trusted_Connection=True;MultipleActiveResultSets=true", - "AbpAuditLogging": "Server=localhost;Database=BookStore_SecondDb;Trusted_Connection=True;MultipleActiveResultSets=true" + "Default": "Server=localhost;Database=BookStore;Trusted_Connection=True", + "AbpPermissionManagement": "Server=localhost;Database=BookStore_SecondDb;Trusted_Connection=True", + "AbpSettingManagement": "Server=localhost;Database=BookStore_SecondDb;Trusted_Connection=True", + "AbpAuditLogging": "Server=localhost;Database=BookStore_SecondDb;Trusted_Connection=True" } ```` diff --git a/docs/en/Modules/Docs.md b/docs/en/Modules/Docs.md index 5780b4b827..35478d9ce0 100644 --- a/docs/en/Modules/Docs.md +++ b/docs/en/Modules/Docs.md @@ -47,7 +47,7 @@ The database connection string is located in `appsettings.json` of your `Acme.My ```json { "ConnectionStrings": { - "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=MyProject;Trusted_Connection=True;MultipleActiveResultSets=true" + "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=MyProject;Trusted_Connection=True" } } ``` diff --git a/docs/en/Samples/Microservice-Demo.md b/docs/en/Samples/Microservice-Demo.md index 492dfb203b..285c2b10a0 100644 --- a/docs/en/Samples/Microservice-Demo.md +++ b/docs/en/Samples/Microservice-Demo.md @@ -842,7 +842,7 @@ It has a dedicated MongoDB database (MsDemo_Blogging) to store blog and posts. I ````json "ConnectionStrings": { - "Default": "Server=localhost;Database=MsDemo_Identity;Trusted_Connection=True;MultipleActiveResultSets=true", + "Default": "Server=localhost;Database=MsDemo_Identity;Trusted_Connection=True", "Blogging": "mongodb://localhost/MsDemo_Blogging" } ```` @@ -968,8 +968,8 @@ There are two connection strings in the `appsettings.json` file: ````json "ConnectionStrings": { - "Default": "Server=localhost;Database=MsDemo_Identity;Trusted_Connection=True;MultipleActiveResultSets=true", - "ProductManagement": "Server=localhost;Database=MsDemo_ProductManagement;Trusted_Connection=True;MultipleActiveResultSets=true" + "Default": "Server=localhost;Database=MsDemo_Identity;Trusted_Connection=True", + "ProductManagement": "Server=localhost;Database=MsDemo_ProductManagement;Trusted_Connection=True" } ```` diff --git a/docs/zh-Hans/CLI.md b/docs/zh-Hans/CLI.md index 4c63dcd818..4a02b1c3c8 100644 --- a/docs/zh-Hans/CLI.md +++ b/docs/zh-Hans/CLI.md @@ -103,7 +103,7 @@ abp new Acme.BookStore * `--preview`: 使用最新的预览版本. * `--template-source` 或者 `-ts`: 指定自定义模板源用于生成项目,可以使用本地源和网络源(例如 `D:\local-templat` 或 `https://.../my-template-file.zip`). * `--create-solution-folder` 或者 `-csf`: 指定项目是在输出文件夹中的新文件夹中还是直接在输出文件夹中. -* `--connection-string` 或者 `-cs`: 重写所有 `appsettings.json` 文件的默认连接字符串. 默认连接字符串是 `Server=localhost;Database=MyProjectName;Trusted_Connection=True;MultipleActiveResultSets=true`. 默认的数据库提供程序是 `SQL Server`. 如果你使用EF Core但需要更改DBMS,可以按[这里所述](Entity-Framework-Core-Other-DBMS.md)进行更改(创建解决方案之后). +* `--connection-string` 或者 `-cs`: 重写所有 `appsettings.json` 文件的默认连接字符串. 默认连接字符串是 `Server=localhost;Database=MyProjectName;Trusted_Connection=True`. 默认的数据库提供程序是 `SQL Server`. 如果你使用EF Core但需要更改DBMS,可以按[这里所述](Entity-Framework-Core-Other-DBMS.md)进行更改(创建解决方案之后). * `--local-framework-ref --abp-path`: 使用对项目的本地引用,而不是替换为NuGet包引用. ### update diff --git a/docs/zh-Hans/Entity-Framework-Core-Migrations.md b/docs/zh-Hans/Entity-Framework-Core-Migrations.md index 266c0f46b0..8708516f76 100644 --- a/docs/zh-Hans/Entity-Framework-Core-Migrations.md +++ b/docs/zh-Hans/Entity-Framework-Core-Migrations.md @@ -588,7 +588,7 @@ public class IdentityRoleExtendingService : ITransientDependency ````json "ConnectionStrings": { - "Default": "Server=localhost;Database=BookStore;Trusted_Connection=True;MultipleActiveResultSets=true" + "Default": "Server=localhost;Database=BookStore;Trusted_Connection=True" } ```` @@ -596,10 +596,10 @@ public class IdentityRoleExtendingService : ITransientDependency ````json "ConnectionStrings": { - "Default": "Server=localhost;Database=BookStore;Trusted_Connection=True;MultipleActiveResultSets=true", - "AbpPermissionManagement": "Server=localhost;Database=BookStore_SecondDb;Trusted_Connection=True;MultipleActiveResultSets=true", - "AbpSettingManagement": "Server=localhost;Database=BookStore_SecondDb;Trusted_Connection=True;MultipleActiveResultSets=true", - "AbpAuditLogging": "Server=localhost;Database=BookStore_SecondDb;Trusted_Connection=True;MultipleActiveResultSets=true" + "Default": "Server=localhost;Database=BookStore;Trusted_Connection=True", + "AbpPermissionManagement": "Server=localhost;Database=BookStore_SecondDb;Trusted_Connection=True", + "AbpSettingManagement": "Server=localhost;Database=BookStore_SecondDb;Trusted_Connection=True", + "AbpAuditLogging": "Server=localhost;Database=BookStore_SecondDb;Trusted_Connection=True" } ```` diff --git a/docs/zh-Hans/Modules/Docs.md b/docs/zh-Hans/Modules/Docs.md index acc956be1b..1d09552e50 100644 --- a/docs/zh-Hans/Modules/Docs.md +++ b/docs/zh-Hans/Modules/Docs.md @@ -47,7 +47,7 @@ ABP框架的[文档](docs.abp.io)也是使用的此模块. ```json { "ConnectionStrings": { - "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=MyProject;Trusted_Connection=True;MultipleActiveResultSets=true" + "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=MyProject;Trusted_Connection=True" } } ``` diff --git a/docs/zh-Hans/Samples/Microservice-Demo.md b/docs/zh-Hans/Samples/Microservice-Demo.md index 59fa98e057..ca8b90a03f 100644 --- a/docs/zh-Hans/Samples/Microservice-Demo.md +++ b/docs/zh-Hans/Samples/Microservice-Demo.md @@ -843,7 +843,7 @@ Swagger UI已配置,是此服务的默认页面. 如果你导航到URL`http://lo ````json "ConnectionStrings": { - "Default": "Server=localhost;Database=MsDemo_Identity;Trusted_Connection=True;MultipleActiveResultSets=true", + "Default": "Server=localhost;Database=MsDemo_Identity;Trusted_Connection=True", "Blogging": "mongodb://localhost/MsDemo_Blogging" } ```` @@ -969,8 +969,8 @@ public class ProductServiceMigrationDbContext : AbpDbContext(options => { - options.ConnectionStrings.Default = "Server=localhost;Database=BlobStoring_Host;Trusted_Connection=True;MultipleActiveResultSets=true"; + options.ConnectionStrings.Default = "Server=localhost;Database=BlobStoring_Host;Trusted_Connection=True"; }); context.Services.AddAbpDbContext(options => diff --git a/modules/blob-storing-database/host/BlobStoring.Database.Host.ConsoleApp/src/BlobStoring.Database.Host.ConsoleApp.ConsoleApp/appsettings.json b/modules/blob-storing-database/host/BlobStoring.Database.Host.ConsoleApp/src/BlobStoring.Database.Host.ConsoleApp.ConsoleApp/appsettings.json index 2e1ff4f771..13d94f70db 100644 --- a/modules/blob-storing-database/host/BlobStoring.Database.Host.ConsoleApp/src/BlobStoring.Database.Host.ConsoleApp.ConsoleApp/appsettings.json +++ b/modules/blob-storing-database/host/BlobStoring.Database.Host.ConsoleApp/src/BlobStoring.Database.Host.ConsoleApp.ConsoleApp/appsettings.json @@ -1,5 +1,5 @@ { "ConnectionStrings": { - "Default": "Server=localhost;Database=BlobStoring_Host;Trusted_Connection=True;MultipleActiveResultSets=true" + "Default": "Server=localhost;Database=BlobStoring_Host;Trusted_Connection=True" } } diff --git a/modules/blogging/app/Volo.BloggingTestApp/appsettings.json b/modules/blogging/app/Volo.BloggingTestApp/appsettings.json index c85ffe9489..6d3d120f4e 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/appsettings.json +++ b/modules/blogging/app/Volo.BloggingTestApp/appsettings.json @@ -1,6 +1,6 @@ { "ConnectionStrings": { - "SqlServer": "Server=localhost;Database=BloggingTestApp;Trusted_Connection=True;MultipleActiveResultSets=true", + "SqlServer": "Server=localhost;Database=BloggingTestApp;Trusted_Connection=True", "MongoDb": "mongodb://localhost:27017/BloggingTestApp" } } \ No newline at end of file diff --git a/modules/cms-kit/docker-compose.override.yml b/modules/cms-kit/docker-compose.override.yml index 94b9df0c22..4cef8f8414 100644 --- a/modules/cms-kit/docker-compose.override.yml +++ b/modules/cms-kit/docker-compose.override.yml @@ -11,19 +11,19 @@ services: identity-server: environment: - ASPNETCORE_URLS=http://0.0.0.0:80 - - ConnectionStrings__Default=Server=sqlserver;Database=CmsKit_Identity;Trusted_Connection=True;MultipleActiveResultSets=true;User=sa;Password=yourStrong(!)Password;Integrated Security=false - - ConnectionStrings__SqlServerCache=Server=sqlserver;Database=CmsKit_Cache;Trusted_Connection=True;MultipleActiveResultSets=true;User=sa;Password=yourStrong(!)Password;Integrated Security=false + - ConnectionStrings__Default=Server=sqlserver;Database=CmsKit_Identity;Trusted_Connection=True;User=sa;Password=yourStrong(!)Password;Integrated Security=false + - ConnectionStrings__SqlServerCache=Server=sqlserver;Database=CmsKit_Cache;Trusted_Connection=True;User=sa;Password=yourStrong(!)Password;Integrated Security=false ports: - "51600:80" cms-kit: environment: - ASPNETCORE_URLS=http://0.0.0.0:80 - - ConnectionStrings__Default=Server=sqlserver;Database=CmsKit_ModuleDb;Trusted_Connection=True;MultipleActiveResultSets=true;User=sa;Password=yourStrong(!)Password;Integrated Security=false - - ConnectionStrings__AbpSettingManagement=Server=sqlserver;Database=CmsKit_Identity;Trusted_Connection=True;MultipleActiveResultSets=true;User=sa;Password=yourStrong(!)Password;Integrated Security=false - - ConnectionStrings__AbpPermissionManagement=Server=sqlserver;Database=CmsKit_Identity;Trusted_Connection=True;MultipleActiveResultSets=true;User=sa;Password=yourStrong(!)Password;Integrated Security=false - - ConnectionStrings__AbpAuditLogging=Server=sqlserver;Database=CmsKit_Identity;Trusted_Connection=True;MultipleActiveResultSets=true;User=sa;Password=yourStrong(!)Password;Integrated Security=false - - ConnectionStrings__SqlServerCache=Server=sqlserver;Database=CmsKit_Cache;Trusted_Connection=True;MultipleActiveResultSets=true;User=sa;Password=yourStrong(!)Password;Integrated Security=false + - ConnectionStrings__Default=Server=sqlserver;Database=CmsKit_ModuleDb;Trusted_Connection=True;User=sa;Password=yourStrong(!)Password;Integrated Security=false + - ConnectionStrings__AbpSettingManagement=Server=sqlserver;Database=CmsKit_Identity;Trusted_Connection=True;User=sa;Password=yourStrong(!)Password;Integrated Security=false + - ConnectionStrings__AbpPermissionManagement=Server=sqlserver;Database=CmsKit_Identity;Trusted_Connection=True;User=sa;Password=yourStrong(!)Password;Integrated Security=false + - ConnectionStrings__AbpAuditLogging=Server=sqlserver;Database=CmsKit_Identity;Trusted_Connection=True;User=sa;Password=yourStrong(!)Password;Integrated Security=false + - ConnectionStrings__SqlServerCache=Server=sqlserver;Database=CmsKit_Cache;Trusted_Connection=True;User=sa;Password=yourStrong(!)Password;Integrated Security=false - AuthServer__Authority=http://identity-server ports: - "51601:80" \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/appsettings.json b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/appsettings.json index 06b66fcede..7811df81cb 100644 --- a/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/appsettings.json +++ b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/appsettings.json @@ -3,8 +3,8 @@ "CorsOrigins": "https://*.CmsKit.com,http://localhost:4200" }, "ConnectionStrings": { - "Default": "Server=localhost;Database=CmsKit_Main;Trusted_Connection=True;MultipleActiveResultSets=true", - "CmsKit": "Server=localhost;Database=CmsKit_Module;Trusted_Connection=True;MultipleActiveResultSets=true" + "Default": "Server=localhost;Database=CmsKit_Main;Trusted_Connection=True", + "CmsKit": "Server=localhost;Database=CmsKit_Module;Trusted_Connection=True" }, "Redis": { "Configuration": "127.0.0.1" diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/appsettings.json b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/appsettings.json index e0f3118a11..f79959a2e0 100644 --- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/appsettings.json +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/appsettings.json @@ -5,7 +5,7 @@ }, "AppSelfUrl": "https://localhost:44318/", "ConnectionStrings": { - "Default": "Server=localhost;Database=CmsKit_Main;Trusted_Connection=True;MultipleActiveResultSets=true" + "Default": "Server=localhost;Database=CmsKit_Main;Trusted_Connection=True" }, "Redis": { "Configuration": "127.0.0.1" diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/appsettings.json b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/appsettings.json index 9b7fd1fa18..417b64b609 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/appsettings.json +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/appsettings.json @@ -1,5 +1,5 @@ { "ConnectionStrings": { - "Default": "Server=localhost;Database=CmsKit_Unified;Trusted_Connection=True;MultipleActiveResultSets=true" + "Default": "Server=localhost;Database=CmsKit_Unified;Trusted_Connection=True" } } diff --git a/modules/docs/app/VoloDocs.Migrator/appsettings.json b/modules/docs/app/VoloDocs.Migrator/appsettings.json index c9934c1e75..8ba3526f59 100644 --- a/modules/docs/app/VoloDocs.Migrator/appsettings.json +++ b/modules/docs/app/VoloDocs.Migrator/appsettings.json @@ -1,3 +1,3 @@ { - "ConnectionString": "Server=localhost;Database=VoloDocs;Trusted_Connection=True;MultipleActiveResultSets=true" + "ConnectionString": "Server=localhost;Database=VoloDocs;Trusted_Connection=True" } \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/appsettings.json b/modules/docs/app/VoloDocs.Web/appsettings.json index 8eea6b57cd..b1fb4d82bc 100644 --- a/modules/docs/app/VoloDocs.Web/appsettings.json +++ b/modules/docs/app/VoloDocs.Web/appsettings.json @@ -1,5 +1,5 @@ { - "ConnectionString": "Server=localhost;Database=VoloDocs;Trusted_Connection=True;MultipleActiveResultSets=true", + "ConnectionString": "Server=localhost;Database=VoloDocs;Trusted_Connection=True", "LogoUrl": "/assets/images/Logo.png", "ElasticSearch": { "Url": "http://localhost:9200" diff --git a/modules/docs/docker-compose.migrate.yml b/modules/docs/docker-compose.migrate.yml index e88580debd..70142e4ce5 100644 --- a/modules/docs/docker-compose.migrate.yml +++ b/modules/docs/docker-compose.migrate.yml @@ -7,6 +7,6 @@ services: context: ../../ dockerfile: modules/docs/app/VoloDocs.Migrator/Dockerfile environment: - - ConnectionString=Server=sqlserver;Database=VoloDocs;Trusted_Connection=True;MultipleActiveResultSets=true;User=sa;Password=yourStrong(!)Password;Integrated Security=false + - ConnectionString=Server=sqlserver;Database=VoloDocs;Trusted_Connection=True;User=sa;Password=yourStrong(!)Password;Integrated Security=false depends_on: - sqlserver diff --git a/modules/docs/docker-compose.override.yml b/modules/docs/docker-compose.override.yml index 6a8568ce6e..33508c10fe 100644 --- a/modules/docs/docker-compose.override.yml +++ b/modules/docs/docker-compose.override.yml @@ -10,7 +10,7 @@ services: volo-docs: environment: - - ConnectionString=Server=sqlserver;Database=VoloDocs;Trusted_Connection=True;MultipleActiveResultSets=true;User=sa;Password=yourStrong(!)Password;Integrated Security=false + - ConnectionString=Server=sqlserver;Database=VoloDocs;Trusted_Connection=True;User=sa;Password=yourStrong(!)Password;Integrated Security=false - Title=VoloDocs - LogoUrl=/assets/images/Logo.png ports: diff --git a/templates/module/aspnet-core/docker-compose.override.yml b/templates/module/aspnet-core/docker-compose.override.yml index 8d583bacd7..061757bb76 100644 --- a/templates/module/aspnet-core/docker-compose.override.yml +++ b/templates/module/aspnet-core/docker-compose.override.yml @@ -11,19 +11,19 @@ services: identity-server: environment: - ASPNETCORE_URLS=http://0.0.0.0:80 - - ConnectionStrings__Default=Server=sqlserver;Database=MyProjectName_Identity;Trusted_Connection=True;MultipleActiveResultSets=true;User=sa;Password=yourStrong(!)Password;Integrated Security=false - - ConnectionStrings__SqlServerCache=Server=sqlserver;Database=MyProjectName_Cache;Trusted_Connection=True;MultipleActiveResultSets=true;User=sa;Password=yourStrong(!)Password;Integrated Security=false + - ConnectionStrings__Default=Server=sqlserver;Database=MyProjectName_Identity;Trusted_Connection=True;User=sa;Password=yourStrong(!)Password;Integrated Security=false + - ConnectionStrings__SqlServerCache=Server=sqlserver;Database=MyProjectName_Cache;Trusted_Connection=True;User=sa;Password=yourStrong(!)Password;Integrated Security=false ports: - "51600:80" my-project-name: environment: - ASPNETCORE_URLS=http://0.0.0.0:80 - - ConnectionStrings__Default=Server=sqlserver;Database=MyProjectName_ModuleDb;Trusted_Connection=True;MultipleActiveResultSets=true;User=sa;Password=yourStrong(!)Password;Integrated Security=false - - ConnectionStrings__AbpSettingManagement=Server=sqlserver;Database=MyProjectName_Identity;Trusted_Connection=True;MultipleActiveResultSets=true;User=sa;Password=yourStrong(!)Password;Integrated Security=false - - ConnectionStrings__AbpPermissionManagement=Server=sqlserver;Database=MyProjectName_Identity;Trusted_Connection=True;MultipleActiveResultSets=true;User=sa;Password=yourStrong(!)Password;Integrated Security=false - - ConnectionStrings__AbpAuditLogging=Server=sqlserver;Database=MyProjectName_Identity;Trusted_Connection=True;MultipleActiveResultSets=true;User=sa;Password=yourStrong(!)Password;Integrated Security=false - - ConnectionStrings__SqlServerCache=Server=sqlserver;Database=MyProjectName_Cache;Trusted_Connection=True;MultipleActiveResultSets=true;User=sa;Password=yourStrong(!)Password;Integrated Security=false + - ConnectionStrings__Default=Server=sqlserver;Database=MyProjectName_ModuleDb;Trusted_Connection=True;User=sa;Password=yourStrong(!)Password;Integrated Security=false + - ConnectionStrings__AbpSettingManagement=Server=sqlserver;Database=MyProjectName_Identity;Trusted_Connection=True;User=sa;Password=yourStrong(!)Password;Integrated Security=false + - ConnectionStrings__AbpPermissionManagement=Server=sqlserver;Database=MyProjectName_Identity;Trusted_Connection=True;User=sa;Password=yourStrong(!)Password;Integrated Security=false + - ConnectionStrings__AbpAuditLogging=Server=sqlserver;Database=MyProjectName_Identity;Trusted_Connection=True;User=sa;Password=yourStrong(!)Password;Integrated Security=false + - ConnectionStrings__SqlServerCache=Server=sqlserver;Database=MyProjectName_Cache;Trusted_Connection=True;User=sa;Password=yourStrong(!)Password;Integrated Security=false - AuthServer__Authority=http://identity-server ports: - "51601:80" \ No newline at end of file diff --git a/test/AbpPerfTest/AbpPerfTest.WithAbp/appsettings.json b/test/AbpPerfTest/AbpPerfTest.WithAbp/appsettings.json index 9cd22c72c3..b61498b126 100644 --- a/test/AbpPerfTest/AbpPerfTest.WithAbp/appsettings.json +++ b/test/AbpPerfTest/AbpPerfTest.WithAbp/appsettings.json @@ -8,6 +8,6 @@ }, "AllowedHosts": "*", "ConnectionStrings": { - "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=AbpPerfTest_WithAbp;Trusted_Connection=True;MultipleActiveResultSets=true" + "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=AbpPerfTest_WithAbp;Trusted_Connection=True" } } diff --git a/test/AbpPerfTest/AbpPerfTest.WithoutAbp/appsettings.json b/test/AbpPerfTest/AbpPerfTest.WithoutAbp/appsettings.json index 7f6ca466b2..0a5a9029ec 100644 --- a/test/AbpPerfTest/AbpPerfTest.WithoutAbp/appsettings.json +++ b/test/AbpPerfTest/AbpPerfTest.WithoutAbp/appsettings.json @@ -8,6 +8,6 @@ }, "AllowedHosts": "*", "ConnectionStrings": { - "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=AbpPerfTest_WithoutAbp;Trusted_Connection=True;MultipleActiveResultSets=true" + "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=AbpPerfTest_WithoutAbp;Trusted_Connection=True" } } From af45dae2bef4a9abfb4af803b67884cdd5e71fd5 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Sat, 2 Jan 2021 20:44:49 +0300 Subject: [PATCH 167/217] add and expose default validation blueprints --- .../theme-shared/src/lib/constants/validation.ts | 16 ++++++++++++++++ .../packages/theme-shared/src/public-api.ts | 1 + 2 files changed, 17 insertions(+) create mode 100644 npm/ng-packs/packages/theme-shared/src/lib/constants/validation.ts diff --git a/npm/ng-packs/packages/theme-shared/src/lib/constants/validation.ts b/npm/ng-packs/packages/theme-shared/src/lib/constants/validation.ts new file mode 100644 index 0000000000..463a7b01dc --- /dev/null +++ b/npm/ng-packs/packages/theme-shared/src/lib/constants/validation.ts @@ -0,0 +1,16 @@ +export const DEFAULT_VALIDATION_BLUEPRINTS = { + creditCard: 'AbpValidation::ThisFieldIsNotAValidCreditCardNumber.', + email: 'AbpValidation::ThisFieldIsNotAValidEmailAddress.', + invalid: 'AbpValidation::ThisFieldIsNotValid.', + max: 'AbpValidation::ThisFieldMustBeBetween{0}And{1}[{{ min }},{{ max }}]', + maxlength: + 'AbpValidation::ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}[{{ requiredLength }}]', + min: 'AbpValidation::ThisFieldMustBeBetween{0}And{1}[{{ min }},{{ max }}]', + minlength: + 'AbpValidation::ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}[{{ requiredLength }}]', + ngbDate: 'AbpValidation::ThisFieldIsNotValid.', + passwordMismatch: 'AbpIdentity::Volo.Abp.Identity:PasswordConfirmationFailed', + range: 'AbpValidation::ThisFieldMustBeBetween{0}And{1}[{{ min }},{{ max }}]', + required: 'AbpValidation::ThisFieldIsRequired.', + url: 'AbpValidation::ThisFieldIsNotAValidFullyQualifiedHttpHttpsOrFtpUrl', +}; diff --git a/npm/ng-packs/packages/theme-shared/src/public-api.ts b/npm/ng-packs/packages/theme-shared/src/public-api.ts index 7cc8e821d5..5a4f9efe95 100644 --- a/npm/ng-packs/packages/theme-shared/src/public-api.ts +++ b/npm/ng-packs/packages/theme-shared/src/public-api.ts @@ -5,6 +5,7 @@ export * from './lib/animations'; export * from './lib/components'; export { BOOTSTRAP } from './lib/constants/styles'; +export * from './lib/constants/validation'; export * from './lib/directives'; export * from './lib/enums'; export { ErrorHandler } from './lib/handlers'; From ca5e3a36b43abcc7b356f802c84ec5fb98ce0ec7 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Sat, 2 Jan 2021 20:46:31 +0300 Subject: [PATCH 168/217] provide validation tokens in forRoot of theme shared --- .../theme-shared/src/lib/models/common.ts | 2 ++ .../src/lib/theme-shared.module.ts | 30 +++++++++++++++++-- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/models/common.ts b/npm/ng-packs/packages/theme-shared/src/lib/models/common.ts index 09171179c4..64047e0db7 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/models/common.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/models/common.ts @@ -1,7 +1,9 @@ import { Type } from '@angular/core'; +import { Validation } from '@ngx-validate/core'; export interface RootParams { httpErrorConfig: HttpErrorConfig; + validation?: Partial; } export type ErrorScreenErrorCodes = 401 | 403 | 404 | 500; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts index 6775c15e5a..037faee882 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts @@ -2,7 +2,13 @@ import { CoreModule, noop } from '@abp/ng.core'; import { DatePipe } from '@angular/common'; import { APP_INITIALIZER, Injector, ModuleWithProviders, NgModule } from '@angular/core'; import { NgbDateParserFormatter, NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap'; -import { NgxValidateCoreModule } from '@ngx-validate/core'; +import { + defaultMapErrorsFn, + NgxValidateCoreModule, + VALIDATION_BLUEPRINTS, + VALIDATION_MAP_ERRORS_FN, + VALIDATION_VALIDATE_ON_SUBMIT, +} from '@ngx-validate/core'; import { NgxDatatableModule } from '@swimlane/ngx-datatable'; import { BreadcrumbComponent } from './components/breadcrumb/breadcrumb.component'; import { ButtonComponent } from './components/button/button.component'; @@ -18,6 +24,7 @@ import { TableEmptyMessageComponent } from './components/table-empty-message/tab import { TableComponent } from './components/table/table.component'; import { ToastContainerComponent } from './components/toast-container/toast-container.component'; import { ToastComponent } from './components/toast/toast.component'; +import { DEFAULT_VALIDATION_BLUEPRINTS } from './constants/validation'; import { LoadingDirective } from './directives/loading.directive'; import { NgxDatatableDefaultDirective } from './directives/ngx-datatable-default.directive'; import { NgxDatatableListDirective } from './directives/ngx-datatable-list.directive'; @@ -69,7 +76,9 @@ export class BaseThemeSharedModule {} exports: [BaseThemeSharedModule], }) export class ThemeSharedModule { - static forRoot(options = {} as RootParams): ModuleWithProviders { + static forRoot( + { httpErrorConfig, validation = {} } = {} as RootParams, + ): ModuleWithProviders { return { ngModule: ThemeSharedModule, providers: [ @@ -92,13 +101,28 @@ export class ThemeSharedModule { deps: [Injector], useFactory: initLazyStyleHandler, }, - { provide: HTTP_ERROR_CONFIG, useValue: options.httpErrorConfig }, + { provide: HTTP_ERROR_CONFIG, useValue: httpErrorConfig }, { provide: 'HTTP_ERROR_CONFIG', useFactory: httpErrorConfigFactory, deps: [HTTP_ERROR_CONFIG], }, { provide: NgbDateParserFormatter, useClass: DateParserFormatter }, + { + provide: VALIDATION_BLUEPRINTS, + useValue: { + ...DEFAULT_VALIDATION_BLUEPRINTS, + ...(validation.blueprints || {}), + }, + }, + { + provide: VALIDATION_MAP_ERRORS_FN, + useValue: validation.mapErrorsFn || defaultMapErrorsFn, + }, + { + provide: VALIDATION_VALIDATE_ON_SUBMIT, + useValue: validation.validateOnSubmit, + }, ], }; } From c28f0e65f1228515aa8174c9b7307c046892693b Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Sat, 2 Jan 2021 20:47:09 +0300 Subject: [PATCH 169/217] replace RootThemeBasicModule with individual tokens --- .../theme-basic/src/lib/theme-basic.module.ts | 53 ++++++++----------- 1 file changed, 21 insertions(+), 32 deletions(-) diff --git a/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts b/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts index a947809623..ee43ea2d6c 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts @@ -2,18 +2,22 @@ import { CoreModule } from '@abp/ng.core'; import { ThemeSharedModule } from '@abp/ng.theme.shared'; import { ModuleWithProviders, NgModule } from '@angular/core'; import { NgbCollapseModule, NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; -import { NgxValidateCoreModule } from '@ngx-validate/core'; +import { + NgxValidateCoreModule, + VALIDATION_ERROR_TEMPLATE, + VALIDATION_TARGET_SELECTOR, +} from '@ngx-validate/core'; import { AccountLayoutComponent } from './components/account-layout/account-layout.component'; import { ApplicationLayoutComponent } from './components/application-layout/application-layout.component'; import { EmptyLayoutComponent } from './components/empty-layout/empty-layout.component'; import { LogoComponent } from './components/logo/logo.component'; +import { CurrentUserComponent } from './components/nav-items/current-user.component'; +import { LanguagesComponent } from './components/nav-items/languages.component'; import { NavItemsComponent } from './components/nav-items/nav-items.component'; import { RoutesComponent } from './components/routes/routes.component'; import { ValidationErrorComponent } from './components/validation-error/validation-error.component'; -import { CurrentUserComponent } from './components/nav-items/current-user.component'; -import { LanguagesComponent } from './components/nav-items/languages.component'; -import { BASIC_THEME_STYLES_PROVIDERS } from './providers/styles.provider'; import { BASIC_THEME_NAV_ITEM_PROVIDERS } from './providers/nav-item.provider'; +import { BASIC_THEME_STYLES_PROVIDERS } from './providers/styles.provider'; export const LAYOUTS = [ApplicationLayoutComponent, AccountLayoutComponent, EmptyLayoutComponent]; @@ -48,34 +52,19 @@ export const LAYOUTS = [ApplicationLayoutComponent, AccountLayoutComponent, Empt export class ThemeBasicModule { static forRoot(): ModuleWithProviders { return { - ngModule: RootThemeBasicModule, - providers: [BASIC_THEME_NAV_ITEM_PROVIDERS, BASIC_THEME_STYLES_PROVIDERS], + ngModule: ThemeBasicModule, + providers: [ + BASIC_THEME_NAV_ITEM_PROVIDERS, + BASIC_THEME_STYLES_PROVIDERS, + { + provide: VALIDATION_ERROR_TEMPLATE, + useValue: ValidationErrorComponent, + }, + { + provide: VALIDATION_TARGET_SELECTOR, + useValue: '.form-group', + }, + ], }; } } - -@NgModule({ - imports: [ - NgxValidateCoreModule.forRoot({ - targetSelector: '.form-group', - blueprints: { - creditCard: 'AbpValidation::ThisFieldIsNotAValidCreditCardNumber.', - email: 'AbpValidation::ThisFieldIsNotAValidEmailAddress.', - invalid: 'AbpValidation::ThisFieldIsNotValid.', - max: 'AbpValidation::ThisFieldMustBeBetween{0}And{1}[{{ min }},{{ max }}]', - maxlength: - 'AbpValidation::ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}[{{ requiredLength }}]', - min: 'AbpValidation::ThisFieldMustBeBetween{0}And{1}[{{ min }},{{ max }}]', - minlength: - 'AbpValidation::ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}[{{ requiredLength }}]', - ngbDate: 'AbpValidation::ThisFieldIsNotValid.', - passwordMismatch: 'AbpIdentity::Volo.Abp.Identity:PasswordConfirmationFailed', - range: 'AbpValidation::ThisFieldMustBeBetween{0}And{1}[{{ min }},{{ max }}]', - required: 'AbpValidation::ThisFieldIsRequired.', - url: 'AbpValidation::ThisFieldIsNotAValidFullyQualifiedHttpHttpsOrFtpUrl', - }, - errorTemplate: ValidationErrorComponent, - }), - ], -}) -export class RootThemeBasicModule {} From e869ac11dfbfc2f2f51127fbc772fd5487a751bb Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Sat, 2 Jan 2021 21:05:12 +0300 Subject: [PATCH 170/217] add config interface to theme shared testing module --- .../packages/theme-shared/testing/src/lib/models/config.ts | 5 +++++ .../packages/theme-shared/testing/src/lib/models/index.ts | 1 + 2 files changed, 6 insertions(+) create mode 100644 npm/ng-packs/packages/theme-shared/testing/src/lib/models/config.ts create mode 100644 npm/ng-packs/packages/theme-shared/testing/src/lib/models/index.ts diff --git a/npm/ng-packs/packages/theme-shared/testing/src/lib/models/config.ts b/npm/ng-packs/packages/theme-shared/testing/src/lib/models/config.ts new file mode 100644 index 0000000000..1b4825cf9f --- /dev/null +++ b/npm/ng-packs/packages/theme-shared/testing/src/lib/models/config.ts @@ -0,0 +1,5 @@ +import { Validation } from '@ngx-validate/core'; + +export interface Config { + validation?: Partial; +} diff --git a/npm/ng-packs/packages/theme-shared/testing/src/lib/models/index.ts b/npm/ng-packs/packages/theme-shared/testing/src/lib/models/index.ts new file mode 100644 index 0000000000..f03c2281a9 --- /dev/null +++ b/npm/ng-packs/packages/theme-shared/testing/src/lib/models/index.ts @@ -0,0 +1 @@ +export * from './config'; From 1fbd9e82098459a03f9ead0bc9173ab72937c467 Mon Sep 17 00:00:00 2001 From: AnthonyHuang Date: Sat, 2 Jan 2021 12:23:49 -0700 Subject: [PATCH 171/217] Update Background-Workers.md --- docs/en/Background-Workers.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/Background-Workers.md b/docs/en/Background-Workers.md index 2e1b9d2a90..8225aac2a6 100644 --- a/docs/en/Background-Workers.md +++ b/docs/en/Background-Workers.md @@ -80,7 +80,7 @@ public class PassiveUserCheckerWorker : AsyncPeriodicBackgroundWorkerBase ## Register Background Worker -After creating a background worker class, you should to add it to the `IBackgroundWorkerManager`. The most common place is the `OnApplicationInitialization` method of your module class: +After creating a background worker class, you should add it to the `IBackgroundWorkerManager`. The most common place is the `OnApplicationInitialization` method of your module class: ````csharp [DependsOn(typeof(AbpBackgroundWorkersModule))] @@ -137,4 +137,4 @@ ABP Framework's background worker system is good to implement periodic tasks. Ho ## See Also * [Quartz Integration for the background workers](Background-Workers-Quartz.md) -* [Background Jobs](Background-Jobs.md) \ No newline at end of file +* [Background Jobs](Background-Jobs.md) From b5310817db2607ffb214277a7f25b8a591afbbd1 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Sat, 2 Jan 2021 22:55:44 +0300 Subject: [PATCH 172/217] expose theme shared testing config interface --- npm/ng-packs/packages/theme-shared/testing/src/public-api.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/npm/ng-packs/packages/theme-shared/testing/src/public-api.ts b/npm/ng-packs/packages/theme-shared/testing/src/public-api.ts index 14355a8a28..dc639b1462 100644 --- a/npm/ng-packs/packages/theme-shared/testing/src/public-api.ts +++ b/npm/ng-packs/packages/theme-shared/testing/src/public-api.ts @@ -1 +1,3 @@ +import * as ThemeSharedTesting from './lib/models'; export * from './lib/theme-shared-testing.module'; +export { ThemeSharedTesting }; From efad3b7b2e6f58f8b1cafff0c475d964cdedef86 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Sat, 2 Jan 2021 22:56:54 +0300 Subject: [PATCH 173/217] pass validation options to theme shared testing --- .../src/lib/theme-shared-testing.module.ts | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/theme-shared/testing/src/lib/theme-shared-testing.module.ts b/npm/ng-packs/packages/theme-shared/testing/src/lib/theme-shared-testing.module.ts index 323281046a..52abb12ffe 100644 --- a/npm/ng-packs/packages/theme-shared/testing/src/lib/theme-shared-testing.module.ts +++ b/npm/ng-packs/packages/theme-shared/testing/src/lib/theme-shared-testing.module.ts @@ -1,11 +1,19 @@ import { BaseThemeSharedModule, DateParserFormatter, + DEFAULT_VALIDATION_BLUEPRINTS, THEME_SHARED_ROUTE_PROVIDERS, } from '@abp/ng.theme.shared'; import { ModuleWithProviders, NgModule } from '@angular/core'; import { RouterTestingModule } from '@angular/router/testing'; import { NgbDateParserFormatter } from '@ng-bootstrap/ng-bootstrap'; +import { + defaultMapErrorsFn, + VALIDATION_BLUEPRINTS, + VALIDATION_MAP_ERRORS_FN, + VALIDATION_VALIDATE_ON_SUBMIT, +} from '@ngx-validate/core'; +import { Config } from './models/config'; /** * ThemeSharedTestingModule is the module that will be used in tests @@ -15,12 +23,29 @@ import { NgbDateParserFormatter } from '@ng-bootstrap/ng-bootstrap'; imports: [RouterTestingModule, BaseThemeSharedModule], }) export class ThemeSharedTestingModule { - static withConfig(): ModuleWithProviders { + static withConfig( + { validation = {} } = {} as Config, + ): ModuleWithProviders { return { ngModule: ThemeSharedTestingModule, providers: [ THEME_SHARED_ROUTE_PROVIDERS, { provide: NgbDateParserFormatter, useClass: DateParserFormatter }, + { + provide: VALIDATION_BLUEPRINTS, + useValue: { + ...DEFAULT_VALIDATION_BLUEPRINTS, + ...(validation.blueprints || {}), + }, + }, + { + provide: VALIDATION_MAP_ERRORS_FN, + useValue: validation.mapErrorsFn || defaultMapErrorsFn, + }, + { + provide: VALIDATION_VALIDATE_ON_SUBMIT, + useValue: validation.validateOnSubmit, + }, ], }; } From 2bf98ea68b0497474871136a56f30039cc03036d Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Sat, 2 Jan 2021 23:23:14 +0300 Subject: [PATCH 174/217] add a BaseThemeBasicModule --- .../packages/theme-basic/src/lib/theme-basic.module.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts b/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts index ee43ea2d6c..be08f78e5b 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts @@ -49,6 +49,12 @@ export const LAYOUTS = [ApplicationLayoutComponent, AccountLayoutComponent, Empt ], entryComponents: [...LAYOUTS, ValidationErrorComponent, CurrentUserComponent, LanguagesComponent], }) +export class BaseThemeBasicModule {} + +@NgModule({ + exports: [BaseThemeBasicModule], + imports: [BaseThemeBasicModule], +}) export class ThemeBasicModule { static forRoot(): ModuleWithProviders { return { From f3d919b7d8f1683a80366e9f8d4f78f08664d974 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Sat, 2 Jan 2021 23:23:55 +0300 Subject: [PATCH 175/217] add theme basic testing module and its entry point --- .../theme-basic/testing/ng-package.json | 7 ++++ .../src/lib/theme-basic-testing.module.ts | 32 +++++++++++++++++++ .../theme-basic/testing/src/public-api.ts | 1 + 3 files changed, 40 insertions(+) create mode 100644 npm/ng-packs/packages/theme-basic/testing/ng-package.json create mode 100644 npm/ng-packs/packages/theme-basic/testing/src/lib/theme-basic-testing.module.ts create mode 100644 npm/ng-packs/packages/theme-basic/testing/src/public-api.ts diff --git a/npm/ng-packs/packages/theme-basic/testing/ng-package.json b/npm/ng-packs/packages/theme-basic/testing/ng-package.json new file mode 100644 index 0000000000..c539597da7 --- /dev/null +++ b/npm/ng-packs/packages/theme-basic/testing/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../dist/theme-basic/testing", + "lib": { + "entryFile": "src/public-api.ts" + } +} diff --git a/npm/ng-packs/packages/theme-basic/testing/src/lib/theme-basic-testing.module.ts b/npm/ng-packs/packages/theme-basic/testing/src/lib/theme-basic-testing.module.ts new file mode 100644 index 0000000000..7df6d40231 --- /dev/null +++ b/npm/ng-packs/packages/theme-basic/testing/src/lib/theme-basic-testing.module.ts @@ -0,0 +1,32 @@ +import { + BaseThemeBasicModule, + BASIC_THEME_NAV_ITEM_PROVIDERS, + BASIC_THEME_STYLES_PROVIDERS, + ValidationErrorComponent, +} from '@abp/ng.theme.basic'; +import { ModuleWithProviders, NgModule } from '@angular/core'; +import { VALIDATION_ERROR_TEMPLATE, VALIDATION_TARGET_SELECTOR } from '@ngx-validate/core'; + +@NgModule({ + exports: [BaseThemeBasicModule], + imports: [BaseThemeBasicModule], +}) +export class ThemeBasicTestingModule { + static forRoot(): ModuleWithProviders { + return { + ngModule: ThemeBasicTestingModule, + providers: [ + BASIC_THEME_NAV_ITEM_PROVIDERS, + BASIC_THEME_STYLES_PROVIDERS, + { + provide: VALIDATION_ERROR_TEMPLATE, + useValue: ValidationErrorComponent, + }, + { + provide: VALIDATION_TARGET_SELECTOR, + useValue: '.form-group', + }, + ], + }; + } +} diff --git a/npm/ng-packs/packages/theme-basic/testing/src/public-api.ts b/npm/ng-packs/packages/theme-basic/testing/src/public-api.ts new file mode 100644 index 0000000000..24a3ac7586 --- /dev/null +++ b/npm/ng-packs/packages/theme-basic/testing/src/public-api.ts @@ -0,0 +1 @@ +export * from './lib/theme-basic-testing.module'; From 3208ec57844d7f37ce78d746201d1336277b579e Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Sun, 3 Jan 2021 13:27:17 +0300 Subject: [PATCH 176/217] update blueprint extension in validation document --- docs/en/UI/Angular/Form-Validation.md | 66 +++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 4 deletions(-) diff --git a/docs/en/UI/Angular/Form-Validation.md b/docs/en/UI/Angular/Form-Validation.md index 38e7969eea..a178fa213c 100644 --- a/docs/en/UI/Angular/Form-Validation.md +++ b/docs/en/UI/Angular/Form-Validation.md @@ -6,23 +6,52 @@ Reactive forms in ABP Angular UI are validated by [ngx-validate](https://www.npm ## How to Add New Error Messages -You can add a new error message by providing the `VALIDATION_BLUEPRINTS` injection token from your root module. +You can add a new error message by passing validation options to the `ThemeSharedModule` in your root module. ```js import { VALIDATION_BLUEPRINTS } from "@ngx-validate/core"; +import { DEFAULT_VALIDATION_BLUEPRINTS } from "@abp/ng.theme.shared"; @NgModule({ + imports: [ + ThemeSharedModule.forRoot({ + validation: { + blueprints: { + uniqueUsername: "::AlreadyExists[{%{{{ username }}}%}]", + }, + }, + + // rest of theme shared config + }), + + // other imports + ], + // rest of the module metadata +}) +export class AppModule {} +``` + +Alternatively, you may provide the `VALIDATION_BLUEPRINTS` token directly in your root module. Please do not forget to spread `DEFAULT_VALIDATION_BLUEPRINTS`. Otherwise, built-in ABP validation messages will not work. +```js +import { VALIDATION_BLUEPRINTS } from "@ngx-validate/core"; +import { DEFAULT_VALIDATION_BLUEPRINTS } from "@abp/ng.theme.shared"; + +@NgModule({ providers: [ - // other providers { provide: VALIDATION_BLUEPRINTS, useValue: { + ...DEFAULT_VALIDATION_BLUEPRINTS, uniqueUsername: "::AlreadyExists[{%{{{ username }}}%}]", }, }, + + // other providers ], + + // rest of the module metadata }) export class AppModule {} ``` @@ -40,7 +69,7 @@ In this example; ## How to Change Existing Error Messages -You can overwrite an existing error message by providing `VALIDATION_BLUEPRINTS` injection token from your root module. Let's imagine you have a custom localization resource for required inputs. +You can overwrite an existing error message by passing validation options to the `ThemeSharedModule` in your root module. Let's imagine you have a custom localization resource for required inputs. ```json "RequiredInput": "Oops! We need this input." @@ -50,19 +79,48 @@ To use this instead of the built-in required input message, all you need to do i ```js import { VALIDATION_BLUEPRINTS } from "@ngx-validate/core"; +import { DEFAULT_VALIDATION_BLUEPRINTS } from "@abp/ng.theme.shared"; @NgModule({ + imports: [ + ThemeSharedModule.forRoot({ + validation: { + blueprints: { + required: "::RequiredInput", + }, + }, + + // rest of theme shared config + }), + + // other imports + ], + // rest of the module metadata +}) +export class AppModule {} +``` + +Alternatively, you may provide the `VALIDATION_BLUEPRINTS` token directly in your root module. Please do not forget to spread `DEFAULT_VALIDATION_BLUEPRINTS`. Otherwise, built-in ABP validation messages will not work. +```js +import { VALIDATION_BLUEPRINTS } from "@ngx-validate/core"; +import { DEFAULT_VALIDATION_BLUEPRINTS } from "@abp/ng.theme.shared"; + +@NgModule({ providers: [ - // other providers { provide: VALIDATION_BLUEPRINTS, useValue: { + ...DEFAULT_VALIDATION_BLUEPRINTS, required: "::RequiredInput", }, }, + + // other providers ], + + // rest of the module metadata }) export class AppModule {} ``` From 6c0b543679746021e13212d9014894dfd3cb33cf Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 4 Jan 2021 11:10:37 +0800 Subject: [PATCH 177/217] Comment RoleDeletedEventHandler --- .../Identity/RoleDeletedEventHandler.cs | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) 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 806a37de7c..b3fd565b24 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 @@ -7,20 +7,20 @@ using Volo.Abp.Identity; namespace Volo.Abp.PermissionManagement.Identity { - public class RoleDeletedEventHandler : - ILocalEventHandler>, - ITransientDependency - { - protected IPermissionManager PermissionManager { get; } - - public RoleDeletedEventHandler(IPermissionManager permissionManager) - { - PermissionManager = permissionManager; - } - - public virtual async Task HandleEventAsync(EntityDeletedEventData eventData) - { - await PermissionManager.DeleteAsync(RolePermissionValueProvider.ProviderName, eventData.Entity.Name); - } - } + // public class RoleDeletedEventHandler : + // ILocalEventHandler>, + // ITransientDependency + // { + // protected IPermissionManager PermissionManager { get; } + // + // public RoleDeletedEventHandler(IPermissionManager permissionManager) + // { + // PermissionManager = permissionManager; + // } + // + // public virtual async Task HandleEventAsync(EntityDeletedEventData eventData) + // { + // await PermissionManager.DeleteAsync(RolePermissionValueProvider.ProviderName, eventData.Entity.Name); + // } + // } } From af2e3fc9df1270e786df885146c83e2a34e9888c Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 4 Jan 2021 11:16:47 +0800 Subject: [PATCH 178/217] Use async repository method in Blogging module. --- .../Blogging/Blogs/EfCoreBlogRepository.cs | 2 +- .../Comments/EfCoreCommentRepository.cs | 12 ++++++------ .../Blogging/Posts/EfCorePostRepository.cs | 18 +++++++++--------- .../Blogging/Tagging/EfCoreTagRepository.cs | 10 +++++----- .../Volo/Blogging/Blogs/MongoBlogRepository.cs | 2 +- .../Comments/MongoCommentRepository.cs | 8 ++++---- .../Volo/Blogging/Posts/MongoPostRepository.cs | 12 ++++++------ .../Blogging/Tagging/MongoTagRepository.cs | 10 +++++----- .../Blogging/Users/MongoBlogUserRepository.cs | 2 +- 9 files changed, 38 insertions(+), 38 deletions(-) diff --git a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/Blogs/EfCoreBlogRepository.cs b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/Blogs/EfCoreBlogRepository.cs index 604f7ca8b5..564d45dc7a 100644 --- a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/Blogs/EfCoreBlogRepository.cs +++ b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/Blogs/EfCoreBlogRepository.cs @@ -17,7 +17,7 @@ namespace Volo.Blogging.Blogs public async Task FindByShortNameAsync(string shortName) { - return await DbSet.FirstOrDefaultAsync(p => p.ShortName == shortName); + return await (await GetDbSetAsync()).FirstOrDefaultAsync(p => p.ShortName == shortName); } } } diff --git a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/Comments/EfCoreCommentRepository.cs b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/Comments/EfCoreCommentRepository.cs index 751d106071..6c28b521aa 100644 --- a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/Comments/EfCoreCommentRepository.cs +++ b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/Comments/EfCoreCommentRepository.cs @@ -11,14 +11,14 @@ namespace Volo.Blogging.Comments { public class EfCoreCommentRepository : EfCoreRepository, ICommentRepository { - public EfCoreCommentRepository(IDbContextProvider dbContextProvider) + public EfCoreCommentRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) { } public async Task> GetListOfPostAsync(Guid postId) { - return await DbSet + return await (await GetDbSetAsync()) .Where(a => a.PostId == postId) .OrderBy(a => a.CreationTime) .ToListAsync(); @@ -26,20 +26,20 @@ namespace Volo.Blogging.Comments public async Task GetCommentCountOfPostAsync(Guid postId) { - return await DbSet + return await (await GetDbSetAsync()) .CountAsync(a => a.PostId == postId); } public async Task> GetRepliesOfComment(Guid id) { - return await DbSet + return await (await GetDbSetAsync()) .Where(a => a.RepliedCommentId == id).ToListAsync(); } public async Task DeleteOfPost(Guid id) { - var recordsToDelete = DbSet.Where(pt => pt.PostId == id); - DbSet.RemoveRange(recordsToDelete); + var recordsToDelete = (await GetDbSetAsync()).Where(pt => pt.PostId == id); + (await GetDbSetAsync()).RemoveRange(recordsToDelete); } } } diff --git a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/Posts/EfCorePostRepository.cs b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/Posts/EfCorePostRepository.cs index b152f3ae7d..a5a84fd340 100644 --- a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/Posts/EfCorePostRepository.cs +++ b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/Posts/EfCorePostRepository.cs @@ -20,24 +20,24 @@ namespace Volo.Blogging.Posts public async Task> GetPostsByBlogId(Guid id) { - return await DbSet.Where(p => p.BlogId == id).OrderByDescending(p=>p.CreationTime).ToListAsync(); + return await (await GetDbSetAsync()).Where(p => p.BlogId == id).OrderByDescending(p=>p.CreationTime).ToListAsync(); } - public Task IsPostUrlInUseAsync(Guid blogId, string url, Guid? excludingPostId = null) + public async Task IsPostUrlInUseAsync(Guid blogId, string url, Guid? excludingPostId = null) { - var query = DbSet.Where(p => blogId == p.BlogId && p.Url == url); + var query = (await GetDbSetAsync()).Where(p => blogId == p.BlogId && p.Url == url); if (excludingPostId != null) { query = query.Where(p => excludingPostId != p.Id); } - return query.AnyAsync(); + return await query.AnyAsync(); } public async Task GetPostByUrl(Guid blogId, string url) { - var post = await DbSet.FirstOrDefaultAsync(p => p.BlogId == blogId && p.Url == url); + var post = await (await GetDbSetAsync()).FirstOrDefaultAsync(p => p.BlogId == blogId && p.Url == url); if (post == null) { @@ -51,18 +51,18 @@ namespace Volo.Blogging.Posts { if (!descending) { - return await DbSet.Where(x=>x.BlogId==blogId).OrderByDescending(x => x.CreationTime).ToListAsync(); + return await (await GetDbSetAsync()).Where(x=>x.BlogId==blogId).OrderByDescending(x => x.CreationTime).ToListAsync(); } else { - return await DbSet.Where(x => x.BlogId == blogId).OrderBy(x => x.CreationTime).ToListAsync(); + return await (await GetDbSetAsync()).Where(x => x.BlogId == blogId).OrderBy(x => x.CreationTime).ToListAsync(); } } - public override IQueryable WithDetails() + public override async Task> WithDetailsAsync() { - return GetQueryable().IncludeDetails(); + return (await GetQueryableAsync()).IncludeDetails(); } } } diff --git a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/Tagging/EfCoreTagRepository.cs b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/Tagging/EfCoreTagRepository.cs index 3e897fa7e3..a92ae780da 100644 --- a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/Tagging/EfCoreTagRepository.cs +++ b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/Tagging/EfCoreTagRepository.cs @@ -19,27 +19,27 @@ namespace Volo.Blogging.Tagging public async Task> GetListAsync(Guid blogId) { - return await DbSet.Where(t=>t.BlogId == blogId).ToListAsync(); + return await (await GetDbSetAsync()).Where(t=>t.BlogId == blogId).ToListAsync(); } public async Task GetByNameAsync(Guid blogId, string name) { - return await DbSet.FirstAsync(t=> t.BlogId == blogId && t.Name == name); + return await (await GetDbSetAsync()).FirstAsync(t=> t.BlogId == blogId && t.Name == name); } public async Task FindByNameAsync(Guid blogId, string name) { - return await DbSet.FirstOrDefaultAsync(t => t.BlogId == blogId && t.Name == name); + return await (await GetDbSetAsync()).FirstOrDefaultAsync(t => t.BlogId == blogId && t.Name == name); } public async Task> GetListAsync(IEnumerable ids) { - return await DbSet.Where(t => ids.Contains(t.Id)).ToListAsync(); + return await (await GetDbSetAsync()).Where(t => ids.Contains(t.Id)).ToListAsync(); } public async Task DecreaseUsageCountOfTagsAsync(List ids, CancellationToken cancellationToken = default) { - var tags = await DbSet + var tags = await (await GetDbSetAsync()) .Where(t => ids.Any(id => id == t.Id)) .ToListAsync(GetCancellationToken(cancellationToken)); diff --git a/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/Blogs/MongoBlogRepository.cs b/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/Blogs/MongoBlogRepository.cs index b1c7b5d319..6025dfe3ca 100644 --- a/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/Blogs/MongoBlogRepository.cs +++ b/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/Blogs/MongoBlogRepository.cs @@ -15,7 +15,7 @@ namespace Volo.Blogging.Blogs public async Task FindByShortNameAsync(string shortName) { - return await GetMongoQueryable().FirstOrDefaultAsync(p => p.ShortName == shortName); + return await (await GetMongoQueryableAsync()).FirstOrDefaultAsync(p => p.ShortName == shortName); } } } diff --git a/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/Comments/MongoCommentRepository.cs b/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/Comments/MongoCommentRepository.cs index b17c7f906f..bbbe60345b 100644 --- a/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/Comments/MongoCommentRepository.cs +++ b/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/Comments/MongoCommentRepository.cs @@ -17,7 +17,7 @@ namespace Volo.Blogging.Comments public async Task> GetListOfPostAsync(Guid postId) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync()) .Where(a => a.PostId == postId) .OrderBy(a => a.CreationTime) .ToListAsync(); @@ -25,19 +25,19 @@ namespace Volo.Blogging.Comments public async Task GetCommentCountOfPostAsync(Guid postId) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync()) .CountAsync(a => a.PostId == postId); } public async Task> GetRepliesOfComment(Guid id) { - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync()) .Where(a => a.RepliedCommentId == id).ToListAsync(); } public async Task DeleteOfPost(Guid id) { - var recordsToDelete = GetMongoQueryable().Where(pt => pt.PostId == id); + var recordsToDelete = (await GetMongoQueryableAsync()).Where(pt => pt.PostId == id); foreach (var record in recordsToDelete) { diff --git a/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/Posts/MongoPostRepository.cs b/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/Posts/MongoPostRepository.cs index e12e5f29de..27f4ad4348 100644 --- a/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/Posts/MongoPostRepository.cs +++ b/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/Posts/MongoPostRepository.cs @@ -18,25 +18,25 @@ namespace Volo.Blogging.Posts public async Task> GetPostsByBlogId(Guid id) { - return await GetMongoQueryable().Where(p => p.BlogId == id).OrderByDescending(p => p.CreationTime).ToListAsync(); + return await (await GetMongoQueryableAsync()).Where(p => p.BlogId == id).OrderByDescending(p => p.CreationTime).ToListAsync(); } - public Task IsPostUrlInUseAsync(Guid blogId, string url, Guid? excludingPostId = null) + public async Task IsPostUrlInUseAsync(Guid blogId, string url, Guid? excludingPostId = null) { - var query = GetMongoQueryable().Where(p => blogId == p.BlogId && p.Url == url); + var query = (await GetMongoQueryableAsync()).Where(p => blogId == p.BlogId && p.Url == url); if (excludingPostId != null) { query = query.Where(p => excludingPostId != p.Id); } - return query.AnyAsync(); + return await query.AnyAsync(); } public async Task GetPostByUrl(Guid blogId, string url) { - var post = await GetMongoQueryable().FirstOrDefaultAsync(p => p.BlogId == blogId && p.Url == url); + var post = await (await GetMongoQueryableAsync()).FirstOrDefaultAsync(p => p.BlogId == blogId && p.Url == url); if (post == null) { @@ -48,7 +48,7 @@ namespace Volo.Blogging.Posts public async Task> GetOrderedList(Guid blogId, bool @descending = false) { - var query = GetMongoQueryable().Where(x => x.BlogId == blogId); + var query = (await GetMongoQueryableAsync()).Where(x => x.BlogId == blogId); if (!descending) { diff --git a/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/Tagging/MongoTagRepository.cs b/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/Tagging/MongoTagRepository.cs index 2c0b3b97bf..f0024b37d7 100644 --- a/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/Tagging/MongoTagRepository.cs +++ b/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/Tagging/MongoTagRepository.cs @@ -20,27 +20,27 @@ namespace Volo.Blogging.Tagging public async Task> GetListAsync(Guid blogId) { - return await GetMongoQueryable().Where(t => t.BlogId == blogId).ToListAsync(); + return await (await GetMongoQueryableAsync()).Where(t => t.BlogId == blogId).ToListAsync(); } public async Task GetByNameAsync(Guid blogId, string name) { - return await GetMongoQueryable().Where(t => t.BlogId == blogId && t.Name == name).FirstAsync(); + return await (await GetMongoQueryableAsync()).Where(t => t.BlogId == blogId && t.Name == name).FirstAsync(); } public async Task FindByNameAsync(Guid blogId, string name) { - return await GetMongoQueryable().Where(t => t.BlogId == blogId && t.Name == name).FirstOrDefaultAsync(); + return await (await GetMongoQueryableAsync()).Where(t => t.BlogId == blogId && t.Name == name).FirstOrDefaultAsync(); } public async Task> GetListAsync(IEnumerable ids) { - return await GetMongoQueryable().Where(t => ids.Contains(t.Id)).ToListAsync(); + return await (await GetMongoQueryableAsync()).Where(t => ids.Contains(t.Id)).ToListAsync(); } public async Task DecreaseUsageCountOfTagsAsync(List ids, CancellationToken cancellationToken = default) { - var tags = await GetMongoQueryable() + var tags = await (await GetMongoQueryableAsync()) .Where(t => ids.Contains(t.Id)) .ToListAsync(GetCancellationToken(cancellationToken)); diff --git a/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/Users/MongoBlogUserRepository.cs b/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/Users/MongoBlogUserRepository.cs index a0b7655946..fdcf4d0097 100644 --- a/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/Users/MongoBlogUserRepository.cs +++ b/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/Users/MongoBlogUserRepository.cs @@ -17,7 +17,7 @@ namespace Volo.Blogging.Users public async Task> GetUsersAsync(int maxCount, string filter, CancellationToken cancellationToken) { - var query = GetMongoQueryable(); + var query = await GetMongoQueryableAsync(cancellationToken); if (!string.IsNullOrWhiteSpace(filter)) { From cb38a0fa7439d5e826d3fbedc4bb7405a572090e Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 4 Jan 2021 11:29:36 +0800 Subject: [PATCH 179/217] Use async repository method in CmsKit module. --- .../Volo/CmsKit/Comments/EfCoreCommentRepository.cs | 6 +++--- .../Volo/CmsKit/Pages/EfCorePageRepository.cs | 6 +++--- .../Volo/CmsKit/Ratings/EfCoreRatingRepository.cs | 6 +++--- .../CmsKit/Reactions/EfCoreUserReactionRepository.cs | 6 +++--- .../Volo/CmsKit/Tags/EfCoreTagRepository.cs | 8 ++++---- .../CmsKit/MongoDB/Comments/MongoCommentRepository.cs | 8 ++++---- .../Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs | 8 ++++---- .../CmsKit/MongoDB/Ratings/MongoRatingRepository.cs | 6 +++--- .../MongoDB/Reactions/MongoUserReactionRepository.cs | 6 +++--- .../Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs | 10 +++++----- 10 files changed, 35 insertions(+), 35 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Comments/EfCoreCommentRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Comments/EfCoreCommentRepository.cs index 9dec7877f8..40496aaef8 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Comments/EfCoreCommentRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Comments/EfCoreCommentRepository.cs @@ -28,8 +28,8 @@ namespace Volo.CmsKit.Comments Check.NotNullOrWhiteSpace(entityType, nameof(entityType)); Check.NotNullOrWhiteSpace(entityId, nameof(entityId)); - var query = from comment in DbSet - join user in DbContext.Set() on comment.CreatorId equals user.Id + var query = from comment in (await GetDbSetAsync()) + join user in (await GetDbContextAsync()).Set() on comment.CreatorId equals user.Id where entityType == comment.EntityType && entityId == comment.EntityId orderby comment.CreationTime select new CommentWithAuthorQueryResultItem @@ -45,7 +45,7 @@ namespace Volo.CmsKit.Comments Comment comment, CancellationToken cancellationToken = default) { - var replies = await DbSet + var replies = await (await GetDbSetAsync()) .Where(x => x.RepliedCommentId == comment.Id) .ToListAsync(GetCancellationToken(cancellationToken)); diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Pages/EfCorePageRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Pages/EfCorePageRepository.cs index 4502a13b4c..93a7df00d2 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Pages/EfCorePageRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Pages/EfCorePageRepository.cs @@ -23,9 +23,9 @@ namespace Volo.CmsKit.Pages return FindAsync(x => x.Url == url); } - public Task DoesExistAsync(string url) + public async Task DoesExistAsync(string url) { - return DbSet.AnyAsync(x => x.Url == url); + return await (await GetDbSetAsync()).AnyAsync(x => x.Url == url); } } -} \ No newline at end of file +} diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Ratings/EfCoreRatingRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Ratings/EfCoreRatingRepository.cs index 810335b4d6..a48c288932 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Ratings/EfCoreRatingRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Ratings/EfCoreRatingRepository.cs @@ -24,7 +24,7 @@ namespace Volo.CmsKit.Ratings Check.NotNullOrWhiteSpace(entityType, nameof(entityType)); Check.NotNullOrWhiteSpace(entityId, nameof(entityId)); - var rating = await DbSet.FirstOrDefaultAsync( + var rating = await (await GetDbSetAsync()).FirstOrDefaultAsync( r => r.EntityType == entityType && r.EntityId == entityId && r.CreatorId == userId, GetCancellationToken(cancellationToken)); @@ -38,7 +38,7 @@ namespace Volo.CmsKit.Ratings Check.NotNullOrWhiteSpace(entityId, nameof(entityId)); var query = ( - from rating in DbSet + from rating in (await GetDbSetAsync()) where rating.EntityType == entityType && rating.EntityId == entityId group rating by rating.StarCount into g @@ -54,4 +54,4 @@ namespace Volo.CmsKit.Ratings return ratings; } } -} \ No newline at end of file +} diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Reactions/EfCoreUserReactionRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Reactions/EfCoreUserReactionRepository.cs index da89de4c74..65824c79b6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Reactions/EfCoreUserReactionRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Reactions/EfCoreUserReactionRepository.cs @@ -30,7 +30,7 @@ namespace Volo.CmsKit.Reactions Check.NotNullOrWhiteSpace(entityId, nameof(entityId)); Check.NotNullOrWhiteSpace(reactionName, nameof(reactionName)); - return await DbSet + return await (await GetDbSetAsync()) .Where(x => x.CreatorId == userId && x.EntityType == entityType && @@ -48,7 +48,7 @@ namespace Volo.CmsKit.Reactions Check.NotNullOrWhiteSpace(entityType, nameof(entityType)); Check.NotNullOrWhiteSpace(entityId, nameof(entityId)); - return await DbSet + return await (await GetDbSetAsync()) .Where(x => x.CreatorId == userId && x.EntityType == entityType && @@ -64,7 +64,7 @@ namespace Volo.CmsKit.Reactions Check.NotNullOrWhiteSpace(entityType, nameof(entityType)); Check.NotNullOrWhiteSpace(entityId, nameof(entityId)); - return await DbSet + return await (await GetDbSetAsync()) .Where(x => x.EntityType == entityType && x.EntityId == entityId) diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs index 0b6cfe1f48..3d917a059a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs @@ -19,13 +19,13 @@ namespace Volo.CmsKit.Tags { } - public virtual Task AnyAsync( + public virtual async Task AnyAsync( [NotNull] string entityType, [NotNull] string name, Guid? tenantId = null, CancellationToken cancellationToken = default) { - return DbSet.AnyAsync(x => + return await (await GetDbSetAsync()).AnyAsync(x => x.EntityType == entityType && x.Name == name && x.TenantId == tenantId, @@ -64,12 +64,12 @@ namespace Volo.CmsKit.Tags Guid? tenantId = null, CancellationToken cancellationToken = default) { - var entityTagIds = await DbContext.Set() + var entityTagIds = await (await GetDbContextAsync()).Set() .Where(q => q.EntityId == entityId && q.TenantId == tenantId) .Select(q => q.TagId) .ToListAsync(cancellationToken: GetCancellationToken(cancellationToken)); - var query = DbSet + var query = (await GetDbSetAsync()) .Where(x => x.EntityType == entityType && x.TenantId == tenantId && entityTagIds.Contains(x.Id)); diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Comments/MongoCommentRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Comments/MongoCommentRepository.cs index 9564bcf9f8..5d16c6d55c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Comments/MongoCommentRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Comments/MongoCommentRepository.cs @@ -26,15 +26,15 @@ namespace Volo.CmsKit.MongoDB.Comments Check.NotNullOrWhiteSpace(entityType, nameof(entityType)); Check.NotNullOrWhiteSpace(entityId, nameof(entityId)); - var authorsQuery = from comment in GetMongoQueryable() - join user in DbContext.CmsUsers on comment.CreatorId equals user.Id + var authorsQuery = from comment in (await GetMongoQueryableAsync(cancellationToken)) + join user in (await GetDbContextAsync(cancellationToken)).CmsUsers on comment.CreatorId equals user.Id where entityType == comment.EntityType && entityId == comment.EntityId orderby comment.CreationTime select user; var authors = await authorsQuery.ToListAsync(GetCancellationToken(cancellationToken)); - var comments = await GetMongoQueryable() + var comments = await (await GetMongoQueryableAsync(cancellationToken)) .Where(c => c.EntityId == entityId && c.EntityType == entityType) .OrderBy(c => c.CreationTime) .ToListAsync(GetCancellationToken(cancellationToken)); @@ -53,7 +53,7 @@ namespace Volo.CmsKit.MongoDB.Comments Comment comment, CancellationToken cancellationToken = default) { - var replies = await GetMongoQueryable() + var replies = await (await GetMongoQueryableAsync(cancellationToken)) .Where(x => x.RepliedCommentId == comment.Id) .ToListAsync(GetCancellationToken(cancellationToken)); diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs index e7c6cd32f5..8537500c96 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs @@ -22,10 +22,10 @@ namespace Volo.CmsKit.MongoDB.Pages { return FindAsync(x => x.Url == url); } - - public Task DoesExistAsync(string url) + + public async Task DoesExistAsync(string url) { - return GetMongoQueryable().AnyAsync(x => x.Url == url); + return await (await GetMongoQueryableAsync()).AnyAsync(x => x.Url == url); } } -} \ No newline at end of file +} diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Ratings/MongoRatingRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Ratings/MongoRatingRepository.cs index 92f7f992da..8ff8b4f81d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Ratings/MongoRatingRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Ratings/MongoRatingRepository.cs @@ -25,7 +25,7 @@ namespace Volo.CmsKit.MongoDB.Ratings Check.NotNullOrWhiteSpace(entityType, nameof(entityType)); Check.NotNullOrWhiteSpace(entityId, nameof(entityId)); - var rating = await GetMongoQueryable() + var rating = await (await GetMongoQueryableAsync(cancellationToken)) .FirstOrDefaultAsync(r => r.EntityType == entityType && r.EntityId == entityId && r.CreatorId == userId, GetCancellationToken(cancellationToken)); @@ -39,7 +39,7 @@ namespace Volo.CmsKit.MongoDB.Ratings Check.NotNullOrWhiteSpace(entityId, nameof(entityId)); var query = ( - from rating in GetMongoQueryable() + from rating in (await GetMongoQueryableAsync(cancellationToken)) where rating.EntityType == entityType && rating.EntityId == entityId group rating by rating.StarCount into g @@ -55,4 +55,4 @@ namespace Volo.CmsKit.MongoDB.Ratings return ratings; } } -} \ No newline at end of file +} diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Reactions/MongoUserReactionRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Reactions/MongoUserReactionRepository.cs index e3a09c4514..6ac4cf1b80 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Reactions/MongoUserReactionRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Reactions/MongoUserReactionRepository.cs @@ -29,7 +29,7 @@ namespace Volo.CmsKit.MongoDB.Reactions Check.NotNullOrWhiteSpace(entityId, nameof(entityId)); Check.NotNullOrWhiteSpace(reactionName, nameof(reactionName)); - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(x => x.CreatorId == userId && x.EntityType == entityType && @@ -47,7 +47,7 @@ namespace Volo.CmsKit.MongoDB.Reactions Check.NotNullOrWhiteSpace(entityType, nameof(entityType)); Check.NotNullOrWhiteSpace(entityId, nameof(entityId)); - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(x => x.CreatorId == userId && x.EntityType == entityType && @@ -63,7 +63,7 @@ namespace Volo.CmsKit.MongoDB.Reactions Check.NotNullOrWhiteSpace(entityType, nameof(entityType)); Check.NotNullOrWhiteSpace(entityId, nameof(entityId)); - return await GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(x => x.EntityType == entityType && x.EntityId == entityId) diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs index 86dc20d83c..02c42c22fb 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs @@ -18,13 +18,13 @@ namespace Volo.CmsKit.MongoDB.Tags { } - public Task AnyAsync( + public async Task AnyAsync( [NotNull] string entityType, [NotNull] string name, Guid? tenantId = null, CancellationToken cancellationToken = default) { - return GetMongoQueryable() + return await (await GetMongoQueryableAsync(cancellationToken)) .AnyAsync(x => x.EntityType == entityType && x.Name == name && @@ -64,13 +64,13 @@ namespace Volo.CmsKit.MongoDB.Tags Guid? tenantId = null, CancellationToken cancellationToken = default) { - var entityTagIds = await DbContext.EntityTags.AsQueryable() + var entityTagIds = await (await GetDbContextAsync(cancellationToken)).EntityTags.AsQueryable() .Where(q => q.EntityId == entityId && q.TenantId == tenantId) .Select(q => q.TagId) .ToListAsync(cancellationToken: GetCancellationToken(cancellationToken)); - var query = GetMongoQueryable() - .Where(x => + var query = (await GetMongoQueryableAsync(cancellationToken)) + .Where(x => x.EntityType == entityType && x.TenantId == tenantId && entityTagIds.Contains(x.Id)); From 4924b016a9c3b2e31f3c30318e21e2ad6d19e1d7 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 4 Jan 2021 11:35:41 +0800 Subject: [PATCH 180/217] Use async repository method in Docs module. --- .../Docs/Documents/EFCoreDocumentRepository.cs | 14 +++++++------- .../Docs/Projects/EfCoreProjectRepository.cs | 14 +++++++------- .../Docs/Documents/MongoDocumentRepository.cs | 18 +++++++++--------- .../Docs/Projects/MongoProjectRepository.cs | 14 +++++++------- 4 files changed, 30 insertions(+), 30 deletions(-) diff --git a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs index f096bc10d9..75420f5500 100644 --- a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs +++ b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs @@ -21,7 +21,7 @@ namespace Volo.Docs.Documents public async Task> GetListByProjectId(Guid projectId, CancellationToken cancellationToken = default) { - return await DbSet.Where(d => d.ProjectId == projectId).ToListAsync(cancellationToken: cancellationToken); + return await (await GetDbSetAsync()).Where(d => d.ProjectId == projectId).ToListAsync(cancellationToken: cancellationToken); } public async Task> GetAllAsync( @@ -45,7 +45,7 @@ namespace Volo.Docs.Documents CancellationToken cancellationToken = default) { var query = ApplyFilterForGetAll( - DbSet, + await GetDbSetAsync(), projectId: projectId, name: name, version: version, @@ -87,7 +87,7 @@ namespace Volo.Docs.Documents CancellationToken cancellationToken = default) { var query = ApplyFilterForGetAll( - DbSet, + await GetDbSetAsync(), projectId: projectId, name: name, version: version, @@ -111,7 +111,7 @@ namespace Volo.Docs.Documents bool includeDetails = true, CancellationToken cancellationToken = default) { - return await DbSet.IncludeDetails(includeDetails) + return await (await GetDbSetAsync()).IncludeDetails(includeDetails) .FirstOrDefaultAsync(x => x.ProjectId == projectId && x.Name == name && x.LanguageCode == languageCode && x.Version == version, @@ -127,7 +127,7 @@ namespace Volo.Docs.Documents public async Task GetAsync(Guid id, CancellationToken cancellationToken = default) { - return await DbSet.Where(x => x.Id == id).SingleAsync(cancellationToken: cancellationToken); + return await (await GetDbSetAsync()).Where(x => x.Id == id).SingleAsync(cancellationToken: cancellationToken); } protected virtual IQueryable ApplyFilterForGetAll( @@ -148,7 +148,7 @@ namespace Volo.Docs.Documents DateTime? lastCachedTimeMax, CancellationToken cancellationToken = default) { - return DbSet + return query .WhereIf(projectId.HasValue, d => d.ProjectId == projectId.Value) .WhereIf(name != null, @@ -179,4 +179,4 @@ namespace Volo.Docs.Documents d => d.LastCachedTime.Date <= lastCachedTimeMax.Value.Date); } } -} \ No newline at end of file +} diff --git a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Projects/EfCoreProjectRepository.cs b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Projects/EfCoreProjectRepository.cs index 835172e679..bf92a8a795 100644 --- a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Projects/EfCoreProjectRepository.cs +++ b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Projects/EfCoreProjectRepository.cs @@ -20,7 +20,7 @@ namespace Volo.Docs.Projects public async Task> GetListAsync(string sorting, int maxResultCount, int skipCount) { - var projects = await DbSet.OrderBy(sorting ?? "Id desc") + var projects = await (await GetDbSetAsync()).OrderBy(sorting ?? "Id desc") .PageBy(skipCount, maxResultCount) .ToListAsync(); @@ -30,8 +30,8 @@ namespace Volo.Docs.Projects public async Task GetByShortNameAsync(string shortName) { var normalizeShortName = NormalizeShortName(shortName); - - var project = await DbSet.FirstOrDefaultAsync(p => p.ShortName == normalizeShortName); + + var project = await (await GetDbSetAsync()).FirstOrDefaultAsync(p => p.ShortName == normalizeShortName); if (project == null) { @@ -44,13 +44,13 @@ namespace Volo.Docs.Projects public async Task ShortNameExistsAsync(string shortName) { var normalizeShortName = NormalizeShortName(shortName); - - return await DbSet.AnyAsync(x => x.ShortName == normalizeShortName); + + return await (await GetDbSetAsync()).AnyAsync(x => x.ShortName == normalizeShortName); } - + private string NormalizeShortName(string shortName) { return shortName.ToLower(); } } -} \ No newline at end of file +} diff --git a/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs index b3b5210986..d4b0a1c00e 100644 --- a/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs +++ b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs @@ -22,17 +22,17 @@ namespace Volo.Docs.Documents public async Task> GetListByProjectId(Guid projectId, CancellationToken cancellationToken = default) { - return await GetMongoQueryable().Where(d => d.ProjectId == projectId).ToListAsync(cancellationToken); + return await (await GetMongoQueryableAsync(cancellationToken)).Where(d => d.ProjectId == projectId).ToListAsync(cancellationToken); } public async Task FindAsync(Guid projectId, string name, string languageCode, string version, bool includeDetails = true, CancellationToken cancellationToken = default) { - return await GetMongoQueryable().FirstOrDefaultAsync(x => x.ProjectId == projectId && - x.Name == name && - x.LanguageCode == languageCode && - x.Version == version, cancellationToken); + return await (await GetMongoQueryableAsync(cancellationToken)).FirstOrDefaultAsync(x => x.ProjectId == projectId && + x.Name == name && + x.LanguageCode == languageCode && + x.Version == version, cancellationToken); } public async Task DeleteAsync(Guid projectId, string name, string languageCode, string version, @@ -66,7 +66,7 @@ namespace Volo.Docs.Documents return await ApplyFilterForGetAll( - GetMongoQueryable(), + await GetMongoQueryableAsync(cancellationToken), projectId: projectId, name: name, version: version, @@ -110,7 +110,7 @@ namespace Volo.Docs.Documents return await ApplyFilterForGetAll( - GetMongoQueryable(), + await GetMongoQueryableAsync(cancellationToken), projectId: projectId, name: name, version: version, @@ -132,7 +132,7 @@ namespace Volo.Docs.Documents public async Task GetAsync(Guid id, CancellationToken cancellationToken = default) { - return await GetMongoQueryable().Where(x => x.Id == id).SingleAsync(cancellationToken); + return await (await GetMongoQueryableAsync(cancellationToken)).Where(x => x.Id == id).SingleAsync(cancellationToken); } protected virtual IMongoQueryable ApplyFilterForGetAll( @@ -221,4 +221,4 @@ namespace Volo.Docs.Documents return query; } } -} \ No newline at end of file +} diff --git a/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Projects/MongoProjectRepository.cs b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Projects/MongoProjectRepository.cs index f1312b9e5d..91f1af9b2a 100644 --- a/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Projects/MongoProjectRepository.cs +++ b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Projects/MongoProjectRepository.cs @@ -21,7 +21,7 @@ namespace Volo.Docs.Projects public async Task> GetListAsync(string sorting, int maxResultCount, int skipCount) { - var projects = await GetMongoQueryable().OrderBy(sorting ?? "Id desc").As>() + var projects = await (await GetMongoQueryableAsync()).OrderBy(sorting ?? "Id desc").As>() .PageBy>(skipCount, maxResultCount) .ToListAsync(); @@ -31,8 +31,8 @@ namespace Volo.Docs.Projects public async Task GetByShortNameAsync(string shortName) { var normalizeShortName = NormalizeShortName(shortName); - - var project = await GetMongoQueryable().FirstOrDefaultAsync(p => p.ShortName == normalizeShortName); + + var project = await (await GetMongoQueryableAsync()).FirstOrDefaultAsync(p => p.ShortName == normalizeShortName); if (project == null) { @@ -45,13 +45,13 @@ namespace Volo.Docs.Projects public async Task ShortNameExistsAsync(string shortName) { var normalizeShortName = NormalizeShortName(shortName); - - return await GetMongoQueryable().AnyAsync(x => x.ShortName == normalizeShortName); + + return await (await GetMongoQueryableAsync()).AnyAsync(x => x.ShortName == normalizeShortName); } - + private string NormalizeShortName(string shortName) { return shortName.ToLower(); } } -} \ No newline at end of file +} From 197878ae8a1ebc3a46efb60f2c868f2e71a5198f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 4 Jan 2021 10:42:53 +0300 Subject: [PATCH 181/217] Use GetQueryableAsync in RepositoryAsyncExtensions --- .../Abp/Domain/Repositories/RepositoryAsyncExtensions.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryAsyncExtensions.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryAsyncExtensions.cs index f6191a152f..acc1c3a1bd 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryAsyncExtensions.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryAsyncExtensions.cs @@ -12,13 +12,14 @@ namespace Volo.Abp.Domain.Repositories { #region Contains - public static Task ContainsAsync( + public static async Task ContainsAsync( [NotNull] this IReadOnlyRepository repository, [NotNull] T item, CancellationToken cancellationToken = default) where T : class, IEntity { - return repository.AsyncExecuter.ContainsAsync(repository, item, cancellationToken); + var queryable = await repository.GetQueryableAsync(); + return await repository.AsyncExecuter.ContainsAsync(queryable, item, cancellationToken); } #endregion From 6cd2afa7e4ea94ca5d72460929212892d7ccbadc Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Mon, 4 Jan 2021 11:39:21 +0300 Subject: [PATCH 182/217] deprecate SortOrderIconComponent --- .../components/sort-order-icon/sort-order-icon.component.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.ts index 7e5d62fb6a..439989ef73 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.ts @@ -1,5 +1,8 @@ import { Component, EventEmitter, Input, Output } from '@angular/core'; +/** + * @deprecated To be deleted in v5.0. Use ngx-datatale instead. + */ @Component({ selector: 'abp-sort-order-icon', templateUrl: './sort-order-icon.component.html', From 64d575710fd61d82574c1972841f7e2519692903 Mon Sep 17 00:00:00 2001 From: PMExtra Date: Mon, 4 Jan 2021 19:20:51 +0800 Subject: [PATCH 183/217] Fix enum file template with string enum. --- .../proxy/__namespace@dir__/__name@kebab__.enum.ts.template | 2 +- npm/ng-packs/packages/schematics/src/utils/text.ts | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/schematics/src/commands/api/files-enum/proxy/__namespace@dir__/__name@kebab__.enum.ts.template b/npm/ng-packs/packages/schematics/src/commands/api/files-enum/proxy/__namespace@dir__/__name@kebab__.enum.ts.template index 795ec2bbf6..8b4254090d 100644 --- a/npm/ng-packs/packages/schematics/src/commands/api/files-enum/proxy/__namespace@dir__/__name@kebab__.enum.ts.template +++ b/npm/ng-packs/packages/schematics/src/commands/api/files-enum/proxy/__namespace@dir__/__name@kebab__.enum.ts.template @@ -2,7 +2,7 @@ import { mapEnumToOptions } from '@abp/ng.core'; export enum <%= name %> {<% for (let member of members) { %> - <%= member.key %> = <%= member.value %>,<% } %> + <%= member.key %> = <%= quote(member.value) %>,<% } %> } export const <%= camel(name) %>Options = mapEnumToOptions(<%= name %>); diff --git a/npm/ng-packs/packages/schematics/src/utils/text.ts b/npm/ng-packs/packages/schematics/src/utils/text.ts index 379ea78601..e2ceeb1215 100644 --- a/npm/ng-packs/packages/schematics/src/utils/text.ts +++ b/npm/ng-packs/packages/schematics/src/utils/text.ts @@ -10,6 +10,9 @@ export const macro = (text: string) => upper(snake(text)); export const dir = (text: string) => strings.dasherize(text.replace(/\./g, '/').replace(/\/\//g, '/')); +// TODO: Is there a standard function to do this? There is a leak if the value contains single quote. +export const quote = (value: number | string) => typeof value === 'string' ? `'${value}'` : value; + function _(text: string): string { return text.replace(/\./g, '_'); } From b25ddde791023c0beb0840dd0df4ed53ad721548 Mon Sep 17 00:00:00 2001 From: muhammedaltug Date: Mon, 4 Jan 2021 18:13:50 +0300 Subject: [PATCH 184/217] change detection error fix 500ms delay set --- .../src/lib/components/loader-bar/loader-bar.component.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts index 1700efafe2..bf08790184 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts @@ -77,7 +77,9 @@ export class LoaderBarComponent implements OnDestroy, OnInit { private subscription: SubscriptionService, private httpWaitService: HttpWaitService, private routerWaiterService: RouterWaitService, - ) {} + ) { + this.httpWaitService.setDelay(500); + } ngOnInit() { this.subscribeLoading(); @@ -102,6 +104,7 @@ export class LoaderBarComponent implements OnDestroy, OnInit { this.isLoading = true; this.progressLevel = 0; + this.cdRef.detectChanges(); this.interval = timer(0, this.intervalPeriod).subscribe(this.reportProgress); this.timer.unsubscribe(); } From cc996ae35681bd268dce1284aada31a3ce22bfde Mon Sep 17 00:00:00 2001 From: Ilkay Ilknur Date: Mon, 4 Jan 2021 22:21:47 +0300 Subject: [PATCH 185/217] exclude main.css from bundle. --- .../MyProjectNameBundleContributor.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBundleContributor.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBundleContributor.cs index c4a948493f..e7a231c2fc 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBundleContributor.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBundleContributor.cs @@ -6,12 +6,11 @@ namespace MyCompanyName.MyProjectName.Blazor { public void AddScripts(BundleContext context) { - } public void AddStyles(BundleContext context) { - context.Add("main.css"); + context.Add("main.css", true); } } -} +} \ No newline at end of file From 68db91617eb0ed54379bfb928aea670ea84b1d7e Mon Sep 17 00:00:00 2001 From: Ilkay Ilknur Date: Mon, 4 Jan 2021 22:24:02 +0300 Subject: [PATCH 186/217] bundle external resources. --- .../wwwroot/global.css | 17 + .../wwwroot/global.js | 791 ++++++++++++++++++ .../wwwroot/index.html | 14 +- 3 files changed, 810 insertions(+), 12 deletions(-) create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/global.css create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/global.js diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/global.css b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/global.css new file mode 100644 index 0000000000..910b08b725 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/global.css @@ -0,0 +1,17 @@ +/*! + * Bootstrap v4.5.0 (https://getbootstrap.com/) + * Copyright 2011-2020 The Bootstrap Authors + * Copyright 2011-2020 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]){color:inherit;text-decoration:none}a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;min-width:0;max-width:100%}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;min-width:0;max-width:100%}.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;min-width:0;max-width:100%}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;min-width:0;max-width:100%}.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;min-width:0;max-width:100%}.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img,.card-img-bottom,.card-img-top{-ms-flex-negative:0;flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item{display:-ms-flexbox;display:flex}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;line-height:0;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;-ms-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} +/*# sourceMappingURL=bootstrap.min.css.map */ +/*! + * Font Awesome Free 5.12.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:""}.fa-accessible-icon:before{content:""}.fa-accusoft:before{content:""}.fa-acquisitions-incorporated:before{content:""}.fa-ad:before{content:""}.fa-address-book:before{content:""}.fa-address-card:before{content:""}.fa-adjust:before{content:""}.fa-adn:before{content:""}.fa-adobe:before{content:""}.fa-adversal:before{content:""}.fa-affiliatetheme:before{content:""}.fa-air-freshener:before{content:""}.fa-airbnb:before{content:""}.fa-algolia:before{content:""}.fa-align-center:before{content:""}.fa-align-justify:before{content:""}.fa-align-left:before{content:""}.fa-align-right:before{content:""}.fa-alipay:before{content:""}.fa-allergies:before{content:""}.fa-amazon:before{content:""}.fa-amazon-pay:before{content:""}.fa-ambulance:before{content:""}.fa-american-sign-language-interpreting:before{content:""}.fa-amilia:before{content:""}.fa-anchor:before{content:""}.fa-android:before{content:""}.fa-angellist:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angry:before{content:""}.fa-angrycreative:before{content:""}.fa-angular:before{content:""}.fa-ankh:before{content:""}.fa-app-store:before{content:""}.fa-app-store-ios:before{content:""}.fa-apper:before{content:""}.fa-apple:before{content:""}.fa-apple-alt:before{content:""}.fa-apple-pay:before{content:""}.fa-archive:before{content:""}.fa-archway:before{content:""}.fa-arrow-alt-circle-down:before{content:""}.fa-arrow-alt-circle-left:before{content:""}.fa-arrow-alt-circle-right:before{content:""}.fa-arrow-alt-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-down:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrows-alt:before{content:""}.fa-arrows-alt-h:before{content:""}.fa-arrows-alt-v:before{content:""}.fa-artstation:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-asterisk:before{content:""}.fa-asymmetrik:before{content:""}.fa-at:before{content:""}.fa-atlas:before{content:""}.fa-atlassian:before{content:""}.fa-atom:before{content:""}.fa-audible:before{content:""}.fa-audio-description:before{content:""}.fa-autoprefixer:before{content:""}.fa-avianex:before{content:""}.fa-aviato:before{content:""}.fa-award:before{content:""}.fa-aws:before{content:""}.fa-baby:before{content:""}.fa-baby-carriage:before{content:""}.fa-backspace:before{content:""}.fa-backward:before{content:""}.fa-bacon:before{content:""}.fa-bahai:before{content:""}.fa-balance-scale:before{content:""}.fa-balance-scale-left:before{content:""}.fa-balance-scale-right:before{content:""}.fa-ban:before{content:""}.fa-band-aid:before{content:""}.fa-bandcamp:before{content:""}.fa-barcode:before{content:""}.fa-bars:before{content:""}.fa-baseball-ball:before{content:""}.fa-basketball-ball:before{content:""}.fa-bath:before{content:""}.fa-battery-empty:before{content:""}.fa-battery-full:before{content:""}.fa-battery-half:before{content:""}.fa-battery-quarter:before{content:""}.fa-battery-three-quarters:before{content:""}.fa-battle-net:before{content:""}.fa-bed:before{content:""}.fa-beer:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-bell:before{content:""}.fa-bell-slash:before{content:""}.fa-bezier-curve:before{content:""}.fa-bible:before{content:""}.fa-bicycle:before{content:""}.fa-biking:before{content:""}.fa-bimobject:before{content:""}.fa-binoculars:before{content:""}.fa-biohazard:before{content:""}.fa-birthday-cake:before{content:""}.fa-bitbucket:before{content:""}.fa-bitcoin:before{content:""}.fa-bity:before{content:""}.fa-black-tie:before{content:""}.fa-blackberry:before{content:""}.fa-blender:before{content:""}.fa-blender-phone:before{content:""}.fa-blind:before{content:""}.fa-blog:before{content:""}.fa-blogger:before{content:""}.fa-blogger-b:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-bold:before{content:""}.fa-bolt:before{content:""}.fa-bomb:before{content:""}.fa-bone:before{content:""}.fa-bong:before{content:""}.fa-book:before{content:""}.fa-book-dead:before{content:""}.fa-book-medical:before{content:""}.fa-book-open:before{content:""}.fa-book-reader:before{content:""}.fa-bookmark:before{content:""}.fa-bootstrap:before{content:""}.fa-border-all:before{content:""}.fa-border-none:before{content:""}.fa-border-style:before{content:""}.fa-bowling-ball:before{content:""}.fa-box:before{content:""}.fa-box-open:before{content:""}.fa-boxes:before{content:""}.fa-braille:before{content:""}.fa-brain:before{content:""}.fa-bread-slice:before{content:""}.fa-briefcase:before{content:""}.fa-briefcase-medical:before{content:""}.fa-broadcast-tower:before{content:""}.fa-broom:before{content:""}.fa-brush:before{content:""}.fa-btc:before{content:""}.fa-buffer:before{content:""}.fa-bug:before{content:""}.fa-building:before{content:""}.fa-bullhorn:before{content:""}.fa-bullseye:before{content:""}.fa-burn:before{content:""}.fa-buromobelexperte:before{content:""}.fa-bus:before{content:""}.fa-bus-alt:before{content:""}.fa-business-time:before{content:""}.fa-buy-n-large:before{content:""}.fa-buysellads:before{content:""}.fa-calculator:before{content:""}.fa-calendar:before{content:""}.fa-calendar-alt:before{content:""}.fa-calendar-check:before{content:""}.fa-calendar-day:before{content:""}.fa-calendar-minus:before{content:""}.fa-calendar-plus:before{content:""}.fa-calendar-times:before{content:""}.fa-calendar-week:before{content:""}.fa-camera:before{content:""}.fa-camera-retro:before{content:""}.fa-campground:before{content:""}.fa-canadian-maple-leaf:before{content:""}.fa-candy-cane:before{content:""}.fa-cannabis:before{content:""}.fa-capsules:before{content:""}.fa-car:before{content:""}.fa-car-alt:before{content:""}.fa-car-battery:before{content:""}.fa-car-crash:before{content:""}.fa-car-side:before{content:""}.fa-caravan:before{content:""}.fa-caret-down:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-caret-square-down:before{content:""}.fa-caret-square-left:before{content:""}.fa-caret-square-right:before{content:""}.fa-caret-square-up:before{content:""}.fa-caret-up:before{content:""}.fa-carrot:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-cart-plus:before{content:""}.fa-cash-register:before{content:""}.fa-cat:before{content:""}.fa-cc-amazon-pay:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-apple-pay:before{content:""}.fa-cc-diners-club:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-cc-visa:before{content:""}.fa-centercode:before{content:""}.fa-centos:before{content:""}.fa-certificate:before{content:""}.fa-chair:before{content:""}.fa-chalkboard:before{content:""}.fa-chalkboard-teacher:before{content:""}.fa-charging-station:before{content:""}.fa-chart-area:before{content:""}.fa-chart-bar:before{content:""}.fa-chart-line:before{content:""}.fa-chart-pie:before{content:""}.fa-check:before{content:""}.fa-check-circle:before{content:""}.fa-check-double:before{content:""}.fa-check-square:before{content:""}.fa-cheese:before{content:""}.fa-chess:before{content:""}.fa-chess-bishop:before{content:""}.fa-chess-board:before{content:""}.fa-chess-king:before{content:""}.fa-chess-knight:before{content:""}.fa-chess-pawn:before{content:""}.fa-chess-queen:before{content:""}.fa-chess-rook:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-down:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-chevron-up:before{content:""}.fa-child:before{content:""}.fa-chrome:before{content:""}.fa-chromecast:before{content:""}.fa-church:before{content:""}.fa-circle:before{content:""}.fa-circle-notch:before{content:""}.fa-city:before{content:""}.fa-clinic-medical:before{content:""}.fa-clipboard:before{content:""}.fa-clipboard-check:before{content:""}.fa-clipboard-list:before{content:""}.fa-clock:before{content:""}.fa-clone:before{content:""}.fa-closed-captioning:before{content:""}.fa-cloud:before{content:""}.fa-cloud-download-alt:before{content:""}.fa-cloud-meatball:before{content:""}.fa-cloud-moon:before{content:""}.fa-cloud-moon-rain:before{content:""}.fa-cloud-rain:before{content:""}.fa-cloud-showers-heavy:before{content:""}.fa-cloud-sun:before{content:""}.fa-cloud-sun-rain:before{content:""}.fa-cloud-upload-alt:before{content:""}.fa-cloudscale:before{content:""}.fa-cloudsmith:before{content:""}.fa-cloudversify:before{content:""}.fa-cocktail:before{content:""}.fa-code:before{content:""}.fa-code-branch:before{content:""}.fa-codepen:before{content:""}.fa-codiepie:before{content:""}.fa-coffee:before{content:""}.fa-cog:before{content:""}.fa-cogs:before{content:""}.fa-coins:before{content:""}.fa-columns:before{content:""}.fa-comment:before{content:""}.fa-comment-alt:before{content:""}.fa-comment-dollar:before{content:""}.fa-comment-dots:before{content:""}.fa-comment-medical:before{content:""}.fa-comment-slash:before{content:""}.fa-comments:before{content:""}.fa-comments-dollar:before{content:""}.fa-compact-disc:before{content:""}.fa-compass:before{content:""}.fa-compress:before{content:""}.fa-compress-alt:before{content:""}.fa-compress-arrows-alt:before{content:""}.fa-concierge-bell:before{content:""}.fa-confluence:before{content:""}.fa-connectdevelop:before{content:""}.fa-contao:before{content:""}.fa-cookie:before{content:""}.fa-cookie-bite:before{content:""}.fa-copy:before{content:""}.fa-copyright:before{content:""}.fa-cotton-bureau:before{content:""}.fa-couch:before{content:""}.fa-cpanel:before{content:""}.fa-creative-commons:before{content:""}.fa-creative-commons-by:before{content:""}.fa-creative-commons-nc:before{content:""}.fa-creative-commons-nc-eu:before{content:""}.fa-creative-commons-nc-jp:before{content:""}.fa-creative-commons-nd:before{content:""}.fa-creative-commons-pd:before{content:""}.fa-creative-commons-pd-alt:before{content:""}.fa-creative-commons-remix:before{content:""}.fa-creative-commons-sa:before{content:""}.fa-creative-commons-sampling:before{content:""}.fa-creative-commons-sampling-plus:before{content:""}.fa-creative-commons-share:before{content:""}.fa-creative-commons-zero:before{content:""}.fa-credit-card:before{content:""}.fa-critical-role:before{content:""}.fa-crop:before{content:""}.fa-crop-alt:before{content:""}.fa-cross:before{content:""}.fa-crosshairs:before{content:""}.fa-crow:before{content:""}.fa-crown:before{content:""}.fa-crutch:before{content:""}.fa-css3:before{content:""}.fa-css3-alt:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-cut:before{content:""}.fa-cuttlefish:before{content:""}.fa-d-and-d:before{content:""}.fa-d-and-d-beyond:before{content:""}.fa-dashcube:before{content:""}.fa-database:before{content:""}.fa-deaf:before{content:""}.fa-delicious:before{content:""}.fa-democrat:before{content:""}.fa-deploydog:before{content:""}.fa-deskpro:before{content:""}.fa-desktop:before{content:""}.fa-dev:before{content:""}.fa-deviantart:before{content:""}.fa-dharmachakra:before{content:""}.fa-dhl:before{content:""}.fa-diagnoses:before{content:""}.fa-diaspora:before{content:""}.fa-dice:before{content:""}.fa-dice-d20:before{content:""}.fa-dice-d6:before{content:""}.fa-dice-five:before{content:""}.fa-dice-four:before{content:""}.fa-dice-one:before{content:""}.fa-dice-six:before{content:""}.fa-dice-three:before{content:""}.fa-dice-two:before{content:""}.fa-digg:before{content:""}.fa-digital-ocean:before{content:""}.fa-digital-tachograph:before{content:""}.fa-directions:before{content:""}.fa-discord:before{content:""}.fa-discourse:before{content:""}.fa-divide:before{content:""}.fa-dizzy:before{content:""}.fa-dna:before{content:""}.fa-dochub:before{content:""}.fa-docker:before{content:""}.fa-dog:before{content:""}.fa-dollar-sign:before{content:""}.fa-dolly:before{content:""}.fa-dolly-flatbed:before{content:""}.fa-donate:before{content:""}.fa-door-closed:before{content:""}.fa-door-open:before{content:""}.fa-dot-circle:before{content:""}.fa-dove:before{content:""}.fa-download:before{content:""}.fa-draft2digital:before{content:""}.fa-drafting-compass:before{content:""}.fa-dragon:before{content:""}.fa-draw-polygon:before{content:""}.fa-dribbble:before{content:""}.fa-dribbble-square:before{content:""}.fa-dropbox:before{content:""}.fa-drum:before{content:""}.fa-drum-steelpan:before{content:""}.fa-drumstick-bite:before{content:""}.fa-drupal:before{content:""}.fa-dumbbell:before{content:""}.fa-dumpster:before{content:""}.fa-dumpster-fire:before{content:""}.fa-dungeon:before{content:""}.fa-dyalog:before{content:""}.fa-earlybirds:before{content:""}.fa-ebay:before{content:""}.fa-edge:before{content:""}.fa-edit:before{content:""}.fa-egg:before{content:""}.fa-eject:before{content:""}.fa-elementor:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-ello:before{content:""}.fa-ember:before{content:""}.fa-empire:before{content:""}.fa-envelope:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-text:before{content:""}.fa-envelope-square:before{content:""}.fa-envira:before{content:""}.fa-equals:before{content:""}.fa-eraser:before{content:""}.fa-erlang:before{content:""}.fa-ethereum:before{content:""}.fa-ethernet:before{content:""}.fa-etsy:before{content:""}.fa-euro-sign:before{content:""}.fa-evernote:before{content:""}.fa-exchange-alt:before{content:""}.fa-exclamation:before{content:""}.fa-exclamation-circle:before{content:""}.fa-exclamation-triangle:before{content:""}.fa-expand:before{content:""}.fa-expand-alt:before{content:""}.fa-expand-arrows-alt:before{content:""}.fa-expeditedssl:before{content:""}.fa-external-link-alt:before{content:""}.fa-external-link-square-alt:before{content:""}.fa-eye:before{content:""}.fa-eye-dropper:before{content:""}.fa-eye-slash:before{content:""}.fa-facebook:before{content:""}.fa-facebook-f:before{content:""}.fa-facebook-messenger:before{content:""}.fa-facebook-square:before{content:""}.fa-fan:before{content:""}.fa-fantasy-flight-games:before{content:""}.fa-fast-backward:before{content:""}.fa-fast-forward:before{content:""}.fa-fax:before{content:""}.fa-feather:before{content:""}.fa-feather-alt:before{content:""}.fa-fedex:before{content:""}.fa-fedora:before{content:""}.fa-female:before{content:""}.fa-fighter-jet:before{content:""}.fa-figma:before{content:""}.fa-file:before{content:""}.fa-file-alt:before{content:""}.fa-file-archive:before{content:""}.fa-file-audio:before{content:""}.fa-file-code:before{content:""}.fa-file-contract:before{content:""}.fa-file-csv:before{content:""}.fa-file-download:before{content:""}.fa-file-excel:before{content:""}.fa-file-export:before{content:""}.fa-file-image:before{content:""}.fa-file-import:before{content:""}.fa-file-invoice:before{content:""}.fa-file-invoice-dollar:before{content:""}.fa-file-medical:before{content:""}.fa-file-medical-alt:before{content:""}.fa-file-pdf:before{content:""}.fa-file-powerpoint:before{content:""}.fa-file-prescription:before{content:""}.fa-file-signature:before{content:""}.fa-file-upload:before{content:""}.fa-file-video:before{content:""}.fa-file-word:before{content:""}.fa-fill:before{content:""}.fa-fill-drip:before{content:""}.fa-film:before{content:""}.fa-filter:before{content:""}.fa-fingerprint:before{content:""}.fa-fire:before{content:""}.fa-fire-alt:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-firefox:before{content:""}.fa-firefox-browser:before{content:"龜"}.fa-first-aid:before{content:""}.fa-first-order:before{content:""}.fa-first-order-alt:before{content:""}.fa-firstdraft:before{content:""}.fa-fish:before{content:""}.fa-fist-raised:before{content:""}.fa-flag:before{content:""}.fa-flag-checkered:before{content:""}.fa-flag-usa:before{content:""}.fa-flask:before{content:""}.fa-flickr:before{content:""}.fa-flipboard:before{content:""}.fa-flushed:before{content:""}.fa-fly:before{content:""}.fa-folder:before{content:""}.fa-folder-minus:before{content:""}.fa-folder-open:before{content:""}.fa-folder-plus:before{content:""}.fa-font:before{content:""}.fa-font-awesome:before{content:""}.fa-font-awesome-alt:before{content:""}.fa-font-awesome-flag:before{content:""}.fa-font-awesome-logo-full:before{content:""}.fa-fonticons:before{content:""}.fa-fonticons-fi:before{content:""}.fa-football-ball:before{content:""}.fa-fort-awesome:before{content:""}.fa-fort-awesome-alt:before{content:""}.fa-forumbee:before{content:""}.fa-forward:before{content:""}.fa-foursquare:before{content:""}.fa-free-code-camp:before{content:""}.fa-freebsd:before{content:""}.fa-frog:before{content:""}.fa-frown:before{content:""}.fa-frown-open:before{content:""}.fa-fulcrum:before{content:""}.fa-funnel-dollar:before{content:""}.fa-futbol:before{content:""}.fa-galactic-republic:before{content:""}.fa-galactic-senate:before{content:""}.fa-gamepad:before{content:""}.fa-gas-pump:before{content:""}.fa-gavel:before{content:""}.fa-gem:before{content:""}.fa-genderless:before{content:""}.fa-get-pocket:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-ghost:before{content:""}.fa-gift:before{content:""}.fa-gifts:before{content:""}.fa-git:before{content:""}.fa-git-alt:before{content:""}.fa-git-square:before{content:""}.fa-github:before{content:""}.fa-github-alt:before{content:""}.fa-github-square:before{content:""}.fa-gitkraken:before{content:""}.fa-gitlab:before{content:""}.fa-gitter:before{content:""}.fa-glass-cheers:before{content:""}.fa-glass-martini:before{content:""}.fa-glass-martini-alt:before{content:""}.fa-glass-whiskey:before{content:""}.fa-glasses:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-globe:before{content:""}.fa-globe-africa:before{content:""}.fa-globe-americas:before{content:""}.fa-globe-asia:before{content:""}.fa-globe-europe:before{content:""}.fa-gofore:before{content:""}.fa-golf-ball:before{content:""}.fa-goodreads:before{content:""}.fa-goodreads-g:before{content:""}.fa-google:before{content:""}.fa-google-drive:before{content:""}.fa-google-play:before{content:""}.fa-google-plus:before{content:""}.fa-google-plus-g:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-wallet:before{content:""}.fa-gopuram:before{content:""}.fa-graduation-cap:before{content:""}.fa-gratipay:before{content:""}.fa-grav:before{content:""}.fa-greater-than:before{content:""}.fa-greater-than-equal:before{content:""}.fa-grimace:before{content:""}.fa-grin:before{content:""}.fa-grin-alt:before{content:""}.fa-grin-beam:before{content:""}.fa-grin-beam-sweat:before{content:""}.fa-grin-hearts:before{content:""}.fa-grin-squint:before{content:""}.fa-grin-squint-tears:before{content:""}.fa-grin-stars:before{content:""}.fa-grin-tears:before{content:""}.fa-grin-tongue:before{content:""}.fa-grin-tongue-squint:before{content:""}.fa-grin-tongue-wink:before{content:""}.fa-grin-wink:before{content:""}.fa-grip-horizontal:before{content:""}.fa-grip-lines:before{content:""}.fa-grip-lines-vertical:before{content:""}.fa-grip-vertical:before{content:""}.fa-gripfire:before{content:""}.fa-grunt:before{content:""}.fa-guitar:before{content:""}.fa-gulp:before{content:""}.fa-h-square:before{content:""}.fa-hacker-news:before{content:""}.fa-hacker-news-square:before{content:""}.fa-hackerrank:before{content:""}.fa-hamburger:before{content:""}.fa-hammer:before{content:""}.fa-hamsa:before{content:""}.fa-hand-holding:before{content:""}.fa-hand-holding-heart:before{content:""}.fa-hand-holding-usd:before{content:""}.fa-hand-lizard:before{content:""}.fa-hand-middle-finger:before{content:""}.fa-hand-paper:before{content:""}.fa-hand-peace:before{content:""}.fa-hand-point-down:before{content:""}.fa-hand-point-left:before{content:""}.fa-hand-point-right:before{content:""}.fa-hand-point-up:before{content:""}.fa-hand-pointer:before{content:""}.fa-hand-rock:before{content:""}.fa-hand-scissors:before{content:""}.fa-hand-spock:before{content:""}.fa-hands:before{content:""}.fa-hands-helping:before{content:""}.fa-handshake:before{content:""}.fa-hanukiah:before{content:""}.fa-hard-hat:before{content:""}.fa-hashtag:before{content:""}.fa-hat-cowboy:before{content:""}.fa-hat-cowboy-side:before{content:""}.fa-hat-wizard:before{content:""}.fa-hdd:before{content:""}.fa-heading:before{content:""}.fa-headphones:before{content:""}.fa-headphones-alt:before{content:""}.fa-headset:before{content:""}.fa-heart:before{content:""}.fa-heart-broken:before{content:""}.fa-heartbeat:before{content:""}.fa-helicopter:before{content:""}.fa-highlighter:before{content:""}.fa-hiking:before{content:""}.fa-hippo:before{content:""}.fa-hips:before{content:""}.fa-hire-a-helper:before{content:""}.fa-history:before{content:""}.fa-hockey-puck:before{content:""}.fa-holly-berry:before{content:""}.fa-home:before{content:""}.fa-hooli:before{content:""}.fa-hornbill:before{content:""}.fa-horse:before{content:""}.fa-horse-head:before{content:""}.fa-hospital:before{content:""}.fa-hospital-alt:before{content:""}.fa-hospital-symbol:before{content:""}.fa-hot-tub:before{content:""}.fa-hotdog:before{content:""}.fa-hotel:before{content:""}.fa-hotjar:before{content:""}.fa-hourglass:before{content:""}.fa-hourglass-end:before{content:""}.fa-hourglass-half:before{content:""}.fa-hourglass-start:before{content:""}.fa-house-damage:before{content:""}.fa-houzz:before{content:""}.fa-hryvnia:before{content:""}.fa-html5:before{content:""}.fa-hubspot:before{content:""}.fa-i-cursor:before{content:""}.fa-ice-cream:before{content:""}.fa-icicles:before{content:""}.fa-icons:before{content:""}.fa-id-badge:before{content:""}.fa-id-card:before{content:""}.fa-id-card-alt:before{content:""}.fa-ideal:before{content:"邏"}.fa-igloo:before{content:""}.fa-image:before{content:""}.fa-images:before{content:""}.fa-imdb:before{content:""}.fa-inbox:before{content:""}.fa-indent:before{content:""}.fa-industry:before{content:""}.fa-infinity:before{content:""}.fa-info:before{content:""}.fa-info-circle:before{content:""}.fa-instagram:before{content:""}.fa-intercom:before{content:""}.fa-internet-explorer:before{content:""}.fa-invision:before{content:""}.fa-ioxhost:before{content:""}.fa-italic:before{content:""}.fa-itch-io:before{content:""}.fa-itunes:before{content:""}.fa-itunes-note:before{content:""}.fa-java:before{content:""}.fa-jedi:before{content:""}.fa-jedi-order:before{content:""}.fa-jenkins:before{content:""}.fa-jira:before{content:""}.fa-joget:before{content:""}.fa-joint:before{content:""}.fa-joomla:before{content:""}.fa-journal-whills:before{content:""}.fa-js:before{content:""}.fa-js-square:before{content:""}.fa-jsfiddle:before{content:""}.fa-kaaba:before{content:""}.fa-kaggle:before{content:""}.fa-key:before{content:""}.fa-keybase:before{content:""}.fa-keyboard:before{content:""}.fa-keycdn:before{content:""}.fa-khanda:before{content:""}.fa-kickstarter:before{content:""}.fa-kickstarter-k:before{content:""}.fa-kiss:before{content:""}.fa-kiss-beam:before{content:""}.fa-kiss-wink-heart:before{content:""}.fa-kiwi-bird:before{content:""}.fa-korvue:before{content:""}.fa-landmark:before{content:""}.fa-language:before{content:""}.fa-laptop:before{content:""}.fa-laptop-code:before{content:""}.fa-laptop-medical:before{content:""}.fa-laravel:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-laugh:before{content:""}.fa-laugh-beam:before{content:""}.fa-laugh-squint:before{content:""}.fa-laugh-wink:before{content:""}.fa-layer-group:before{content:""}.fa-leaf:before{content:""}.fa-leanpub:before{content:""}.fa-lemon:before{content:""}.fa-less:before{content:""}.fa-less-than:before{content:""}.fa-less-than-equal:before{content:""}.fa-level-down-alt:before{content:""}.fa-level-up-alt:before{content:""}.fa-life-ring:before{content:""}.fa-lightbulb:before{content:""}.fa-line:before{content:""}.fa-link:before{content:""}.fa-linkedin:before{content:""}.fa-linkedin-in:before{content:""}.fa-linode:before{content:""}.fa-linux:before{content:""}.fa-lira-sign:before{content:""}.fa-list:before{content:""}.fa-list-alt:before{content:""}.fa-list-ol:before{content:""}.fa-list-ul:before{content:""}.fa-location-arrow:before{content:""}.fa-lock:before{content:""}.fa-lock-open:before{content:""}.fa-long-arrow-alt-down:before{content:""}.fa-long-arrow-alt-left:before{content:""}.fa-long-arrow-alt-right:before{content:""}.fa-long-arrow-alt-up:before{content:""}.fa-low-vision:before{content:""}.fa-luggage-cart:before{content:""}.fa-lyft:before{content:""}.fa-magento:before{content:""}.fa-magic:before{content:""}.fa-magnet:before{content:""}.fa-mail-bulk:before{content:""}.fa-mailchimp:before{content:""}.fa-male:before{content:""}.fa-mandalorian:before{content:""}.fa-map:before{content:""}.fa-map-marked:before{content:""}.fa-map-marked-alt:before{content:""}.fa-map-marker:before{content:""}.fa-map-marker-alt:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-markdown:before{content:""}.fa-marker:before{content:""}.fa-mars:before{content:""}.fa-mars-double:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mask:before{content:""}.fa-mastodon:before{content:""}.fa-maxcdn:before{content:""}.fa-mdb:before{content:""}.fa-medal:before{content:""}.fa-medapps:before{content:""}.fa-medium:before{content:""}.fa-medium-m:before{content:""}.fa-medkit:before{content:""}.fa-medrt:before{content:""}.fa-meetup:before{content:""}.fa-megaport:before{content:""}.fa-meh:before{content:""}.fa-meh-blank:before{content:""}.fa-meh-rolling-eyes:before{content:""}.fa-memory:before{content:""}.fa-mendeley:before{content:""}.fa-menorah:before{content:""}.fa-mercury:before{content:""}.fa-meteor:before{content:""}.fa-microblog:before{content:"駱"}.fa-microchip:before{content:""}.fa-microphone:before{content:""}.fa-microphone-alt:before{content:""}.fa-microphone-alt-slash:before{content:""}.fa-microphone-slash:before{content:""}.fa-microscope:before{content:""}.fa-microsoft:before{content:""}.fa-minus:before{content:""}.fa-minus-circle:before{content:""}.fa-minus-square:before{content:""}.fa-mitten:before{content:""}.fa-mix:before{content:""}.fa-mixcloud:before{content:""}.fa-mizuni:before{content:""}.fa-mobile:before{content:""}.fa-mobile-alt:before{content:""}.fa-modx:before{content:""}.fa-monero:before{content:""}.fa-money-bill:before{content:""}.fa-money-bill-alt:before{content:""}.fa-money-bill-wave:before{content:""}.fa-money-bill-wave-alt:before{content:""}.fa-money-check:before{content:""}.fa-money-check-alt:before{content:""}.fa-monument:before{content:""}.fa-moon:before{content:""}.fa-mortar-pestle:before{content:""}.fa-mosque:before{content:""}.fa-motorcycle:before{content:""}.fa-mountain:before{content:""}.fa-mouse:before{content:""}.fa-mouse-pointer:before{content:""}.fa-mug-hot:before{content:""}.fa-music:before{content:""}.fa-napster:before{content:""}.fa-neos:before{content:""}.fa-network-wired:before{content:""}.fa-neuter:before{content:""}.fa-newspaper:before{content:""}.fa-nimblr:before{content:""}.fa-node:before{content:""}.fa-node-js:before{content:""}.fa-not-equal:before{content:""}.fa-notes-medical:before{content:""}.fa-npm:before{content:""}.fa-ns8:before{content:""}.fa-nutritionix:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-oil-can:before{content:""}.fa-old-republic:before{content:""}.fa-om:before{content:""}.fa-opencart:before{content:""}.fa-openid:before{content:""}.fa-opera:before{content:""}.fa-optin-monster:before{content:""}.fa-orcid:before{content:""}.fa-osi:before{content:""}.fa-otter:before{content:""}.fa-outdent:before{content:""}.fa-page4:before{content:""}.fa-pagelines:before{content:""}.fa-pager:before{content:""}.fa-paint-brush:before{content:""}.fa-paint-roller:before{content:""}.fa-palette:before{content:""}.fa-palfed:before{content:""}.fa-pallet:before{content:""}.fa-paper-plane:before{content:""}.fa-paperclip:before{content:""}.fa-parachute-box:before{content:""}.fa-paragraph:before{content:""}.fa-parking:before{content:""}.fa-passport:before{content:""}.fa-pastafarianism:before{content:""}.fa-paste:before{content:""}.fa-patreon:before{content:""}.fa-pause:before{content:""}.fa-pause-circle:before{content:""}.fa-paw:before{content:""}.fa-paypal:before{content:""}.fa-peace:before{content:""}.fa-pen:before{content:""}.fa-pen-alt:before{content:""}.fa-pen-fancy:before{content:""}.fa-pen-nib:before{content:""}.fa-pen-square:before{content:""}.fa-pencil-alt:before{content:""}.fa-pencil-ruler:before{content:""}.fa-penny-arcade:before{content:""}.fa-people-carry:before{content:""}.fa-pepper-hot:before{content:""}.fa-percent:before{content:""}.fa-percentage:before{content:""}.fa-periscope:before{content:""}.fa-person-booth:before{content:""}.fa-phabricator:before{content:""}.fa-phoenix-framework:before{content:""}.fa-phoenix-squadron:before{content:""}.fa-phone:before{content:""}.fa-phone-alt:before{content:""}.fa-phone-slash:before{content:""}.fa-phone-square:before{content:""}.fa-phone-square-alt:before{content:""}.fa-phone-volume:before{content:""}.fa-photo-video:before{content:""}.fa-php:before{content:""}.fa-pied-piper:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-pied-piper-hat:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-square:before{content:"爛"}.fa-piggy-bank:before{content:""}.fa-pills:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-p:before{content:""}.fa-pinterest-square:before{content:""}.fa-pizza-slice:before{content:""}.fa-place-of-worship:before{content:""}.fa-plane:before{content:""}.fa-plane-arrival:before{content:""}.fa-plane-departure:before{content:""}.fa-play:before{content:""}.fa-play-circle:before{content:""}.fa-playstation:before{content:""}.fa-plug:before{content:""}.fa-plus:before{content:""}.fa-plus-circle:before{content:""}.fa-plus-square:before{content:""}.fa-podcast:before{content:""}.fa-poll:before{content:""}.fa-poll-h:before{content:""}.fa-poo:before{content:""}.fa-poo-storm:before{content:""}.fa-poop:before{content:""}.fa-portrait:before{content:""}.fa-pound-sign:before{content:""}.fa-power-off:before{content:""}.fa-pray:before{content:""}.fa-praying-hands:before{content:""}.fa-prescription:before{content:""}.fa-prescription-bottle:before{content:""}.fa-prescription-bottle-alt:before{content:""}.fa-print:before{content:""}.fa-procedures:before{content:""}.fa-product-hunt:before{content:""}.fa-project-diagram:before{content:""}.fa-pushed:before{content:""}.fa-puzzle-piece:before{content:""}.fa-python:before{content:""}.fa-qq:before{content:""}.fa-qrcode:before{content:""}.fa-question:before{content:""}.fa-question-circle:before{content:""}.fa-quidditch:before{content:""}.fa-quinscape:before{content:""}.fa-quora:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-quran:before{content:""}.fa-r-project:before{content:""}.fa-radiation:before{content:""}.fa-radiation-alt:before{content:""}.fa-rainbow:before{content:""}.fa-random:before{content:""}.fa-raspberry-pi:before{content:""}.fa-ravelry:before{content:""}.fa-react:before{content:""}.fa-reacteurope:before{content:""}.fa-readme:before{content:""}.fa-rebel:before{content:""}.fa-receipt:before{content:""}.fa-record-vinyl:before{content:""}.fa-recycle:before{content:""}.fa-red-river:before{content:""}.fa-reddit:before{content:""}.fa-reddit-alien:before{content:""}.fa-reddit-square:before{content:""}.fa-redhat:before{content:""}.fa-redo:before{content:""}.fa-redo-alt:before{content:""}.fa-registered:before{content:""}.fa-remove-format:before{content:""}.fa-renren:before{content:""}.fa-reply:before{content:""}.fa-reply-all:before{content:""}.fa-replyd:before{content:""}.fa-republican:before{content:""}.fa-researchgate:before{content:""}.fa-resolving:before{content:""}.fa-restroom:before{content:""}.fa-retweet:before{content:""}.fa-rev:before{content:""}.fa-ribbon:before{content:""}.fa-ring:before{content:""}.fa-road:before{content:""}.fa-robot:before{content:""}.fa-rocket:before{content:""}.fa-rocketchat:before{content:""}.fa-rockrms:before{content:""}.fa-route:before{content:""}.fa-rss:before{content:""}.fa-rss-square:before{content:""}.fa-ruble-sign:before{content:""}.fa-ruler:before{content:""}.fa-ruler-combined:before{content:""}.fa-ruler-horizontal:before{content:""}.fa-ruler-vertical:before{content:""}.fa-running:before{content:""}.fa-rupee-sign:before{content:""}.fa-sad-cry:before{content:""}.fa-sad-tear:before{content:""}.fa-safari:before{content:""}.fa-salesforce:before{content:""}.fa-sass:before{content:""}.fa-satellite:before{content:""}.fa-satellite-dish:before{content:""}.fa-save:before{content:""}.fa-schlix:before{content:""}.fa-school:before{content:""}.fa-screwdriver:before{content:""}.fa-scribd:before{content:""}.fa-scroll:before{content:""}.fa-sd-card:before{content:""}.fa-search:before{content:""}.fa-search-dollar:before{content:""}.fa-search-location:before{content:""}.fa-search-minus:before{content:""}.fa-search-plus:before{content:""}.fa-searchengin:before{content:""}.fa-seedling:before{content:""}.fa-sellcast:before{content:""}.fa-sellsy:before{content:""}.fa-server:before{content:""}.fa-servicestack:before{content:""}.fa-shapes:before{content:""}.fa-share:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-share-square:before{content:""}.fa-shekel-sign:before{content:""}.fa-shield-alt:before{content:""}.fa-ship:before{content:""}.fa-shipping-fast:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-shoe-prints:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-shopping-cart:before{content:""}.fa-shopware:before{content:""}.fa-shower:before{content:""}.fa-shuttle-van:before{content:""}.fa-sign:before{content:""}.fa-sign-in-alt:before{content:""}.fa-sign-language:before{content:""}.fa-sign-out-alt:before{content:""}.fa-signal:before{content:""}.fa-signature:before{content:""}.fa-sim-card:before{content:""}.fa-simplybuilt:before{content:""}.fa-sistrix:before{content:""}.fa-sitemap:before{content:""}.fa-sith:before{content:""}.fa-skating:before{content:""}.fa-sketch:before{content:""}.fa-skiing:before{content:""}.fa-skiing-nordic:before{content:""}.fa-skull:before{content:""}.fa-skull-crossbones:before{content:""}.fa-skyatlas:before{content:""}.fa-skype:before{content:""}.fa-slack:before{content:""}.fa-slack-hash:before{content:""}.fa-slash:before{content:""}.fa-sleigh:before{content:""}.fa-sliders-h:before{content:""}.fa-slideshare:before{content:""}.fa-smile:before{content:""}.fa-smile-beam:before{content:""}.fa-smile-wink:before{content:""}.fa-smog:before{content:""}.fa-smoking:before{content:""}.fa-smoking-ban:before{content:""}.fa-sms:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-snowboarding:before{content:""}.fa-snowflake:before{content:""}.fa-snowman:before{content:""}.fa-snowplow:before{content:""}.fa-socks:before{content:""}.fa-solar-panel:before{content:""}.fa-sort:before{content:""}.fa-sort-alpha-down:before{content:""}.fa-sort-alpha-down-alt:before{content:""}.fa-sort-alpha-up:before{content:""}.fa-sort-alpha-up-alt:before{content:""}.fa-sort-amount-down:before{content:""}.fa-sort-amount-down-alt:before{content:""}.fa-sort-amount-up:before{content:""}.fa-sort-amount-up-alt:before{content:""}.fa-sort-down:before{content:""}.fa-sort-numeric-down:before{content:""}.fa-sort-numeric-down-alt:before{content:""}.fa-sort-numeric-up:before{content:""}.fa-sort-numeric-up-alt:before{content:""}.fa-sort-up:before{content:""}.fa-soundcloud:before{content:""}.fa-sourcetree:before{content:""}.fa-spa:before{content:""}.fa-space-shuttle:before{content:""}.fa-speakap:before{content:""}.fa-speaker-deck:before{content:""}.fa-spell-check:before{content:""}.fa-spider:before{content:""}.fa-spinner:before{content:""}.fa-splotch:before{content:""}.fa-spotify:before{content:""}.fa-spray-can:before{content:""}.fa-square:before{content:""}.fa-square-full:before{content:""}.fa-square-root-alt:before{content:""}.fa-squarespace:before{content:""}.fa-stack-exchange:before{content:""}.fa-stack-overflow:before{content:""}.fa-stackpath:before{content:""}.fa-stamp:before{content:""}.fa-star:before{content:""}.fa-star-and-crescent:before{content:""}.fa-star-half:before{content:""}.fa-star-half-alt:before{content:""}.fa-star-of-david:before{content:""}.fa-star-of-life:before{content:""}.fa-staylinked:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-steam-symbol:before{content:""}.fa-step-backward:before{content:""}.fa-step-forward:before{content:""}.fa-stethoscope:before{content:""}.fa-sticker-mule:before{content:""}.fa-sticky-note:before{content:""}.fa-stop:before{content:""}.fa-stop-circle:before{content:""}.fa-stopwatch:before{content:""}.fa-store:before{content:""}.fa-store-alt:before{content:""}.fa-strava:before{content:""}.fa-stream:before{content:""}.fa-street-view:before{content:""}.fa-strikethrough:before{content:""}.fa-stripe:before{content:""}.fa-stripe-s:before{content:""}.fa-stroopwafel:before{content:""}.fa-studiovinari:before{content:""}.fa-stumbleupon:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-subscript:before{content:""}.fa-subway:before{content:""}.fa-suitcase:before{content:""}.fa-suitcase-rolling:before{content:""}.fa-sun:before{content:""}.fa-superpowers:before{content:""}.fa-superscript:before{content:""}.fa-supple:before{content:""}.fa-surprise:before{content:""}.fa-suse:before{content:""}.fa-swatchbook:before{content:""}.fa-swift:before{content:""}.fa-swimmer:before{content:""}.fa-swimming-pool:before{content:""}.fa-symfony:before{content:""}.fa-synagogue:before{content:""}.fa-sync:before{content:""}.fa-sync-alt:before{content:""}.fa-syringe:before{content:""}.fa-table:before{content:""}.fa-table-tennis:before{content:""}.fa-tablet:before{content:""}.fa-tablet-alt:before{content:""}.fa-tablets:before{content:""}.fa-tachometer-alt:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-tape:before{content:""}.fa-tasks:before{content:""}.fa-taxi:before{content:""}.fa-teamspeak:before{content:""}.fa-teeth:before{content:""}.fa-teeth-open:before{content:""}.fa-telegram:before{content:""}.fa-telegram-plane:before{content:""}.fa-temperature-high:before{content:""}.fa-temperature-low:before{content:""}.fa-tencent-weibo:before{content:""}.fa-tenge:before{content:""}.fa-terminal:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-th:before{content:""}.fa-th-large:before{content:""}.fa-th-list:before{content:""}.fa-the-red-yeti:before{content:""}.fa-theater-masks:before{content:""}.fa-themeco:before{content:""}.fa-themeisle:before{content:""}.fa-thermometer:before{content:""}.fa-thermometer-empty:before{content:""}.fa-thermometer-full:before{content:""}.fa-thermometer-half:before{content:""}.fa-thermometer-quarter:before{content:""}.fa-thermometer-three-quarters:before{content:""}.fa-think-peaks:before{content:""}.fa-thumbs-down:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbtack:before{content:""}.fa-ticket-alt:before{content:""}.fa-times:before{content:""}.fa-times-circle:before{content:""}.fa-tint:before{content:""}.fa-tint-slash:before{content:""}.fa-tired:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-toilet:before{content:""}.fa-toilet-paper:before{content:""}.fa-toolbox:before{content:""}.fa-tools:before{content:""}.fa-tooth:before{content:""}.fa-torah:before{content:""}.fa-torii-gate:before{content:""}.fa-tractor:before{content:""}.fa-trade-federation:before{content:""}.fa-trademark:before{content:""}.fa-traffic-light:before{content:""}.fa-trailer:before{content:"論"}.fa-train:before{content:""}.fa-tram:before{content:""}.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-trash:before{content:""}.fa-trash-alt:before{content:""}.fa-trash-restore:before{content:""}.fa-trash-restore-alt:before{content:""}.fa-tree:before{content:""}.fa-trello:before{content:""}.fa-tripadvisor:before{content:""}.fa-trophy:before{content:""}.fa-truck:before{content:""}.fa-truck-loading:before{content:""}.fa-truck-monster:before{content:""}.fa-truck-moving:before{content:""}.fa-truck-pickup:before{content:""}.fa-tshirt:before{content:""}.fa-tty:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-tv:before{content:""}.fa-twitch:before{content:""}.fa-twitter:before{content:""}.fa-twitter-square:before{content:""}.fa-typo3:before{content:""}.fa-uber:before{content:""}.fa-ubuntu:before{content:""}.fa-uikit:before{content:""}.fa-umbraco:before{content:""}.fa-umbrella:before{content:""}.fa-umbrella-beach:before{content:""}.fa-underline:before{content:""}.fa-undo:before{content:""}.fa-undo-alt:before{content:""}.fa-uniregistry:before{content:""}.fa-unity:before{content:"雷"}.fa-universal-access:before{content:""}.fa-university:before{content:""}.fa-unlink:before{content:""}.fa-unlock:before{content:""}.fa-unlock-alt:before{content:""}.fa-untappd:before{content:""}.fa-upload:before{content:""}.fa-ups:before{content:""}.fa-usb:before{content:""}.fa-user:before{content:""}.fa-user-alt:before{content:""}.fa-user-alt-slash:before{content:""}.fa-user-astronaut:before{content:""}.fa-user-check:before{content:""}.fa-user-circle:before{content:""}.fa-user-clock:before{content:""}.fa-user-cog:before{content:""}.fa-user-edit:before{content:""}.fa-user-friends:before{content:""}.fa-user-graduate:before{content:""}.fa-user-injured:before{content:""}.fa-user-lock:before{content:""}.fa-user-md:before{content:""}.fa-user-minus:before{content:""}.fa-user-ninja:before{content:""}.fa-user-nurse:before{content:""}.fa-user-plus:before{content:""}.fa-user-secret:before{content:""}.fa-user-shield:before{content:""}.fa-user-slash:before{content:""}.fa-user-tag:before{content:""}.fa-user-tie:before{content:""}.fa-user-times:before{content:""}.fa-users:before{content:""}.fa-users-cog:before{content:""}.fa-usps:before{content:""}.fa-ussunnah:before{content:""}.fa-utensil-spoon:before{content:""}.fa-utensils:before{content:""}.fa-vaadin:before{content:""}.fa-vector-square:before{content:""}.fa-venus:before{content:""}.fa-venus-double:before{content:""}.fa-venus-mars:before{content:""}.fa-viacoin:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-vial:before{content:""}.fa-vials:before{content:""}.fa-viber:before{content:""}.fa-video:before{content:""}.fa-video-slash:before{content:""}.fa-vihara:before{content:""}.fa-vimeo:before{content:""}.fa-vimeo-square:before{content:""}.fa-vimeo-v:before{content:""}.fa-vine:before{content:""}.fa-vk:before{content:""}.fa-vnv:before{content:""}.fa-voicemail:before{content:""}.fa-volleyball-ball:before{content:""}.fa-volume-down:before{content:""}.fa-volume-mute:before{content:""}.fa-volume-off:before{content:""}.fa-volume-up:before{content:""}.fa-vote-yea:before{content:""}.fa-vr-cardboard:before{content:""}.fa-vuejs:before{content:""}.fa-walking:before{content:""}.fa-wallet:before{content:""}.fa-warehouse:before{content:""}.fa-water:before{content:""}.fa-wave-square:before{content:""}.fa-waze:before{content:""}.fa-weebly:before{content:""}.fa-weibo:before{content:""}.fa-weight:before{content:""}.fa-weight-hanging:before{content:""}.fa-weixin:before{content:""}.fa-whatsapp:before{content:""}.fa-whatsapp-square:before{content:""}.fa-wheelchair:before{content:""}.fa-whmcs:before{content:""}.fa-wifi:before{content:""}.fa-wikipedia-w:before{content:""}.fa-wind:before{content:""}.fa-window-close:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-windows:before{content:""}.fa-wine-bottle:before{content:""}.fa-wine-glass:before{content:""}.fa-wine-glass-alt:before{content:""}.fa-wix:before{content:""}.fa-wizards-of-the-coast:before{content:""}.fa-wolf-pack-battalion:before{content:""}.fa-won-sign:before{content:""}.fa-wordpress:before{content:""}.fa-wordpress-simple:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpexplorer:before{content:""}.fa-wpforms:before{content:""}.fa-wpressr:before{content:""}.fa-wrench:before{content:""}.fa-x-ray:before{content:""}.fa-xbox:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-y-combinator:before{content:""}.fa-yahoo:before{content:""}.fa-yammer:before{content:""}.fa-yandex:before{content:""}.fa-yandex-international:before{content:""}.fa-yarn:before{content:""}.fa-yelp:before{content:""}.fa-yen-sign:before{content:""}.fa-yin-yang:before{content:""}.fa-yoast:before{content:""}.fa-youtube:before{content:""}.fa-youtube-square:before{content:""}.fa-zhihu:before{content:""}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:normal;font-display:auto;src:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/fontawesome/webfonts/fa-brands-400.eot);src:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/fontawesome/webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/fontawesome/webfonts/fa-brands-400.woff2) format("woff2"),url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/fontawesome/webfonts/fa-brands-400.woff) format("woff"),url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/fontawesome/webfonts/fa-brands-400.ttf) format("truetype"),url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/fontawesome/webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:auto;src:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/fontawesome/webfonts/fa-regular-400.eot);src:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/fontawesome/webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/fontawesome/webfonts/fa-regular-400.woff2) format("woff2"),url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/fontawesome/webfonts/fa-regular-400.woff) format("woff"),url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/fontawesome/webfonts/fa-regular-400.ttf) format("truetype"),url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/fontawesome/webfonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:auto;src:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/fontawesome/webfonts/fa-solid-900.eot);src:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/fontawesome/webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/fontawesome/webfonts/fa-solid-900.woff2) format("woff2"),url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/fontawesome/webfonts/fa-solid-900.woff) format("woff"),url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/fontawesome/webfonts/fa-solid-900.ttf) format("truetype"),url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/fontawesome/webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.far,.fas{font-family:"Font Awesome 5 Free"}.fa,.fas{font-weight:900} +body:before{content:"mobile";display:none;visibility:hidden}@media(min-width:768px){body:before{content:"tablet"}}@media(min-width:992px){body:before{content:"desktop"}}@media(min-width:1200px){body:before{content:"widescreen"}}@media(min-width:1400px){body:before{content:"fullhd"}}.progress.progress-xs{height:.25rem}.progress.progress-sm{height:.5rem}.progress.progress-md{height:1rem}.progress.progress-lg{height:1.5rem}.progress.progress-xl{height:2rem}[data-tooltip]:not(.is-loading),[data-tooltip]:not(.is-disabled),[data-tooltip]:not([disabled]){cursor:pointer;overflow:visible;position:relative}[data-tooltip]:not(.is-loading)::before,[data-tooltip]:not(.is-loading)::after,[data-tooltip]:not(.is-disabled)::before,[data-tooltip]:not(.is-disabled)::after,[data-tooltip]:not([disabled])::before,[data-tooltip]:not([disabled])::after{box-sizing:border-box;color:var(--b-tooltip-color,#fff);display:inline-block;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:var(--b-tooltip-font-size,var(--b-font-size-sm,.875rem));hyphens:auto;opacity:0;overflow:hidden;pointer-events:none;position:absolute;visibility:hidden;z-index:var(--b-tooltip-z-index,1020)}[data-tooltip]:not(.is-loading)::after,[data-tooltip]:not(.is-disabled)::after,[data-tooltip]:not([disabled])::after{content:"";border-style:solid;border-width:6px;border-color:rgba(var(--b-tooltip-background-color-r,128),var(--b-tooltip-background-color-g,128),var(--b-tooltip-background-color-b,128),.9) transparent transparent transparent;margin-bottom:-5px}[data-tooltip]:not(.is-loading)::after,[data-tooltip]:not(.is-disabled)::after,[data-tooltip]:not([disabled])::after{top:0;right:auto;bottom:auto;left:50%;margin-top:-5px;margin-right:auto;margin-bottom:auto;margin-left:-5px;border-color:rgba(var(--b-tooltip-background-color-r,128),var(--b-tooltip-background-color-g,128),var(--b-tooltip-background-color-b,128),.9) transparent transparent transparent}[data-tooltip]:not(.is-loading)::before,[data-tooltip]:not(.is-disabled)::before,[data-tooltip]:not([disabled])::before{background:rgba(var(--b-tooltip-background-color-r,128),var(--b-tooltip-background-color-g,128),var(--b-tooltip-background-color-b,128),.9);border-radius:var(--b-tooltip-border-radius,4px);content:attr(data-tooltip);padding:var(--b-tooltip-padding,.5rem 1rem);text-overflow:ellipsis;white-space:pre}[data-tooltip]:not(.is-loading)::before,[data-tooltip]:not(.is-disabled)::before,[data-tooltip]:not([disabled])::before{top:0;right:auto;bottom:auto;left:50%;top:0;margin-top:-5px;margin-bottom:auto;transform:translate(-50%,-100%)}[data-tooltip]:not(.is-loading).b-tooltip-bottom::after,[data-tooltip]:not(.is-disabled).b-tooltip-bottom::after,[data-tooltip]:not([disabled]).b-tooltip-bottom::after{top:auto;right:auto;bottom:0;left:50%;margin-top:auto;margin-right:auto;margin-bottom:-5px;margin-left:-5px;border-color:transparent transparent rgba(var(--b-tooltip-background-color-r,128),var(--b-tooltip-background-color-g,128),var(--b-tooltip-background-color-b,128),.9) transparent}[data-tooltip]:not(.is-loading).b-tooltip-bottom::before,[data-tooltip]:not(.is-disabled).b-tooltip-bottom::before,[data-tooltip]:not([disabled]).b-tooltip-bottom::before{top:auto;right:auto;bottom:0;left:50%;margin-top:auto;margin-bottom:-5px;transform:translate(-50%,100%)}[data-tooltip]:not(.is-loading).b-tooltip-left::after,[data-tooltip]:not(.is-disabled).b-tooltip-left::after,[data-tooltip]:not([disabled]).b-tooltip-left::after{top:auto;right:auto;bottom:50%;left:0;margin-top:auto;margin-right:auto;margin-bottom:-6px;margin-left:-11px;border-color:transparent transparent transparent rgba(var(--b-tooltip-background-color-r,128),var(--b-tooltip-background-color-g,128),var(--b-tooltip-background-color-b,128),.9)}[data-tooltip]:not(.is-loading).b-tooltip-left::before,[data-tooltip]:not(.is-disabled).b-tooltip-left::before,[data-tooltip]:not([disabled]).b-tooltip-left::before{top:auto;right:auto;bottom:50%;left:-11px;transform:translate(-100%,50%)}[data-tooltip]:not(.is-loading).b-tooltip-right::after,[data-tooltip]:not(.is-disabled).b-tooltip-right::after,[data-tooltip]:not([disabled]).b-tooltip-right::after{top:auto;right:0;bottom:50%;left:auto;margin-top:auto;margin-right:-11px;margin-bottom:-6px;margin-left:auto;border-color:transparent rgba(var(--b-tooltip-background-color-r,128),var(--b-tooltip-background-color-g,128),var(--b-tooltip-background-color-b,128),.9) transparent transparent}[data-tooltip]:not(.is-loading).b-tooltip-right::before,[data-tooltip]:not(.is-disabled).b-tooltip-right::before,[data-tooltip]:not([disabled]).b-tooltip-right::before{top:auto;right:-11px;bottom:50%;left:auto;margin-top:auto;transform:translate(100%,50%)}[data-tooltip]:not(.is-loading).b-tooltip-multiline::before,[data-tooltip]:not(.is-disabled).b-tooltip-multiline::before,[data-tooltip]:not([disabled]).b-tooltip-multiline::before{height:auto;width:var(--b-tooltip-maxwidth,15rem);max-width:var(--b-tooltip-maxwidth,15rem);text-overflow:clip;white-space:normal;word-break:keep-all}[data-tooltip]:not(.is-loading).b-tooltip-primary.b-tooltip-bottom::after,[data-tooltip]:not(.is-disabled).b-tooltip-primary.b-tooltip-bottom::after,[data-tooltip]:not([disabled]).b-tooltip-primary.b-tooltip-bottom::after{border-color:transparent transparent rgba(142,51,41,.9) transparent}[data-tooltip]:not(.is-loading).b-tooltip-primary.b-tooltip-left::after,[data-tooltip]:not(.is-disabled).b-tooltip-primary.b-tooltip-left::after,[data-tooltip]:not([disabled]).b-tooltip-primary.b-tooltip-left::after{border-color:transparent transparent transparent rgba(142,51,41,.9)}[data-tooltip]:not(.is-loading).b-tooltip-primary.b-tooltip-right::after,[data-tooltip]:not(.is-disabled).b-tooltip-primary.b-tooltip-right::after,[data-tooltip]:not([disabled]).b-tooltip-primary.b-tooltip-right::after{border-color:transparent rgba(142,51,41,.9) transparent transparent}[data-tooltip]:not(.is-loading).b-tooltip-primary:not(.b-tooltip-bottom)::after,[data-tooltip]:not(.is-loading).b-tooltip-primary:not(.b-tooltip-left)::after,[data-tooltip]:not(.is-loading).b-tooltip-primary:not(.b-tooltip-right)::after,[data-tooltip]:not(.is-disabled).b-tooltip-primary:not(.b-tooltip-bottom)::after,[data-tooltip]:not(.is-disabled).b-tooltip-primary:not(.b-tooltip-left)::after,[data-tooltip]:not(.is-disabled).b-tooltip-primary:not(.b-tooltip-right)::after,[data-tooltip]:not([disabled]).b-tooltip-primary:not(.b-tooltip-bottom)::after,[data-tooltip]:not([disabled]).b-tooltip-primary:not(.b-tooltip-left)::after,[data-tooltip]:not([disabled]).b-tooltip-primary:not(.b-tooltip-right)::after{border-color:rgba(142,51,41,.9) transparent transparent transparent}[data-tooltip]:not(.is-loading).b-tooltip-primary:before,[data-tooltip]:not(.is-disabled).b-tooltip-primary:before,[data-tooltip]:not([disabled]).b-tooltip-primary:before{background-color:rgba(142,51,41,.9);color:#8e3329}[data-tooltip]:not(.is-loading):focus::before,[data-tooltip]:not(.is-loading):focus::after,[data-tooltip]:not(.is-loading):hover::before,[data-tooltip]:not(.is-loading):hover::after,[data-tooltip]:not(.is-loading).b-tooltip-active::before,[data-tooltip]:not(.is-loading).b-tooltip-active::after,[data-tooltip]:not(.is-disabled):focus::before,[data-tooltip]:not(.is-disabled):focus::after,[data-tooltip]:not(.is-disabled):hover::before,[data-tooltip]:not(.is-disabled):hover::after,[data-tooltip]:not(.is-disabled).b-tooltip-active::before,[data-tooltip]:not(.is-disabled).b-tooltip-active::after,[data-tooltip]:not([disabled]):focus::before,[data-tooltip]:not([disabled]):focus::after,[data-tooltip]:not([disabled]):hover::before,[data-tooltip]:not([disabled]):hover::after,[data-tooltip]:not([disabled]).b-tooltip-active::before,[data-tooltip]:not([disabled]).b-tooltip-active::after{opacity:1;visibility:visible}[data-tooltip]:not(.is-loading).b-tooltip-fade::before,[data-tooltip]:not(.is-loading).b-tooltip-fade::after,[data-tooltip]:not(.is-disabled).b-tooltip-fade::before,[data-tooltip]:not(.is-disabled).b-tooltip-fade::after,[data-tooltip]:not([disabled]).b-tooltip-fade::before,[data-tooltip]:not([disabled]).b-tooltip-fade::after{transition:opacity var(--b-tooltip-fade-time,.3s) linear,visibility var(--b-tooltip-fade-time,.3s) linear}.b-tooltip-inline{display:inline-block}.b-layout{display:flex;flex:auto;flex-direction:column}.b-layout.b-layout-root{height:100vh}.b-layout,.b-layout *{box-sizing:border-box}@keyframes spinner{0%{transform:translate3d(-50%,-50%,0) rotate(0deg)}100%{transform:translate3d(-50%,-50%,0) rotate(360deg)}}.b-layout>.b-layout-loading{z-index:9999;position:fixed;width:100%;height:100%;background:rgba(0,0,0,.3)}.b-layout>.b-layout-loading:before{animation:1s linear infinite spinner;border:solid 3px #eee;border-bottom-color:var(--b-theme-primary);border-radius:50%;height:40px;left:50%;position:absolute;top:50%;transform:translate3d(-50%,-50%,0);width:40px;content:' '}.b-layout.b-layout-has-sider{flex-direction:row;min-height:0}.b-layout.b-layout-has-sider .b-layout{overflow-x:hidden}.b-layout-header,.b-layout-footer{flex:0 0 auto}.b-layout-header{color:rgba(0,0,0,.65)}.b-layout-header-fixed{position:sticky;z-index:1;top:0;flex:0}.b-layout-footer{color:rgba(0,0,0,.65)}.b-layout-footer-fixed{position:sticky;z-index:1;bottom:0;flex:0}.b-layout-content{flex:1}.b-layout-sider{display:flex;position:relative;background:#001529}.b-layout-sider-content{position:sticky;top:0;z-index:2}.b-layout-header .navbar{line-height:inherit}.b-bar-horizontal[data-collapse=hide]{flex-wrap:nowrap}.b-bar-horizontal[data-collapse=hide][data-broken=true]{height:var(--b-bar-horizontal-height,auto)}.b-bar-horizontal[data-broken=false]{height:var(--b-bar-horizontal-height,auto)}.b-bar-vertical-inline,.b-bar-vertical-popout,.b-bar-vertical-small{display:flex;flex-direction:column;flex-wrap:nowrap;position:sticky;top:0;padding:0;min-width:var(--b-vertical-bar-width,230px);max-width:var(--b-vertical-bar-width,230px);width:var(--b-vertical-bar-width,230px);transition:width 200ms ease-in-out,min-width 200ms ease-in-out;box-shadow:2px 0 6px rgba(0,21,41,.35);height:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.b-bar-vertical-inline .b-bar-menu,.b-bar-vertical-popout .b-bar-menu,.b-bar-vertical-small .b-bar-menu{width:100%;display:flex;flex:1;justify-content:space-between;flex-direction:column;align-self:stretch}.b-bar-vertical-inline .b-bar-brand,.b-bar-vertical-popout .b-bar-brand,.b-bar-vertical-small .b-bar-brand{width:100%;display:flex;height:var(--b-vertical-bar-brand-height,64px);min-height:var(--b-vertical-bar-brand-height,64px)}.b-bar-vertical-inline .b-bar-toggler-inline,.b-bar-vertical-popout .b-bar-toggler-inline,.b-bar-vertical-small .b-bar-toggler-inline{height:var(--b-vertical-bar-brand-height,64px);padding:12px;display:inline-flex;cursor:pointer;position:absolute;right:0}.b-bar-vertical-inline .b-bar-toggler-inline>*,.b-bar-vertical-popout .b-bar-toggler-inline>*,.b-bar-vertical-small .b-bar-toggler-inline>*{margin:auto}.b-bar-vertical-inline .b-bar-toggler-popout:not(.b-bar-mobile-toggle),.b-bar-vertical-popout .b-bar-toggler-popout:not(.b-bar-mobile-toggle),.b-bar-vertical-small .b-bar-toggler-popout:not(.b-bar-mobile-toggle){display:flex;position:fixed;left:var(--b-vertical-bar-width,230px);border-radius:0 10px 10px 0;border:0;width:10px;height:40px;padding:5px;align-items:center;transition:width 200ms ease-in-out,left 200ms ease-in-out;box-shadow:2px 0 6px rgba(0,21,41,.35);cursor:pointer}.b-bar-vertical-inline .b-bar-toggler-popout:not(.b-bar-mobile-toggle)>*,.b-bar-vertical-popout .b-bar-toggler-popout:not(.b-bar-mobile-toggle)>*,.b-bar-vertical-small .b-bar-toggler-popout:not(.b-bar-mobile-toggle)>*{margin:auto;display:none}.b-bar-vertical-inline .b-bar-toggler-popout:not(.b-bar-mobile-toggle):hover,.b-bar-vertical-popout .b-bar-toggler-popout:not(.b-bar-mobile-toggle):hover,.b-bar-vertical-small .b-bar-toggler-popout:not(.b-bar-mobile-toggle):hover{width:45px}.b-bar-vertical-inline .b-bar-toggler-popout:not(.b-bar-mobile-toggle):hover>*,.b-bar-vertical-popout .b-bar-toggler-popout:not(.b-bar-mobile-toggle):hover>*,.b-bar-vertical-small .b-bar-toggler-popout:not(.b-bar-mobile-toggle):hover>*{display:block}.b-bar-vertical-inline .b-bar-item,.b-bar-vertical-popout .b-bar-item,.b-bar-vertical-small .b-bar-item{margin:auto;flex-grow:1;min-height:40px}.b-bar-vertical-inline .b-bar-item .b-bar-icon,.b-bar-vertical-popout .b-bar-item .b-bar-icon,.b-bar-vertical-small .b-bar-item .b-bar-icon{font-size:1.25rem;vertical-align:middle;margin:3px;display:inline-block}.b-bar-vertical-inline .b-bar-start,.b-bar-vertical-popout .b-bar-start,.b-bar-vertical-small .b-bar-start{width:100%;display:block}.b-bar-vertical-inline .b-bar-end,.b-bar-vertical-popout .b-bar-end,.b-bar-vertical-small .b-bar-end{padding-bottom:1rem;width:100%;padding-top:1rem;display:block}.b-bar-vertical-inline .b-bar-link,.b-bar-vertical-popout .b-bar-link,.b-bar-vertical-small .b-bar-link{display:block;width:100%;text-decoration:none;padding:.5rem .5rem .5rem 1.5rem;cursor:pointer;overflow-x:hidden;line-height:1.5rem;vertical-align:middle;transition:font-size 150ms ease-in}.b-bar-vertical-inline .b-bar-label,.b-bar-vertical-popout .b-bar-label,.b-bar-vertical-small .b-bar-label{background:transparent;color:#adb5bd;padding:.375rem 1.25rem;font-size:.75rem;text-overflow:ellipsis;overflow-x:hidden}.b-bar-vertical-inline .b-bar-dropdown .b-bar-dropdown-toggle:before,.b-bar-vertical-popout .b-bar-dropdown .b-bar-dropdown-toggle:before,.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-toggle:before{content:" ";border:solid;border-width:0 2px 2px 0;display:inline-block;padding:2px;right:1rem;transition:transform 200ms ease-out;float:right;position:relative;-webkit-transform:rotate(225deg);transform:rotate(225deg);top:.7rem}.b-bar-vertical-inline .b-bar-dropdown:not([data-visible=true]) .b-bar-dropdown-toggle:before,.b-bar-vertical-popout .b-bar-dropdown:not([data-visible=true]) .b-bar-dropdown-toggle:before,.b-bar-vertical-small .b-bar-dropdown:not([data-visible=true]) .b-bar-dropdown-toggle:before{-webkit-transform:rotate(45deg);transform:rotate(45deg);top:.5rem}.b-bar-vertical-inline .b-bar-dropdown .b-bar-dropdown-menu,.b-bar-vertical-popout .b-bar-dropdown .b-bar-dropdown-menu,.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu{display:none;background:inherit;color:inherit;float:none;padding:5px 0}.b-bar-vertical-inline .b-bar-dropdown .b-bar-dropdown-menu[data-visible=true],.b-bar-vertical-popout .b-bar-dropdown .b-bar-dropdown-menu[data-visible=true],.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu[data-visible=true]{display:block}.b-bar-vertical-inline .b-bar-dropdown .b-bar-dropdown-menu .b-bar-dropdown-item,.b-bar-vertical-popout .b-bar-dropdown .b-bar-dropdown-menu .b-bar-dropdown-item,.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu .b-bar-dropdown-item{position:relative;color:inherit;transition:background 100ms ease-in-out,color 100ms ease-in-out;text-decoration:none;display:block;width:100%;overflow-x:hidden}.b-bar-vertical-inline .b-bar-dropdown .b-bar-dropdown-menu .b-bar-dropdown-item i,.b-bar-vertical-popout .b-bar-dropdown .b-bar-dropdown-menu .b-bar-dropdown-item i,.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu .b-bar-dropdown-item i{margin-right:.3rem}.b-bar-vertical-inline .b-bar-dropdown .b-bar-dropdown-menu:before,.b-bar-vertical-popout .b-bar-dropdown .b-bar-dropdown-menu:before,.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu:before{background:inherit;box-shadow:none}.b-bar-vertical-inline .b-bar-mobile-toggle,.b-bar-vertical-popout .b-bar-mobile-toggle,.b-bar-vertical-small .b-bar-mobile-toggle{right:20px;margin:auto;display:none}.b-bar-vertical-inline .b-bar-item-multi-line,.b-bar-vertical-popout .b-bar-item-multi-line,.b-bar-vertical-small .b-bar-item-multi-line{display:-webkit-box !important;-webkit-box-orient:vertical;-webkit-line-clamp:var(--b-bar-item-lines,2);white-space:normal !important;overflow:hidden;text-overflow:ellipsis}.b-bar-vertical-inline.b-bar-dark,.b-bar-vertical-popout.b-bar-dark,.b-bar-vertical-small.b-bar-dark{background:var(--b-bar-dark-background,#001529);color:var(--b-bar-dark-color,rgba(255,255,255,.5))}.b-bar-vertical-inline.b-bar-dark .b-bar-brand,.b-bar-vertical-popout.b-bar-dark .b-bar-brand,.b-bar-vertical-small.b-bar-dark .b-bar-brand{background:var(--b-bar-brand-dark-background,rgba(255,255,255,.025))}.b-bar-vertical-inline.b-bar-dark .b-bar-brand .b-bar-link,.b-bar-vertical-popout.b-bar-dark .b-bar-brand .b-bar-link,.b-bar-vertical-small.b-bar-dark .b-bar-brand .b-bar-link{color:#fff}.b-bar-vertical-inline.b-bar-dark .b-bar-brand .b-bar-link.active,.b-bar-vertical-popout.b-bar-dark .b-bar-brand .b-bar-link.active,.b-bar-vertical-small.b-bar-dark .b-bar-brand .b-bar-link.active{color:#fff;background:inherit}.b-bar-vertical-inline.b-bar-dark .b-bar-brand .b-bar-link:hover,.b-bar-vertical-popout.b-bar-dark .b-bar-brand .b-bar-link:hover,.b-bar-vertical-small.b-bar-dark .b-bar-brand .b-bar-link:hover{color:#fff;background:inherit}.b-bar-vertical-inline.b-bar-dark .b-bar-toggler-popout:not(.b-bar-mobile-toggle),.b-bar-vertical-popout.b-bar-dark .b-bar-toggler-popout:not(.b-bar-mobile-toggle),.b-bar-vertical-small.b-bar-dark .b-bar-toggler-popout:not(.b-bar-mobile-toggle){background:var(--b-bar-dark-background,#001529);color:var(--b-bar-dark-color,rgba(255,255,255,.5))}.b-bar-vertical-inline.b-bar-dark .b-bar-dropdown-menu,.b-bar-vertical-popout.b-bar-dark .b-bar-dropdown-menu,.b-bar-vertical-small.b-bar-dark .b-bar-dropdown-menu{background:var(--b-bar-dropdown-dark-background,#000c17)}.b-bar-vertical-inline.b-bar-dark .b-bar-dropdown-menu .b-bar-dropdown-item.active,.b-bar-vertical-popout.b-bar-dark .b-bar-dropdown-menu .b-bar-dropdown-item.active,.b-bar-vertical-small.b-bar-dark .b-bar-dropdown-menu .b-bar-dropdown-item.active{color:var(--b-bar-item-dark-active-color,#fff);background:var(--b-bar-item-dark-active-background,#0288d1)}.b-bar-vertical-inline.b-bar-dark .b-bar-dropdown-menu .b-bar-dropdown-item:hover,.b-bar-vertical-popout.b-bar-dark .b-bar-dropdown-menu .b-bar-dropdown-item:hover,.b-bar-vertical-small.b-bar-dark .b-bar-dropdown-menu .b-bar-dropdown-item:hover{color:var(--b-bar-item-dark-hover-color,#fff);background:var(--b-bar-item-dark-hover-background,rgba(255,255,255,.3))}.b-bar-vertical-inline.b-bar-dark .b-bar-link,.b-bar-vertical-popout.b-bar-dark .b-bar-link,.b-bar-vertical-small.b-bar-dark .b-bar-link{color:inherit}.b-bar-vertical-inline.b-bar-dark .b-bar-link.active,.b-bar-vertical-popout.b-bar-dark .b-bar-link.active,.b-bar-vertical-small.b-bar-dark .b-bar-link.active{color:var(--b-bar-item-dark-active-color,#fff);background:var(--b-bar-item-dark-active-background,#0288d1)}.b-bar-vertical-inline.b-bar-dark .b-bar-link:hover,.b-bar-vertical-popout.b-bar-dark .b-bar-link:hover,.b-bar-vertical-small.b-bar-dark .b-bar-link:hover{color:var(--b-bar-item-dark-hover-color,#fff);background:var(--b-bar-item-dark-hover-background,rgba(255,255,255,.3))}.b-bar-vertical-inline.b-bar-light,.b-bar-vertical-popout.b-bar-light,.b-bar-vertical-small.b-bar-light{background:var(--b-bar-light-background,#fff);color:var(--b-bar-light-color,rgba(0,0,0,.7))}.b-bar-vertical-inline.b-bar-light .b-bar-brand,.b-bar-vertical-popout.b-bar-light .b-bar-brand,.b-bar-vertical-small.b-bar-light .b-bar-brand{background:var(--b-bar-brand-light-background,rgba(0,0,0,.025))}.b-bar-vertical-inline.b-bar-light .b-bar-brand .b-bar-link,.b-bar-vertical-popout.b-bar-light .b-bar-brand .b-bar-link,.b-bar-vertical-small.b-bar-light .b-bar-brand .b-bar-link{color:#000}.b-bar-vertical-inline.b-bar-light .b-bar-brand .b-bar-link.active,.b-bar-vertical-popout.b-bar-light .b-bar-brand .b-bar-link.active,.b-bar-vertical-small.b-bar-light .b-bar-brand .b-bar-link.active{background:inherit}.b-bar-vertical-inline.b-bar-light .b-bar-brand .b-bar-link:hover,.b-bar-vertical-popout.b-bar-light .b-bar-brand .b-bar-link:hover,.b-bar-vertical-small.b-bar-light .b-bar-brand .b-bar-link:hover{background:inherit}.b-bar-vertical-inline.b-bar-light .b-bar-toggler-popout:not(.b-bar-mobile-toggle),.b-bar-vertical-popout.b-bar-light .b-bar-toggler-popout:not(.b-bar-mobile-toggle),.b-bar-vertical-small.b-bar-light .b-bar-toggler-popout:not(.b-bar-mobile-toggle){background:var(--b-bar-brand-light-background,#fff);color:var(--b-bar-light-color,rgba(0,0,0,.7))}.b-bar-vertical-inline.b-bar-light .b-bar-dropdown-menu,.b-bar-vertical-popout.b-bar-light .b-bar-dropdown-menu,.b-bar-vertical-small.b-bar-light .b-bar-dropdown-menu{background:var(--b-bar-dropdown-light-background,#f2f2f2)}.b-bar-vertical-inline.b-bar-light .b-bar-dropdown-menu .b-bar-dropdown-item.active,.b-bar-vertical-popout.b-bar-light .b-bar-dropdown-menu .b-bar-dropdown-item.active,.b-bar-vertical-small.b-bar-light .b-bar-dropdown-menu .b-bar-dropdown-item.active{color:var(--b-bar-item-light-active-color,#000);background:var(--b-bar-item-light-active-background,#0288d1)}.b-bar-vertical-inline.b-bar-light .b-bar-dropdown-menu .b-bar-dropdown-item:hover,.b-bar-vertical-popout.b-bar-light .b-bar-dropdown-menu .b-bar-dropdown-item:hover,.b-bar-vertical-small.b-bar-light .b-bar-dropdown-menu .b-bar-dropdown-item:hover{color:var(--b-bar-item-dark-hover-color,#000);background:var(--b-bar-item-dark-hover-background,rgba(0,0,0,.3))}.b-bar-vertical-inline.b-bar-light .b-bar-link,.b-bar-vertical-popout.b-bar-light .b-bar-link,.b-bar-vertical-small.b-bar-light .b-bar-link{color:inherit}.b-bar-vertical-inline.b-bar-light .b-bar-link.active,.b-bar-vertical-popout.b-bar-light .b-bar-link.active,.b-bar-vertical-small.b-bar-light .b-bar-link.active{color:var(--b-bar-item-light-active-color,#000);background:var(--b-bar-item-light-active-background,#0288d1)}.b-bar-vertical-inline.b-bar-light .b-bar-link:hover,.b-bar-vertical-popout.b-bar-light .b-bar-link:hover,.b-bar-vertical-small.b-bar-light .b-bar-link:hover{color:var(--b-bar-item-dark-hover-color,#000);background:var(--b-bar-item-dark-hover-background,rgba(0,0,0,.3))}.b-bar-vertical-small,.b-bar-vertical-inline[data-collapse=small],.b-bar-vertical-popout[data-collapse=small]{width:var(--b-vertical-bar-small-width,64px);min-width:var(--b-vertical-bar-small-width,64px);transition:width 200ms ease-in-out,min-width 200ms ease-in-out}.b-bar-vertical-small .b-bar-toggler-inline,.b-bar-vertical-inline[data-collapse=small] .b-bar-toggler-inline,.b-bar-vertical-popout[data-collapse=small] .b-bar-toggler-inline{position:relative;width:100%}.b-bar-vertical-small .b-bar-toggler-popout:not(.b-bar-mobile-toggle),.b-bar-vertical-inline[data-collapse=small] .b-bar-toggler-popout:not(.b-bar-mobile-toggle),.b-bar-vertical-popout[data-collapse=small] .b-bar-toggler-popout:not(.b-bar-mobile-toggle){left:var(--b-vertical-bar-small-width,64px)}.b-bar-vertical-small .b-bar-item>.b-bar-dropdown>.b-bar-dropdown-toggle:before,.b-bar-vertical-inline[data-collapse=small] .b-bar-item>.b-bar-dropdown>.b-bar-dropdown-toggle:before,.b-bar-vertical-popout[data-collapse=small] .b-bar-item>.b-bar-dropdown>.b-bar-dropdown-toggle:before{display:none}.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu-container,.b-bar-vertical-inline[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container,.b-bar-vertical-popout[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container{z-index:100;max-height:50vh;position:absolute !important;margin:-42px 5px 0 5px;display:flex;width:var(--b-vertical-bar-popout-menu-width,180px);left:var(--b-vertical-bar-small-width,64px)}.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu-container.b-bar-right,.b-bar-vertical-inline[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container.b-bar-right,.b-bar-vertical-popout[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container.b-bar-right{right:var(--b-vertical-bar-small-width,64px);left:unset}.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu,.b-bar-vertical-inline[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu,.b-bar-vertical-popout[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu{box-shadow:0 3px 6px -4px rgba(0,0,0,.12),0 6px 16px 0 rgba(0,0,0,.08),0 9px 28px 8px rgba(0,0,0,.05);border-radius:3px;overflow-y:auto;overflow-x:hidden;flex:1 100%}.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu .b-bar-dropdown-item,.b-bar-vertical-inline[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu .b-bar-dropdown-item,.b-bar-vertical-popout[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu .b-bar-dropdown-item{padding:.5rem .5rem .5rem 1.5rem}.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu:before,.b-bar-vertical-inline[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu:before,.b-bar-vertical-popout[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu:before{position:absolute;top:0;left:-7px;right:0;bottom:0;width:100%;height:100%;opacity:.0001;content:' ';z-index:-1}.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu.b-bar-right:before,.b-bar-vertical-inline[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu.b-bar-right:before,.b-bar-vertical-popout[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu.b-bar-right:before{left:unset;right:-7px}.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-menu-container,.b-bar-vertical-inline[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-menu-container,.b-bar-vertical-popout[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-menu-container{left:var(--b-vertical-bar-popout-menu-width,180px)}.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-menu-container.b-bar-right,.b-bar-vertical-inline[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-menu-container.b-bar-right,.b-bar-vertical-popout[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-menu-container.b-bar-right{right:var(--b-vertical-bar-popout-menu-width,180px)}.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-toggle:before,.b-bar-vertical-inline[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-toggle:before,.b-bar-vertical-popout[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-toggle:before{content:" ";border:solid;border-width:0 2px 2px 0;display:inline-block;padding:2px;right:1rem;transition:transform 200ms ease-out;float:right;position:relative;-webkit-transform:rotate(315deg);transform:rotate(315deg)}.b-bar-vertical-small .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown:not([data-visible=true]) .b-bar-dropdown-toggle:before,.b-bar-vertical-inline[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown:not([data-visible=true]) .b-bar-dropdown-toggle:before,.b-bar-vertical-popout[data-collapse=small] .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown:not([data-visible=true]) .b-bar-dropdown-toggle:before{-webkit-transform:rotate(135deg);transform:rotate(135deg);right:.8rem}@keyframes b-bar-link-small{to{text-align:center;padding-left:0;padding-right:0}}.b-bar-vertical-small .b-bar-item>.b-bar-link,.b-bar-vertical-small .b-bar-item>.b-bar-dropdown>.b-bar-link,.b-bar-vertical-inline[data-collapse=small] .b-bar-item>.b-bar-link,.b-bar-vertical-inline[data-collapse=small] .b-bar-item>.b-bar-dropdown>.b-bar-link,.b-bar-vertical-popout[data-collapse=small] .b-bar-item>.b-bar-link,.b-bar-vertical-popout[data-collapse=small] .b-bar-item>.b-bar-dropdown>.b-bar-link{animation:b-bar-link-small forwards;animation-delay:170ms;font-size:0;transition:font-size 100ms ease-out}.b-bar-vertical-small .b-bar-item>.b-bar-link:after,.b-bar-vertical-small .b-bar-item>.b-bar-dropdown>.b-bar-link:after,.b-bar-vertical-inline[data-collapse=small] .b-bar-item>.b-bar-link:after,.b-bar-vertical-inline[data-collapse=small] .b-bar-item>.b-bar-dropdown>.b-bar-link:after,.b-bar-vertical-popout[data-collapse=small] .b-bar-item>.b-bar-link:after,.b-bar-vertical-popout[data-collapse=small] .b-bar-item>.b-bar-dropdown>.b-bar-link:after{display:none}.b-bar-vertical-small .b-bar-label,.b-bar-vertical-inline[data-collapse=small] .b-bar-label,.b-bar-vertical-popout[data-collapse=small] .b-bar-label{text-align:center}.b-bar-vertical-inline:not([data-collapse]){overflow-y:auto;overflow-x:hidden}.b-bar-vertical-inline:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container{position:relative}.b-bar-vertical-inline:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu{position:relative !important;border:none;border-radius:0;box-shadow:none}.b-bar-vertical-inline:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu .b-bar-dropdown-item{padding:.5rem .5rem .5rem 3rem}.b-bar-vertical-popout:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-toggle:before{content:" ";border:solid;border-width:0 2px 2px 0;display:inline-block;padding:2px;right:1rem;transition:transform 200ms ease-out;float:right;position:relative;-webkit-transform:rotate(315deg);transform:rotate(315deg)}.b-bar-vertical-popout:not([data-collapse]) .b-bar-dropdown:not([data-visible=true]) .b-bar-dropdown-toggle:before{-webkit-transform:rotate(135deg);transform:rotate(135deg);right:.8rem}.b-bar-vertical-popout:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container{z-index:100;max-height:50vh;position:absolute !important;margin:-42px 5px 0 5px;display:flex;width:var(--b-vertical-bar-popout-menu-width,180px);left:var(--b-vertical-bar-width,230px)}.b-bar-vertical-popout:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container.b-bar-right{right:var(--b-vertical-bar-width,230px);left:unset}.b-bar-vertical-popout:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu{box-shadow:0 3px 6px -4px rgba(0,0,0,.12),0 6px 16px 0 rgba(0,0,0,.08),0 9px 28px 8px rgba(0,0,0,.05);border-radius:3px;overflow-y:auto;overflow-x:hidden;flex:1 100%}.b-bar-vertical-popout:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu .b-bar-dropdown-item{padding:.5rem .5rem .5rem 1.5rem}.b-bar-vertical-popout:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu:before{position:absolute;top:0;left:-7px;right:0;bottom:0;width:100%;height:100%;opacity:.0001;content:' ';z-index:-1}.b-bar-vertical-popout:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu.b-bar-right:before{left:unset;right:-7px}.b-bar-vertical-popout:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-menu-container{left:var(--b-vertical-bar-popout-menu-width,180px)}.b-bar-vertical-popout:not([data-collapse]) .b-bar-dropdown .b-bar-dropdown-menu-container .b-bar-dropdown-menu>.b-bar-dropdown .b-bar-dropdown-menu-container.b-bar-right{right:var(--b-vertical-bar-popout-menu-width,180px)}.b-bar-vertical-inline[data-collapse=hide],.b-bar-vertical-popout[data-collapse=hide],.b-bar-vertical-small[data-collapse=hide]{width:0;min-width:0;transition:width 200ms ease-in-out,min-width 200ms ease-in-out,visibility 100ms;visibility:hidden}.b-bar-vertical-inline[data-collapse=hide] .b-bar-toggler-inline,.b-bar-vertical-popout[data-collapse=hide] .b-bar-toggler-inline,.b-bar-vertical-small[data-collapse=hide] .b-bar-toggler-inline{display:none}.b-bar-vertical-inline[data-collapse=hide] .b-bar-toggler-popout:not(.b-bar-mobile-toggle),.b-bar-vertical-popout[data-collapse=hide] .b-bar-toggler-popout:not(.b-bar-mobile-toggle),.b-bar-vertical-small[data-collapse=hide] .b-bar-toggler-popout:not(.b-bar-mobile-toggle){visibility:visible;left:0}@media only screen and (max-width:576px){.b-bar-vertical-inline:not([data-collapse]){min-width:100vw}.b-bar-vertical-inline:not([data-collapse]) .b-bar-toggler-inline:not(.b-bar-mobile-toggle){display:none}.b-bar-vertical-inline:not([data-collapse]) .b-bar-toggler-popout:not(.b-bar-mobile-toggle){left:100vw}.b-bar-vertical-inline:not([data-collapse]) .b-bar-mobile-toggle{display:flex}}.b-character-casing-lower{text-transform:lowercase}.b-character-casing-upper{text-transform:uppercase}.b-character-casing-title{text-transform:lowercase}.b-character-casing-title::first-letter {text-transform:uppercase}hr.divider.divider-solid{border-top:var(--b-divider-thickness,2px) solid var(--b-divider-color,#999)}hr.divider.divider-dashed{border-top:var(--b-divider-thickness,2px) dashed var(--b-divider-color,#999)}hr.divider.divider-dotted{border-top:var(--b-divider-thickness,2px) dotted var(--b-divider-color,#999)}hr.divider.divider-text{position:relative;border:none;height:1px;background:var(--b-divider-color,#999)}hr.divider.divider-text::before{content:attr(data-content);display:inline-block;background:#fff;font-weight:bold;font-size:var(--b-divider-font-size,.85rem);color:var(--b-divider-color,#999);border-radius:30rem;padding:.2rem 2rem;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)} +@keyframes fadeIn{0%{opacity:0}100%{opacity:1}0%{opacity:0}}@keyframes slideIn{0%{transform:translateY(1rem);opacity:0}100%{transform:translateY(0);opacity:1}0%{transform:translateY(1rem);opacity:0}}.badge-close{cursor:pointer}.badge-close::before{height:2px;width:50%}.badge-close::after{height:50%;width:2px}.badge-close:hover,.badge-close:focus{background-color:rgba(10,10,10,.3)}.badge-close:active{background-color:rgba(10,10,10,.4)}.navbar-nav .nav-item:hover{cursor:pointer}.navbar-nav .nav-link:hover{cursor:pointer}.nav .nav-link:hover{cursor:pointer}.nav-item{position:relative}.btn-group>.b-tooltip:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.b-tooltip:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.b-tooltip:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.b-tooltip:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.btn-xs,.btn-group-xs>.btn{padding:.15rem .5rem;font-size:.75rem;line-height:1.5;border-radius:.15rem}.btn-md,.btn-group-md>.btn{padding:.47rem 1rem;font-size:1.125rem;line-height:1.5;border-radius:.25rem}.btn-xl,.btn-group-xl>.btn{padding:.5rem 1rem;font-size:1.5rem;line-height:1.5;border-radius:.4rem}.dropdown-toggle.dropdown-toggle-hidden::after{content:none !important}.dropdown-toggle.dropdown-toggle-hidden::before{content:none !important}.dropdown-menu.show{animation-duration:.3s;animation-fill-mode:both;animation-name:fadeIn}.figure-is-16x16{height:16px;width:16px}.figure-is-24x24{height:24px;width:24px}.figure-is-32x32{height:32px;width:32px}.figure-is-48x48{height:48px;width:48px}.figure-is-64x64{height:64px;width:64px}.figure-is-96x96{height:96px;width:96px}.figure-is-128x128{height:128px;width:128px}.figure-is-256x256{height:256px;width:256px}.figure-is-512x512{height:512px;width:512px}.form-check>.form-check-input.form-check-input-pointer,.form-check>.form-check-label.form-check-label-pointer,.custom-checkbox>.custom-control-input.custom-control-input-pointer,.custom-checkbox>.custom-control-label.custom-control-label-pointer,.custom-switch>.custom-control-input.custom-control-input-pointer,.custom-switch>.custom-control-label.custom-control-label-pointer{cursor:pointer}.form-control-plaintext.form-control-xs,.form-control-plaintext.form-control-md,.form-control-plaintext.form-control-xl{padding-right:0;padding-left:0}.form-control-xs{height:calc(1.5em + .3rem + 2px);padding:.15rem .5rem;font-size:.75rem;line-height:1.5;border-radius:.15rem}.form-control-md{height:calc(1.5em + .94rem + 2px);padding:.47rem 1rem;font-size:1.125rem;line-height:1.5;border-radius:.25rem}.form-control-xl{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.5rem;line-height:1.5;border-radius:.4rem}.custom-select-xs{height:calc(1.5em + .3rem + 2px);padding-top:.15rem;padding-bottom:.15rem;padding-left:.5rem;font-size:.75rem}.custom-select-md{height:calc(1.5em + .94rem + 2px);padding-top:.47rem;padding-bottom:.47rem;padding-left:1rem;font-size:1.125rem}.custom-select-xl{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.5rem}.custom-control.custom-checkbox>.custom-control-input.custom-control-input-xs+.custom-control-label::before,.custom-control.custom-checkbox>.custom-control-input.custom-control-input-xs+.custom-control-label::after{width:.7rem;height:.7rem}.custom-control.custom-checkbox>.custom-control-input.custom-control-input-xs+.custom-control-label{line-height:"normal";padding-left:0}.custom-control.custom-checkbox>.custom-control-input.custom-control-input-sm+.custom-control-label::before,.custom-control.custom-checkbox>.custom-control-input.custom-control-input-sm+.custom-control-label::after{width:.8rem;height:.8rem}.custom-control.custom-checkbox>.custom-control-input.custom-control-input-sm+.custom-control-label{line-height:"normal";padding-left:0}.custom-control.custom-checkbox>.custom-control-input.custom-control-input-md+.custom-control-label::before,.custom-control.custom-checkbox>.custom-control-input.custom-control-input-md+.custom-control-label::after{width:1.25rem;height:1.25rem}.custom-control.custom-checkbox>.custom-control-input.custom-control-input-md+.custom-control-label{line-height:1.7rem;padding-left:3px}.custom-control.custom-checkbox>.custom-control-input.custom-control-input-lg+.custom-control-label::before,.custom-control.custom-checkbox>.custom-control-input.custom-control-input-lg+.custom-control-label::after{width:1.55rem;height:1.55rem}.custom-control.custom-checkbox>.custom-control-input.custom-control-input-lg+.custom-control-label{line-height:2rem;padding-left:6px}.custom-control.custom-checkbox>.custom-control-input.custom-control-input-xl+.custom-control-label::before,.custom-control.custom-checkbox>.custom-control-input.custom-control-input-xl+.custom-control-label::after{width:1.85rem;height:1.85rem}.custom-control.custom-checkbox>.custom-control-input.custom-control-input-xl+.custom-control-label{line-height:2.5rem;padding-left:10px}.custom-control.custom-radio>.custom-control-input.custom-control-input-xs+.custom-control-label::before,.custom-control.custom-radio>.custom-control-input.custom-control-input-xs+.custom-control-label::after{width:.7rem;height:.7rem}.custom-control.custom-radio>.custom-control-input.custom-control-input-xs+.custom-control-label{line-height:normal;padding-left:0}.custom-control.custom-radio>.custom-control-input.custom-control-input-sm+.custom-control-label::before,.custom-control.custom-radio>.custom-control-input.custom-control-input-sm+.custom-control-label::after{width:.8rem;height:.8rem}.custom-control.custom-radio>.custom-control-input.custom-control-input-sm+.custom-control-label{line-height:normal;padding-left:0}.custom-control.custom-radio>.custom-control-input.custom-control-input-md+.custom-control-label::before,.custom-control.custom-radio>.custom-control-input.custom-control-input-md+.custom-control-label::after{width:1.25rem;height:1.25rem}.custom-control.custom-radio>.custom-control-input.custom-control-input-md+.custom-control-label{line-height:1.7rem;padding-left:3px}.custom-control.custom-radio>.custom-control-input.custom-control-input-lg+.custom-control-label::before,.custom-control.custom-radio>.custom-control-input.custom-control-input-lg+.custom-control-label::after{width:1.55rem;height:1.55rem}.custom-control.custom-radio>.custom-control-input.custom-control-input-lg+.custom-control-label{line-height:2rem;padding-left:6px}.custom-control.custom-radio>.custom-control-input.custom-control-input-xl+.custom-control-label::before,.custom-control.custom-radio>.custom-control-input.custom-control-input-xl+.custom-control-label::after{width:1.85rem;height:1.85rem}.custom-control.custom-radio>.custom-control-input.custom-control-input-xl+.custom-control-label{line-height:2.5rem;padding-left:10px}.jumbotron.jumbotron-primary{background-color:#007bff;color:#fff}.jumbotron.jumbotron-secondary{background-color:#6c757d;color:#fff}.jumbotron.jumbotron-success{background-color:#28a745;color:#fff}.jumbotron.jumbotron-info{background-color:#17a2b8;color:#fff}.jumbotron.jumbotron-warning{background-color:#ffc107;color:#212529}.jumbotron.jumbotron-danger{background-color:#dc3545;color:#fff}.jumbotron.jumbotron-light{background-color:#f8f9fa;color:#212529}.jumbotron.jumbotron-dark{background-color:#343a40;color:#fff}.jumbotron.jumbotron-link{background-color:#3273dc;color:#fff}.modal-backdrop{z-index:-1}.modal.show{animation-duration:.25s;animation-fill-mode:both;animation-name:fadeIn}.page-item:not(.disabled) .page-link{cursor:pointer}.pagination-xs .page-link{padding:.125rem .25rem;font-size:.75rem;line-height:1.5}.pagination-xs .page-item:first-child .page-link{border-top-left-radius:.15rem;border-bottom-left-radius:.15rem}.pagination-xs .page-item:last-child .page-link{border-top-right-radius:.15rem;border-bottom-right-radius:.15rem}.pagination-md .page-link{padding:.625rem 1.25rem;font-size:1.125rem;line-height:1.5}.pagination-md .page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.pagination-md .page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.pagination-xl .page-link{padding:1rem 2rem;font-size:1.5rem;line-height:1.5}.pagination-xl .page-item:first-child .page-link{border-top-left-radius:.4rem;border-bottom-left-radius:.4rem}.pagination-xl .page-item:last-child .page-link{border-top-right-radius:.4rem;border-bottom-right-radius:.4rem}.custom-switch .custom-control-input.custom-control-input-primary:checked~.custom-control-label::before{background-color:#007bff;border-color:#007bff}.custom-switch .custom-control-input.custom-control-input-primary:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25);border-color:#007bff}.custom-switch .custom-control-input:disabled.custom-control-input-primary:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch .custom-control-input.custom-control-input-secondary:checked~.custom-control-label::before{background-color:#6c757d;border-color:#6c757d}.custom-switch .custom-control-input.custom-control-input-secondary:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(108,117,125,.25);border-color:#6c757d}.custom-switch .custom-control-input:disabled.custom-control-input-secondary:checked~.custom-control-label::before{background-color:rgba(108,117,125,.5)}.custom-switch .custom-control-input.custom-control-input-success:checked~.custom-control-label::before{background-color:#28a745;border-color:#28a745}.custom-switch .custom-control-input.custom-control-input-success:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25);border-color:#28a745}.custom-switch .custom-control-input:disabled.custom-control-input-success:checked~.custom-control-label::before{background-color:rgba(40,167,69,.5)}.custom-switch .custom-control-input.custom-control-input-info:checked~.custom-control-label::before{background-color:#17a2b8;border-color:#17a2b8}.custom-switch .custom-control-input.custom-control-input-info:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(23,162,184,.25);border-color:#17a2b8}.custom-switch .custom-control-input:disabled.custom-control-input-info:checked~.custom-control-label::before{background-color:rgba(23,162,184,.5)}.custom-switch .custom-control-input.custom-control-input-warning:checked~.custom-control-label::before{background-color:#ffc107;border-color:#ffc107}.custom-switch .custom-control-input.custom-control-input-warning:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(255,193,7,.25);border-color:#ffc107}.custom-switch .custom-control-input:disabled.custom-control-input-warning:checked~.custom-control-label::before{background-color:rgba(255,193,7,.5)}.custom-switch .custom-control-input.custom-control-input-danger:checked~.custom-control-label::before{background-color:#dc3545;border-color:#dc3545}.custom-switch .custom-control-input.custom-control-input-danger:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25);border-color:#dc3545}.custom-switch .custom-control-input:disabled.custom-control-input-danger:checked~.custom-control-label::before{background-color:rgba(220,53,69,.5)}.custom-switch .custom-control-input.custom-control-input-light:checked~.custom-control-label::before{background-color:#f8f9fa;border-color:#f8f9fa}.custom-switch .custom-control-input.custom-control-input-light:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(248,249,250,.25);border-color:#f8f9fa}.custom-switch .custom-control-input:disabled.custom-control-input-light:checked~.custom-control-label::before{background-color:rgba(248,249,250,.5)}.custom-switch .custom-control-input.custom-control-input-dark:checked~.custom-control-label::before{background-color:#343a40;border-color:#343a40}.custom-switch .custom-control-input.custom-control-input-dark:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(52,58,64,.25);border-color:#343a40}.custom-switch .custom-control-input:disabled.custom-control-input-dark:checked~.custom-control-label::before{background-color:rgba(52,58,64,.5)}.custom-switch .custom-control-input.custom-control-input-link:checked~.custom-control-label::before{background-color:#3273dc;border-color:#3273dc}.custom-switch .custom-control-input.custom-control-input-link:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(50,115,220,.25);border-color:#3273dc}.custom-switch .custom-control-input:disabled.custom-control-input-link:checked~.custom-control-label::before{background-color:rgba(50,115,220,.5)}.custom-switch .custom-control-input.custom-control-input-xs+.custom-control-label{line-height:1rem;vertical-align:middle;padding-left:0}.custom-switch .custom-control-input.custom-control-input-xs+.custom-control-label::before{height:.5rem;width:calc(.75rem + (.5rem/2));border-radius:1rem}.custom-switch .custom-control-input.custom-control-input-xs+.custom-control-label::after{height:calc(.5rem - 4px);width:calc(.5rem - 4px);border-radius:calc(.75rem - (.5rem/2))}.custom-switch .custom-control-input.custom-control-input-xs:checked~.custom-control-label::after{transform:translateX(calc(.75rem - (.5rem/2)))}.custom-switch .custom-control-input.custom-control-input-sm+.custom-control-label{line-height:1.25rem;vertical-align:middle;padding-left:0}.custom-switch .custom-control-input.custom-control-input-sm+.custom-control-label::before{height:.75rem;width:calc(1rem + (.75rem/2));border-radius:1.5rem}.custom-switch .custom-control-input.custom-control-input-sm+.custom-control-label::after{height:calc(.75rem - 4px);width:calc(.75rem - 4px);border-radius:calc(1rem - (.75rem/2))}.custom-switch .custom-control-input.custom-control-input-sm:checked~.custom-control-label::after{transform:translateX(calc(1rem - (.75rem/2)))}.custom-switch .custom-control-input.custom-control-input-md+.custom-control-label{line-height:2rem;vertical-align:middle;padding-left:2rem}.custom-switch .custom-control-input.custom-control-input-md+.custom-control-label::before{height:1.5rem;width:calc(2rem + (1.5rem/2));border-radius:3rem}.custom-switch .custom-control-input.custom-control-input-md+.custom-control-label::after{height:calc(1.5rem - 4px);width:calc(1.5rem - 4px);border-radius:calc(2rem - (1.5rem/2))}.custom-switch .custom-control-input.custom-control-input-md:checked~.custom-control-label::after{transform:translateX(calc(2rem - (1.5rem/2)))}.custom-switch .custom-control-input.custom-control-input-lg+.custom-control-label{line-height:2.5rem;vertical-align:middle;padding-left:3rem}.custom-switch .custom-control-input.custom-control-input-lg+.custom-control-label::before{height:2rem;width:calc(3rem + (2rem/2));border-radius:4rem}.custom-switch .custom-control-input.custom-control-input-lg+.custom-control-label::after{height:calc(2rem - 4px);width:calc(2rem - 4px);border-radius:calc(3rem - (2rem/2))}.custom-switch .custom-control-input.custom-control-input-lg:checked~.custom-control-label::after{transform:translateX(calc(3rem - (2rem/2)))}.custom-switch .custom-control-input.custom-control-input-xl+.custom-control-label{line-height:3rem;vertical-align:middle;padding-left:4rem}.custom-switch .custom-control-input.custom-control-input-xl+.custom-control-label::before{height:2.5rem;width:calc(4rem + (2.5rem/2));border-radius:5rem}.custom-switch .custom-control-input.custom-control-input-xl+.custom-control-label::after{height:calc(2.5rem - 4px);width:calc(2.5rem - 4px);border-radius:calc(4rem - (2.5rem/2))}.custom-switch .custom-control-input.custom-control-input-xl:checked~.custom-control-label::after{transform:translateX(calc(4rem - (2.5rem/2)))}table.table tbody tr.selected{background-color:var(--primary)}tr.table-row-selectable:hover{cursor:pointer} +.snackbar{align-items:center;background-color:var(--b-snackbar-background,#323232);color:var(--b-snackbar-text-color,#fff);font-size:.875rem;line-height:1.42857;opacity:0;padding:.875rem 1.5rem;position:absolute;bottom:0;left:0;transform:translateY(100%);transition:opacity 0s .195s,transform .195s cubic-bezier(.4,0,1,1);width:100%;z-index:60}@media(min-width:768px){.snackbar{border-radius:2px;max-width:35.5rem;min-width:18rem;left:50%;transform:translate(-50%,100%);width:auto}}@media(min-width:768px){.snackbar{transition:opacity 0s .2535s,transform .2535s cubic-bezier(.4,0,1,1)}}@media(min-width:1200px){.snackbar{transition:opacity 0s .13s,transform .13s cubic-bezier(.4,0,1,1)}}@media screen and (prefers-reduced-motion:reduce){.snackbar{transition:none}}.snackbar.snackbar-show{transition-duration:.225s;transition-property:transform;transition-timing-function:cubic-bezier(0,0,.2,1);opacity:1;transform:translateY(0)}@media(min-width:768px){.snackbar.snackbar-show{transition-duration:.2925s}}@media(min-width:1200px){.snackbar.snackbar-show{transition-duration:.15s}}@media screen and (prefers-reduced-motion:reduce){.snackbar.snackbar-show{transition:none}}@media(min-width:768px){.snackbar.snackbar-show{transform:translate(-50%,-1.5rem)}}.snackbar-header{display:flex;-ms-flex-pack:justify;justify-content:space-between;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:DARKEN(var(--b-snackbar-background,#323232),30%);margin-right:auto;min-width:0;font-weight:bold;padding-bottom:.875rem}.snackbar-footer{display:flex;-ms-flex-pack:justify;justify-content:space-between;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:DARKEN(var(--b-snackbar-background,#323232),30%);margin-right:auto;min-width:0;padding-top:.875rem}.snackbar-body{display:flex;-ms-flex-pack:justify;justify-content:space-between;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-right:auto;max-height:100%;min-width:0}.snackbar-action-button{transition-duration:.3s;transition-property:background-color,background-image;transition-timing-function:cubic-bezier(.4,0,.2,1);background-color:transparent;background-image:none;border:0;color:var(--b-snackbar-button-color,var(--b-snackbar-button-color,#ff4081));cursor:pointer;display:block;flex-shrink:0;font-size:inherit;font-weight:500;line-height:inherit;padding:0;text-transform:uppercase;white-space:nowrap}@media(min-width:768px){.snackbar-action-button{transition-duration:.39s}}@media(min-width:1200px){.snackbar-action-button{transition-duration:.2s}}@media screen and (prefers-reduced-motion:reduce){.snackbar-action-button{transition:none}}.snackbar-action-button:focus,.snackbar-action-button:hover{color:var(--b-snackbar-button-hover-color,var(--b-snackbar-button-hover-color,#ff80ab));text-decoration:none}@media(min-width:768px){.snackbar-action-button{margin-left:3rem}}.snackbar-action-button:focus{outline:0}@media(min-width:768px){.snackbar-left,.snackbar-right{transform:translateY(100%)}.snackbar-left.snackbar-show,.snackbar-right.snackbar-show{transform:translateY(-1.5rem)}}@media(min-width:768px){.snackbar-left{left:1.5rem}}@media(min-width:768px){.snackbar-right{right:1.5rem;left:auto}}.snackbar-multi-line{padding-top:1.25rem;padding-bottom:1.25rem}.snackbar-multi-line .snackbar-body{white-space:normal}.snackbar-primary{background-color:var(--b-snackbar-background-primary,#cce5ff);color:var(--b-snackbar-text-primary,#004085)}.snackbar-action-button-primary{color:var(--b-snackbar-button-primary,#ff4081)}.snackbar-action-button-primary:focus,.snackbar-action-button-primary:hover{color:var(--b-snackbar-button-hover-primary,#ff80ab)}.snackbar-secondary{background-color:var(--b-snackbar-background-secondary,#e2e3e5);color:var(--b-snackbar-text-secondary,#383d41)}.snackbar-action-button-secondary{color:var(--b-snackbar-button-secondary,#ff4081)}.snackbar-action-button-secondary:focus,.snackbar-action-button-secondary:hover{color:var(--b-snackbar-button-hover-secondary,#ff80ab)}.snackbar-success{background-color:var(--b-snackbar-background-success,#d4edda);color:var(--b-snackbar-text-success,#155724)}.snackbar-action-button-success{color:var(--b-snackbar-button-success,#ff4081)}.snackbar-action-button-success:focus,.snackbar-action-button-success:hover{color:var(--b-snackbar-button-hover-success,#ff80ab)}.snackbar-danger{background-color:var(--b-snackbar-background-danger,#f8d7da);color:var(--b-snackbar-text-danger,#721c24)}.snackbar-action-button-danger{color:var(--b-snackbar-button-danger,#ff4081)}.snackbar-action-button-danger:focus,.snackbar-action-button-danger:hover{color:var(--b-snackbar-button-hover-danger,#ff80ab)}.snackbar-warning{background-color:var(--b-snackbar-background-warning,#fff3cd);color:var(--b-snackbar-text-warning,#856404)}.snackbar-action-button-warning{color:var(--b-snackbar-button-warning,#ff4081)}.snackbar-action-button-warning:focus,.snackbar-action-button-warning:hover{color:var(--b-snackbar-button-hover-warning,#ff80ab)}.snackbar-info{background-color:var(--b-snackbar-background-info,#d1ecf1);color:var(--b-snackbar-text-info,#0c5460)}.snackbar-action-button-info{color:var(--b-snackbar-button-info,#ff4081)}.snackbar-action-button-info:focus,.snackbar-action-button-info:hover{color:var(--b-snackbar-button-hover-info,#ff80ab)}.snackbar-light{background-color:var(--b-snackbar-background-light,#fefefe);color:var(--b-snackbar-text-light,#818182)}.snackbar-action-button-light{color:var(--b-snackbar-button-light,#ff4081)}.snackbar-action-button-light:focus,.snackbar-action-button-light:hover{color:var(--b-snackbar-button-hover-light,#ff80ab)}.snackbar-dark{background-color:var(--b-snackbar-background-dark,#d6d8d9);color:var(--b-snackbar-text-dark,#1b1e21)}.snackbar-action-button-dark{color:var(--b-snackbar-button-dark,#ff4081)}.snackbar-action-button-dark:focus,.snackbar-action-button-dark:hover{color:var(--b-snackbar-button-hover-dark,#ff80ab)}.snackbar-stack{display:flex;flex-direction:column;position:fixed;z-index:60;bottom:0}.snackbar-stack .snackbar{position:relative;flex-direction:row;margin-bottom:0}.snackbar-stack .snackbar:not(:last-child){margin-bottom:1.5rem}@media(min-width:576px){.snackbar-stack-center{left:50%;transform:translate(-50%,0%)}.snackbar-stack-left{left:1.5rem}.snackbar-stack-right{right:1.5rem}} +.flag-icon-background{background-size:contain;background-position:50%;background-repeat:no-repeat}.flag-icon{background-size:contain;background-position:50%;background-repeat:no-repeat;position:relative;display:inline-block;width:1.33333333em;line-height:1em}.flag-icon:before{content:" "}.flag-icon.flag-icon-squared{width:1em}.flag-icon-ad{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ad.svg)}.flag-icon-ad.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ad.svg)}.flag-icon-ae{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ae.svg)}.flag-icon-ae.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ae.svg)}.flag-icon-af{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/af.svg)}.flag-icon-af.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/af.svg)}.flag-icon-ag{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ag.svg)}.flag-icon-ag.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ag.svg)}.flag-icon-ai{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ai.svg)}.flag-icon-ai.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ai.svg)}.flag-icon-al{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/al.svg)}.flag-icon-al.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/al.svg)}.flag-icon-am{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/am.svg)}.flag-icon-am.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/am.svg)}.flag-icon-ao{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ao.svg)}.flag-icon-ao.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ao.svg)}.flag-icon-aq{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/aq.svg)}.flag-icon-aq.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/aq.svg)}.flag-icon-ar{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ar.svg)}.flag-icon-ar.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ar.svg)}.flag-icon-as{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/as.svg)}.flag-icon-as.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/as.svg)}.flag-icon-at{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/at.svg)}.flag-icon-at.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/at.svg)}.flag-icon-au{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/au.svg)}.flag-icon-au.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/au.svg)}.flag-icon-aw{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/aw.svg)}.flag-icon-aw.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/aw.svg)}.flag-icon-ax{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ax.svg)}.flag-icon-ax.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ax.svg)}.flag-icon-az{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/az.svg)}.flag-icon-az.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/az.svg)}.flag-icon-ba{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ba.svg)}.flag-icon-ba.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ba.svg)}.flag-icon-bb{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/bb.svg)}.flag-icon-bb.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/bb.svg)}.flag-icon-bd{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/bd.svg)}.flag-icon-bd.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/bd.svg)}.flag-icon-be{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/be.svg)}.flag-icon-be.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/be.svg)}.flag-icon-bf{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/bf.svg)}.flag-icon-bf.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/bf.svg)}.flag-icon-bg{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/bg.svg)}.flag-icon-bg.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/bg.svg)}.flag-icon-bh{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/bh.svg)}.flag-icon-bh.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/bh.svg)}.flag-icon-bi{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/bi.svg)}.flag-icon-bi.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/bi.svg)}.flag-icon-bj{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/bj.svg)}.flag-icon-bj.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/bj.svg)}.flag-icon-bl{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/bl.svg)}.flag-icon-bl.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/bl.svg)}.flag-icon-bm{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/bm.svg)}.flag-icon-bm.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/bm.svg)}.flag-icon-bn{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/bn.svg)}.flag-icon-bn.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/bn.svg)}.flag-icon-bo{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/bo.svg)}.flag-icon-bo.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/bo.svg)}.flag-icon-bq{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/bq.svg)}.flag-icon-bq.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/bq.svg)}.flag-icon-br{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/br.svg)}.flag-icon-br.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/br.svg)}.flag-icon-bs{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/bs.svg)}.flag-icon-bs.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/bs.svg)}.flag-icon-bt{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/bt.svg)}.flag-icon-bt.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/bt.svg)}.flag-icon-bv{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/bv.svg)}.flag-icon-bv.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/bv.svg)}.flag-icon-bw{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/bw.svg)}.flag-icon-bw.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/bw.svg)}.flag-icon-by{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/by.svg)}.flag-icon-by.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/by.svg)}.flag-icon-bz{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/bz.svg)}.flag-icon-bz.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/bz.svg)}.flag-icon-ca{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ca.svg)}.flag-icon-ca.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ca.svg)}.flag-icon-cc{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/cc.svg)}.flag-icon-cc.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/cc.svg)}.flag-icon-cd{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/cd.svg)}.flag-icon-cd.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/cd.svg)}.flag-icon-cf{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/cf.svg)}.flag-icon-cf.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/cf.svg)}.flag-icon-cg{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/cg.svg)}.flag-icon-cg.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/cg.svg)}.flag-icon-ch{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ch.svg)}.flag-icon-ch.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ch.svg)}.flag-icon-ci{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ci.svg)}.flag-icon-ci.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ci.svg)}.flag-icon-ck{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ck.svg)}.flag-icon-ck.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ck.svg)}.flag-icon-cl{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/cl.svg)}.flag-icon-cl.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/cl.svg)}.flag-icon-cm{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/cm.svg)}.flag-icon-cm.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/cm.svg)}.flag-icon-cn{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/cn.svg)}.flag-icon-cn.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/cn.svg)}.flag-icon-co{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/co.svg)}.flag-icon-co.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/co.svg)}.flag-icon-cr{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/cr.svg)}.flag-icon-cr.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/cr.svg)}.flag-icon-cu{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/cu.svg)}.flag-icon-cu.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/cu.svg)}.flag-icon-cv{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/cv.svg)}.flag-icon-cv.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/cv.svg)}.flag-icon-cw{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/cw.svg)}.flag-icon-cw.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/cw.svg)}.flag-icon-cx{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/cx.svg)}.flag-icon-cx.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/cx.svg)}.flag-icon-cy{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/cy.svg)}.flag-icon-cy.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/cy.svg)}.flag-icon-cz{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/cz.svg)}.flag-icon-cz.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/cz.svg)}.flag-icon-de{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/de.svg)}.flag-icon-de.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/de.svg)}.flag-icon-dj{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/dj.svg)}.flag-icon-dj.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/dj.svg)}.flag-icon-dk{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/dk.svg)}.flag-icon-dk.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/dk.svg)}.flag-icon-dm{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/dm.svg)}.flag-icon-dm.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/dm.svg)}.flag-icon-do{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/do.svg)}.flag-icon-do.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/do.svg)}.flag-icon-dz{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/dz.svg)}.flag-icon-dz.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/dz.svg)}.flag-icon-ec{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ec.svg)}.flag-icon-ec.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ec.svg)}.flag-icon-ee{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ee.svg)}.flag-icon-ee.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ee.svg)}.flag-icon-eg{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/eg.svg)}.flag-icon-eg.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/eg.svg)}.flag-icon-eh{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/eh.svg)}.flag-icon-eh.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/eh.svg)}.flag-icon-er{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/er.svg)}.flag-icon-er.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/er.svg)}.flag-icon-es{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/es.svg)}.flag-icon-es.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/es.svg)}.flag-icon-et{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/et.svg)}.flag-icon-et.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/et.svg)}.flag-icon-fi{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/fi.svg)}.flag-icon-fi.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/fi.svg)}.flag-icon-fj{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/fj.svg)}.flag-icon-fj.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/fj.svg)}.flag-icon-fk{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/fk.svg)}.flag-icon-fk.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/fk.svg)}.flag-icon-fm{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/fm.svg)}.flag-icon-fm.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/fm.svg)}.flag-icon-fo{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/fo.svg)}.flag-icon-fo.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/fo.svg)}.flag-icon-fr{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/fr.svg)}.flag-icon-fr.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/fr.svg)}.flag-icon-ga{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ga.svg)}.flag-icon-ga.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ga.svg)}.flag-icon-gb{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/gb.svg)}.flag-icon-gb.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/gb.svg)}.flag-icon-gd{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/gd.svg)}.flag-icon-gd.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/gd.svg)}.flag-icon-ge{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ge.svg)}.flag-icon-ge.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ge.svg)}.flag-icon-gf{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/gf.svg)}.flag-icon-gf.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/gf.svg)}.flag-icon-gg{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/gg.svg)}.flag-icon-gg.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/gg.svg)}.flag-icon-gh{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/gh.svg)}.flag-icon-gh.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/gh.svg)}.flag-icon-gi{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/gi.svg)}.flag-icon-gi.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/gi.svg)}.flag-icon-gl{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/gl.svg)}.flag-icon-gl.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/gl.svg)}.flag-icon-gm{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/gm.svg)}.flag-icon-gm.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/gm.svg)}.flag-icon-gn{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/gn.svg)}.flag-icon-gn.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/gn.svg)}.flag-icon-gp{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/gp.svg)}.flag-icon-gp.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/gp.svg)}.flag-icon-gq{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/gq.svg)}.flag-icon-gq.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/gq.svg)}.flag-icon-gr{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/gr.svg)}.flag-icon-gr.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/gr.svg)}.flag-icon-gs{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/gs.svg)}.flag-icon-gs.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/gs.svg)}.flag-icon-gt{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/gt.svg)}.flag-icon-gt.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/gt.svg)}.flag-icon-gu{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/gu.svg)}.flag-icon-gu.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/gu.svg)}.flag-icon-gw{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/gw.svg)}.flag-icon-gw.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/gw.svg)}.flag-icon-gy{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/gy.svg)}.flag-icon-gy.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/gy.svg)}.flag-icon-hk{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/hk.svg)}.flag-icon-hk.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/hk.svg)}.flag-icon-hm{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/hm.svg)}.flag-icon-hm.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/hm.svg)}.flag-icon-hn{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/hn.svg)}.flag-icon-hn.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/hn.svg)}.flag-icon-hr{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/hr.svg)}.flag-icon-hr.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/hr.svg)}.flag-icon-ht{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ht.svg)}.flag-icon-ht.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ht.svg)}.flag-icon-hu{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/hu.svg)}.flag-icon-hu.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/hu.svg)}.flag-icon-id{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/id.svg)}.flag-icon-id.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/id.svg)}.flag-icon-ie{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ie.svg)}.flag-icon-ie.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ie.svg)}.flag-icon-il{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/il.svg)}.flag-icon-il.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/il.svg)}.flag-icon-im{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/im.svg)}.flag-icon-im.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/im.svg)}.flag-icon-in{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/in.svg)}.flag-icon-in.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/in.svg)}.flag-icon-io{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/io.svg)}.flag-icon-io.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/io.svg)}.flag-icon-iq{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/iq.svg)}.flag-icon-iq.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/iq.svg)}.flag-icon-ir{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ir.svg)}.flag-icon-ir.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ir.svg)}.flag-icon-is{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/is.svg)}.flag-icon-is.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/is.svg)}.flag-icon-it{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/it.svg)}.flag-icon-it.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/it.svg)}.flag-icon-je{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/je.svg)}.flag-icon-je.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/je.svg)}.flag-icon-jm{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/jm.svg)}.flag-icon-jm.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/jm.svg)}.flag-icon-jo{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/jo.svg)}.flag-icon-jo.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/jo.svg)}.flag-icon-jp{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/jp.svg)}.flag-icon-jp.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/jp.svg)}.flag-icon-ke{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ke.svg)}.flag-icon-ke.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ke.svg)}.flag-icon-kg{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/kg.svg)}.flag-icon-kg.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/kg.svg)}.flag-icon-kh{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/kh.svg)}.flag-icon-kh.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/kh.svg)}.flag-icon-ki{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ki.svg)}.flag-icon-ki.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ki.svg)}.flag-icon-km{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/km.svg)}.flag-icon-km.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/km.svg)}.flag-icon-kn{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/kn.svg)}.flag-icon-kn.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/kn.svg)}.flag-icon-kp{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/kp.svg)}.flag-icon-kp.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/kp.svg)}.flag-icon-kr{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/kr.svg)}.flag-icon-kr.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/kr.svg)}.flag-icon-kw{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/kw.svg)}.flag-icon-kw.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/kw.svg)}.flag-icon-ky{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ky.svg)}.flag-icon-ky.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ky.svg)}.flag-icon-kz{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/kz.svg)}.flag-icon-kz.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/kz.svg)}.flag-icon-la{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/la.svg)}.flag-icon-la.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/la.svg)}.flag-icon-lb{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/lb.svg)}.flag-icon-lb.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/lb.svg)}.flag-icon-lc{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/lc.svg)}.flag-icon-lc.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/lc.svg)}.flag-icon-li{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/li.svg)}.flag-icon-li.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/li.svg)}.flag-icon-lk{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/lk.svg)}.flag-icon-lk.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/lk.svg)}.flag-icon-lr{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/lr.svg)}.flag-icon-lr.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/lr.svg)}.flag-icon-ls{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ls.svg)}.flag-icon-ls.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ls.svg)}.flag-icon-lt{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/lt.svg)}.flag-icon-lt.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/lt.svg)}.flag-icon-lu{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/lu.svg)}.flag-icon-lu.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/lu.svg)}.flag-icon-lv{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/lv.svg)}.flag-icon-lv.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/lv.svg)}.flag-icon-ly{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ly.svg)}.flag-icon-ly.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ly.svg)}.flag-icon-ma{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ma.svg)}.flag-icon-ma.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ma.svg)}.flag-icon-mc{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/mc.svg)}.flag-icon-mc.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/mc.svg)}.flag-icon-md{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/md.svg)}.flag-icon-md.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/md.svg)}.flag-icon-me{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/me.svg)}.flag-icon-me.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/me.svg)}.flag-icon-mf{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/mf.svg)}.flag-icon-mf.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/mf.svg)}.flag-icon-mg{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/mg.svg)}.flag-icon-mg.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/mg.svg)}.flag-icon-mh{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/mh.svg)}.flag-icon-mh.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/mh.svg)}.flag-icon-mk{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/mk.svg)}.flag-icon-mk.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/mk.svg)}.flag-icon-ml{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ml.svg)}.flag-icon-ml.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ml.svg)}.flag-icon-mm{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/mm.svg)}.flag-icon-mm.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/mm.svg)}.flag-icon-mn{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/mn.svg)}.flag-icon-mn.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/mn.svg)}.flag-icon-mo{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/mo.svg)}.flag-icon-mo.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/mo.svg)}.flag-icon-mp{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/mp.svg)}.flag-icon-mp.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/mp.svg)}.flag-icon-mq{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/mq.svg)}.flag-icon-mq.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/mq.svg)}.flag-icon-mr{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/mr.svg)}.flag-icon-mr.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/mr.svg)}.flag-icon-ms{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ms.svg)}.flag-icon-ms.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ms.svg)}.flag-icon-mt{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/mt.svg)}.flag-icon-mt.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/mt.svg)}.flag-icon-mu{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/mu.svg)}.flag-icon-mu.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/mu.svg)}.flag-icon-mv{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/mv.svg)}.flag-icon-mv.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/mv.svg)}.flag-icon-mw{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/mw.svg)}.flag-icon-mw.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/mw.svg)}.flag-icon-mx{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/mx.svg)}.flag-icon-mx.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/mx.svg)}.flag-icon-my{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/my.svg)}.flag-icon-my.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/my.svg)}.flag-icon-mz{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/mz.svg)}.flag-icon-mz.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/mz.svg)}.flag-icon-na{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/na.svg)}.flag-icon-na.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/na.svg)}.flag-icon-nc{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/nc.svg)}.flag-icon-nc.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/nc.svg)}.flag-icon-ne{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ne.svg)}.flag-icon-ne.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ne.svg)}.flag-icon-nf{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/nf.svg)}.flag-icon-nf.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/nf.svg)}.flag-icon-ng{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ng.svg)}.flag-icon-ng.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ng.svg)}.flag-icon-ni{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ni.svg)}.flag-icon-ni.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ni.svg)}.flag-icon-nl{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/nl.svg)}.flag-icon-nl.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/nl.svg)}.flag-icon-no{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/no.svg)}.flag-icon-no.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/no.svg)}.flag-icon-np{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/np.svg)}.flag-icon-np.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/np.svg)}.flag-icon-nr{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/nr.svg)}.flag-icon-nr.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/nr.svg)}.flag-icon-nu{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/nu.svg)}.flag-icon-nu.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/nu.svg)}.flag-icon-nz{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/nz.svg)}.flag-icon-nz.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/nz.svg)}.flag-icon-om{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/om.svg)}.flag-icon-om.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/om.svg)}.flag-icon-pa{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/pa.svg)}.flag-icon-pa.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/pa.svg)}.flag-icon-pe{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/pe.svg)}.flag-icon-pe.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/pe.svg)}.flag-icon-pf{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/pf.svg)}.flag-icon-pf.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/pf.svg)}.flag-icon-pg{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/pg.svg)}.flag-icon-pg.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/pg.svg)}.flag-icon-ph{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ph.svg)}.flag-icon-ph.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ph.svg)}.flag-icon-pk{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/pk.svg)}.flag-icon-pk.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/pk.svg)}.flag-icon-pl{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/pl.svg)}.flag-icon-pl.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/pl.svg)}.flag-icon-pm{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/pm.svg)}.flag-icon-pm.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/pm.svg)}.flag-icon-pn{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/pn.svg)}.flag-icon-pn.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/pn.svg)}.flag-icon-pr{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/pr.svg)}.flag-icon-pr.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/pr.svg)}.flag-icon-ps{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ps.svg)}.flag-icon-ps.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ps.svg)}.flag-icon-pt{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/pt.svg)}.flag-icon-pt.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/pt.svg)}.flag-icon-pw{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/pw.svg)}.flag-icon-pw.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/pw.svg)}.flag-icon-py{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/py.svg)}.flag-icon-py.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/py.svg)}.flag-icon-qa{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/qa.svg)}.flag-icon-qa.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/qa.svg)}.flag-icon-re{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/re.svg)}.flag-icon-re.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/re.svg)}.flag-icon-ro{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ro.svg)}.flag-icon-ro.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ro.svg)}.flag-icon-rs{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/rs.svg)}.flag-icon-rs.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/rs.svg)}.flag-icon-ru{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ru.svg)}.flag-icon-ru.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ru.svg)}.flag-icon-rw{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/rw.svg)}.flag-icon-rw.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/rw.svg)}.flag-icon-sa{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/sa.svg)}.flag-icon-sa.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/sa.svg)}.flag-icon-sb{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/sb.svg)}.flag-icon-sb.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/sb.svg)}.flag-icon-sc{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/sc.svg)}.flag-icon-sc.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/sc.svg)}.flag-icon-sd{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/sd.svg)}.flag-icon-sd.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/sd.svg)}.flag-icon-se{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/se.svg)}.flag-icon-se.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/se.svg)}.flag-icon-sg{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/sg.svg)}.flag-icon-sg.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/sg.svg)}.flag-icon-sh{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/sh.svg)}.flag-icon-sh.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/sh.svg)}.flag-icon-si{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/si.svg)}.flag-icon-si.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/si.svg)}.flag-icon-sj{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/sj.svg)}.flag-icon-sj.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/sj.svg)}.flag-icon-sk{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/sk.svg)}.flag-icon-sk.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/sk.svg)}.flag-icon-sl{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/sl.svg)}.flag-icon-sl.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/sl.svg)}.flag-icon-sm{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/sm.svg)}.flag-icon-sm.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/sm.svg)}.flag-icon-sn{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/sn.svg)}.flag-icon-sn.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/sn.svg)}.flag-icon-so{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/so.svg)}.flag-icon-so.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/so.svg)}.flag-icon-sr{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/sr.svg)}.flag-icon-sr.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/sr.svg)}.flag-icon-ss{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ss.svg)}.flag-icon-ss.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ss.svg)}.flag-icon-st{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/st.svg)}.flag-icon-st.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/st.svg)}.flag-icon-sv{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/sv.svg)}.flag-icon-sv.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/sv.svg)}.flag-icon-sx{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/sx.svg)}.flag-icon-sx.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/sx.svg)}.flag-icon-sy{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/sy.svg)}.flag-icon-sy.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/sy.svg)}.flag-icon-sz{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/sz.svg)}.flag-icon-sz.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/sz.svg)}.flag-icon-tc{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/tc.svg)}.flag-icon-tc.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/tc.svg)}.flag-icon-td{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/td.svg)}.flag-icon-td.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/td.svg)}.flag-icon-tf{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/tf.svg)}.flag-icon-tf.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/tf.svg)}.flag-icon-tg{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/tg.svg)}.flag-icon-tg.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/tg.svg)}.flag-icon-th{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/th.svg)}.flag-icon-th.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/th.svg)}.flag-icon-tj{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/tj.svg)}.flag-icon-tj.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/tj.svg)}.flag-icon-tk{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/tk.svg)}.flag-icon-tk.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/tk.svg)}.flag-icon-tl{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/tl.svg)}.flag-icon-tl.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/tl.svg)}.flag-icon-tm{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/tm.svg)}.flag-icon-tm.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/tm.svg)}.flag-icon-tn{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/tn.svg)}.flag-icon-tn.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/tn.svg)}.flag-icon-to{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/to.svg)}.flag-icon-to.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/to.svg)}.flag-icon-tr{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/tr.svg)}.flag-icon-tr.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/tr.svg)}.flag-icon-tt{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/tt.svg)}.flag-icon-tt.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/tt.svg)}.flag-icon-tv{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/tv.svg)}.flag-icon-tv.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/tv.svg)}.flag-icon-tw{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/tw.svg)}.flag-icon-tw.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/tw.svg)}.flag-icon-tz{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/tz.svg)}.flag-icon-tz.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/tz.svg)}.flag-icon-ua{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ua.svg)}.flag-icon-ua.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ua.svg)}.flag-icon-ug{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ug.svg)}.flag-icon-ug.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ug.svg)}.flag-icon-um{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/um.svg)}.flag-icon-um.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/um.svg)}.flag-icon-us{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/us.svg)}.flag-icon-us.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/us.svg)}.flag-icon-uy{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/uy.svg)}.flag-icon-uy.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/uy.svg)}.flag-icon-uz{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/uz.svg)}.flag-icon-uz.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/uz.svg)}.flag-icon-va{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/va.svg)}.flag-icon-va.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/va.svg)}.flag-icon-vc{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/vc.svg)}.flag-icon-vc.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/vc.svg)}.flag-icon-ve{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ve.svg)}.flag-icon-ve.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ve.svg)}.flag-icon-vg{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/vg.svg)}.flag-icon-vg.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/vg.svg)}.flag-icon-vi{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/vi.svg)}.flag-icon-vi.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/vi.svg)}.flag-icon-vn{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/vn.svg)}.flag-icon-vn.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/vn.svg)}.flag-icon-vu{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/vu.svg)}.flag-icon-vu.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/vu.svg)}.flag-icon-wf{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/wf.svg)}.flag-icon-wf.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/wf.svg)}.flag-icon-ws{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ws.svg)}.flag-icon-ws.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ws.svg)}.flag-icon-ye{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/ye.svg)}.flag-icon-ye.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/ye.svg)}.flag-icon-yt{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/yt.svg)}.flag-icon-yt.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/yt.svg)}.flag-icon-za{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/za.svg)}.flag-icon-za.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/za.svg)}.flag-icon-zm{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/zm.svg)}.flag-icon-zm.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/zm.svg)}.flag-icon-zw{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/zw.svg)}.flag-icon-zw.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/zw.svg)}.flag-icon-es-ca{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/es-ca.svg)}.flag-icon-es-ca.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/es-ca.svg)}.flag-icon-es-ga{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/es-ga.svg)}.flag-icon-es-ga.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/es-ga.svg)}.flag-icon-eu{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/eu.svg)}.flag-icon-eu.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/eu.svg)}.flag-icon-gb-eng{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/gb-eng.svg)}.flag-icon-gb-eng.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/gb-eng.svg)}.flag-icon-gb-nir{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/gb-nir.svg)}.flag-icon-gb-nir.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/gb-nir.svg)}.flag-icon-gb-sct{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/gb-sct.svg)}.flag-icon-gb-sct.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/gb-sct.svg)}.flag-icon-gb-wls{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/gb-wls.svg)}.flag-icon-gb-wls.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/gb-wls.svg)}.flag-icon-un{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/un.svg)}.flag-icon-un.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/un.svg)}.flag-icon-xk{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/4x3/xk.svg)}.flag-icon-xk.flag-icon-squared{background-image:url(_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/flags/1x1/xk.svg)} +#main-navbar-tools a.dropdown-toggle{text-decoration:none;color:#fff}.navbar .dropdown-submenu{position:relative}.navbar .dropdown-menu{margin:0;padding:0}.navbar .dropdown-menu a{font-size:.9em;padding:10px 15px;display:block;min-width:210px;text-align:left;border-radius:.25rem;min-height:44px}.navbar .dropdown-submenu a::after{transform:rotate(-90deg);position:absolute;right:16px;top:18px}.navbar .dropdown-submenu .dropdown-menu{top:0;left:100%}.card-header .btn{padding:2px 6px}.card-header h5{margin:0}.container>.card{box-shadow:0 .125rem .25rem rgba(0,0,0,.075) !important}@media screen and (min-width:768px){.navbar .dropdown:hover>.dropdown-menu{display:block}.navbar .dropdown-submenu:hover>.dropdown-menu{display:block}}.input-validation-error{border-color:#dc3545}.field-validation-error{font-size:.8em}.dataTables_scrollBody{min-height:248px}div.dataTables_wrapper div.dataTables_info{padding-top:11px;white-space:nowrap}div.dataTables_wrapper div.dataTables_length label{padding-top:10px;margin-bottom:0}.rtl .dropdown-menu-right{right:auto;left:0}.rtl .dropdown-menu-right a{text-align:right}.rtl .navbar .dropdown-menu a{text-align:right}.rtl .navbar .dropdown-submenu .dropdown-menu{top:0;left:auto;right:100%}.navbar-dark .navbar-nav .nav-link{color:#000 !important}.navbar-nav>.nav-item>.nav-link,.navbar-nav>.nav-item>.dropdown>.nav-link{color:#fff !important}.navbar-nav>.nav-item>div>button{color:#fff}.btn span.spinner-border{margin-right:.5rem} diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/global.js b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/global.js new file mode 100644 index 0000000000..f19dec7797 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/global.js @@ -0,0 +1,791 @@ +var abp=abp||{};(function(){abp.utils=abp.utils||{};abp.domReady=function(n){document.readyState==="complete"||document.readyState==="interactive"?setTimeout(n,1):document.addEventListener("DOMContentLoaded",n)};abp.utils.setCookieValue=function(n,t,i,r,u){var f=encodeURIComponent(n)+"=";t&&(f=f+encodeURIComponent(t));i&&(f=f+"; expires="+i);r&&(f=f+"; path="+r);u&&(f=f+"; secure");document.cookie=f};abp.utils.getCookieValue=function(n){for(var i,r=document.cookie.split("; "),t=0;t { + window.blazorise.textEdit.keyPress(instances[elementId], e); + }); + + element.addEventListener("paste", (e) => { + window.blazorise.textEdit.paste(instances[elementId], e); + }); + + return true; + }, + destroy: (element, elementId) => { + var instances = window.blazorise.textEdit._instances || {}; + delete instances[elementId]; + return true; + }, + keyPress: (validator, e) => { + var currentValue = String.fromCharCode(e.which); + + return validator.isValid(currentValue) || e.preventDefault(); + }, + paste: (validator, e) => { + return validator.isValid(e.clipboardData.getData("text/plain")) || e.preventDefault(); + } + }, + numericEdit: { + _instances: [], + + initialize: (dotnetAdapter, element, elementId, decimals, separator, step, min, max) => { + window.blazorise.numericEdit._instances[elementId] = new window.blazorise.NumericMaskValidator(dotnetAdapter, element, elementId, decimals, separator, step, min, max); + + element.addEventListener("keypress", (e) => { + window.blazorise.numericEdit.keyPress(window.blazorise.numericEdit._instances[elementId], e); + }); + + element.addEventListener("keydown", (e) => { + window.blazorise.numericEdit.keyDown(window.blazorise.numericEdit._instances[elementId], e); + }); + + element.addEventListener("paste", (e) => { + window.blazorise.numericEdit.paste(window.blazorise.numericEdit._instances[elementId], e); + }); + return true; + }, + destroy: (element, elementId) => { + var instances = window.blazorise.numericEdit._instances || {}; + delete instances[elementId]; + return true; + }, + keyDown: (validator, e) => { + if (e.which === 38) { + validator.stepApply(1); + } else if (e.which === 40) { + validator.stepApply(-1); + } + return true; + }, + keyPress: (validator, e) => { + var currentValue = String.fromCharCode(e.which); + + return e.which === 13 // still need to allow ENTER key so that we don't preventDefault on form submit + || validator.isValid(currentValue) + || e.preventDefault(); + }, + paste: (validator, e) => { + return validator.isValid(e.clipboardData.getData("text/plain")) || e.preventDefault(); + } + }, + NoValidator: function () { + this.isValid = function (currentValue) { + return true; + }; + }, + NumericMaskValidator: function (dotnetAdapter, element, elementId, decimals, separator, step, min, max) { + this.dotnetAdapter = dotnetAdapter; + this.elementId = elementId; + this.element = element; + this.decimals = decimals === null || decimals === undefined ? 2 : decimals; + this.separator = separator || "."; + this.step = step || 1; + this.min = min; + this.max = max; + this.regex = function () { + var sep = "\\" + this.separator, + dec = this.decimals, + reg = "{0," + dec + "}"; + + return dec ? new RegExp("^(-)?(((\\d+(" + sep + "\\d" + reg + ")?)|(" + sep + "\\d" + reg + ")))?$") : /^(-)?(\d*)$/; + }; + this.carret = function () { + return [this.element.selectionStart, this.element.selectionEnd]; + }; + this.isValid = function (currentValue) { + var value = this.element.value, + selection = this.carret(); + + if (value = value.substring(0, selection[0]) + currentValue + value.substring(selection[1]), !!this.regex().test(value)) { + return value = (value || "").replace(this.separator, "."), value === "-" && this.min < 0 || value >= this.min && value <= this.max; + } + + return false; + }; + this.stepApply = function (sign) { + var value = (this.element.value || "").replace(this.separator, "."); + var number = Number(value) + this.step * sign; + + if (number >= this.min && number <= this.max) { + var newValue = number.toString().replace(".", this.separator); + this.element.value = newValue; + this.dotnetAdapter.invokeMethodAsync('SetValue', newValue); + } + }; + }, + DateTimeMaskValidator: function (element, elementId) { + this.elementId = elementId; + this.element = element; + this.regex = function () { + return /^\d{0,4}$|^\d{4}-0?$|^\d{4}-(?:0?[1-9]|1[012])(?:-(?:0?[1-9]?|[12]\d|3[01])?)?$/; + }; + this.carret = function () { + return [this.element.selectionStart, this.element.selectionEnd]; + }; + this.isValid = function (currentValue) { + var value = this.element.value, + selection = this.carret(); + + return value = value.substring(0, selection[0]) + currentValue + value.substring(selection[1]), !!this.regex().test(value); + }; + }, + RegExMaskValidator: function (element, elementId, editMask) { + this.elementId = elementId; + this.element = element; + this.editMask = editMask; + this.regex = function () { + return new RegExp(this.editMask); + }; + this.carret = function () { + return [this.element.selectionStart, this.element.selectionEnd]; + }; + this.isValid = function (currentValue) { + var value = this.element.value, + selection = this.carret(); + + return value = value.substring(0, selection[0]) + currentValue + value.substring(selection[1]), !!this.regex().test(value); + }; + }, + button: { + _instances: [], + + initialize: (element, elementId, preventDefaultOnSubmit) => { + window.blazorise.button._instances[elementId] = new window.blazorise.ButtonInfo(element, elementId, preventDefaultOnSubmit); + + if (element.type === "submit") { + element.addEventListener("click", (e) => { + window.blazorise.button.click(window.blazorise.button._instances[elementId], e); + }); + } + + return true; + }, + destroy: (elementId) => { + var instances = window.blazorise.button._instances || {}; + delete instances[elementId]; + return true; + }, + click: (buttonInfo, e) => { + if (buttonInfo.preventDefaultOnSubmit) { + return e.preventDefault(); + } + } + }, + ButtonInfo: function (element, elementId, preventDefaultOnSubmit) { + this.elementId = elementId; + this.element = element; + this.preventDefaultOnSubmit = preventDefaultOnSubmit; + }, + link: { + scrollIntoView: (elementId) => { + var element = document.getElementById(elementId); + + if (element) { + element.scrollIntoView(); + window.location.hash = elementId; + } + + return true; + } + }, + fileEdit: { + initialize: (adapter, element, elementId) => { + var nextFileId = 0; + + element.addEventListener('change', function handleInputFileChange(event) { + // Reduce to purely serializable data, plus build an index by ID + element._blazorFilesById = {}; + var fileList = Array.prototype.map.call(element.files, function (file) { + var result = { + id: ++nextFileId, + lastModified: new Date(file.lastModified).toISOString(), + name: file.name, + size: file.size, + type: file.type + }; + element._blazorFilesById[result.id] = result; + + // Attach the blob data itself as a non-enumerable property so it doesn't appear in the JSON + Object.defineProperty(result, 'blob', { value: file }); + + return result; + }); + + adapter.invokeMethodAsync('NotifyChange', fileList).then(null, function (err) { + throw new Error(err); + }); + }); + + return true; + }, + destroy: (element, elementId) => { + // TODO: + return true; + }, + + reset: (element, elementId) => { + if (element) { + element.value = ''; + } + + return true; + }, + + readFileData: function readFileData(element, fileEntryId, position, length) { + var readPromise = getArrayBufferFromFileAsync(element, fileEntryId); + + return readPromise.then(function (arrayBuffer) { + var uint8Array = new Uint8Array(arrayBuffer, position, length); + var base64 = uint8ToBase64(uint8Array); + return base64; + }); + }, + + ensureArrayBufferReadyForSharedMemoryInterop: function ensureArrayBufferReadyForSharedMemoryInterop(elem, fileId) { + return getArrayBufferFromFileAsync(elem, fileId).then(function (arrayBuffer) { + getFileById(elem, fileId).arrayBuffer = arrayBuffer; + }); + }, + + readFileDataSharedMemory: function readFileDataSharedMemory(readRequest) { + // This uses various unsupported internal APIs. Beware that if you also use them, + // your code could become broken by any update. + var inputFileElementReferenceId = Blazor.platform.readStringField(readRequest, 0); + var inputFileElement = document.querySelector('[_bl_' + inputFileElementReferenceId + ']'); + var fileId = Blazor.platform.readInt32Field(readRequest, 4); + var sourceOffset = Blazor.platform.readUint64Field(readRequest, 8); + var destination = Blazor.platform.readInt32Field(readRequest, 16); + var destinationOffset = Blazor.platform.readInt32Field(readRequest, 20); + var maxBytes = Blazor.platform.readInt32Field(readRequest, 24); + + var sourceArrayBuffer = getFileById(inputFileElement, fileId).arrayBuffer; + var bytesToRead = Math.min(maxBytes, sourceArrayBuffer.byteLength - sourceOffset); + var sourceUint8Array = new Uint8Array(sourceArrayBuffer, sourceOffset, bytesToRead); + + var destinationUint8Array = Blazor.platform.toUint8Array(destination); + destinationUint8Array.set(sourceUint8Array, destinationOffset); + + return bytesToRead; + }, + open: (element, elementId) => { + if (!element && elementId) { + element = document.getElementById(elementId); + } + + if (element) { + element.click(); + } + } + }, + + breakpoint: { + // Get the current breakpoint + getBreakpoint: function () { + return window.getComputedStyle(document.body, ':before').content.replace(/\"/g, ''); + }, + + // holds the list of components that are triggers to breakpoint + breakpointComponents: [], + + lastBreakpoint: null, + + addBreakpointComponent: (elementId, dotnetAdapter) => { + window.blazorise.breakpoint.breakpointComponents.push({ elementId: elementId, dotnetAdapter: dotnetAdapter }); + }, + + findBreakpointComponentIndex: (elementId) => { + for (index = 0; index < window.blazorise.breakpoint.breakpointComponents.length; ++index) { + if (window.blazorise.breakpoint.breakpointComponents[index].elementId === elementId) + return index; + } + return -1; + }, + + isBreakpointComponent: (elementId) => { + for (index = 0; index < window.blazorise.breakpoint.breakpointComponents.length; ++index) { + if (window.blazorise.breakpoint.breakpointComponents[index].elementId === elementId) + return true; + } + return false; + }, + + registerBreakpointComponent: (elementId, dotnetAdapter) => { + if (window.blazorise.breakpoint.isBreakpointComponent(elementId) !== true) { + window.blazorise.breakpoint.addBreakpointComponent(elementId, dotnetAdapter); + } + }, + + unregisterBreakpointComponent: (elementId) => { + const index = window.blazorise.breakpoint.findBreakpointComponentIndex(elementId); + if (index !== -1) { + window.blazorise.breakpoint.breakpointComponents.splice(index, 1); + } + }, + + onBreakpoint: (dotnetAdapter, currentBreakpoint) => { + dotnetAdapter.invokeMethodAsync('OnBreakpoint', currentBreakpoint); + } + } +}; + +document.addEventListener('click', function handler(evt) { + if (window.blazorise.closableComponents && window.blazorise.closableComponents.length > 0) { + const lastClosable = window.blazorise.closableComponents[window.blazorise.closableComponents.length - 1]; + + if (lastClosable) { + window.blazorise.tryClose(lastClosable, evt.target.id, false, hasParentInTree(evt.target, lastClosable.elementId)); + } + } +}); + +document.addEventListener('keyup', function handler(evt) { + if (evt.keyCode === 27 && window.blazorise.closableComponents && window.blazorise.closableComponents.length > 0) { + const lastClosable = window.blazorise.closableComponents[window.blazorise.closableComponents.length - 1]; + + if (lastClosable) { + window.blazorise.tryClose(lastClosable, lastClosable.elementId, true, false); + } + } +}); + +// Recalculate breakpoint on resize +window.addEventListener('resize', function () { + if (window.blazorise.breakpoint.breakpointComponents && window.blazorise.breakpoint.breakpointComponents.length > 0) { + var currentBreakpoint = window.blazorise.breakpoint.getBreakpoint(); + + if (window.blazorise.breakpoint.lastBreakpoint !== currentBreakpoint) { + window.blazorise.breakpoint.lastBreakpoint = currentBreakpoint; + + for (index = 0; index < window.blazorise.breakpoint.breakpointComponents.length; ++index) { + window.blazorise.breakpoint.onBreakpoint(window.blazorise.breakpoint.breakpointComponents[index].dotnetAdapter, currentBreakpoint); + } + } + } +}); + +// Set initial breakpoint +window.blazorise.breakpoint.lastBreakpoint = window.blazorise.breakpoint.getBreakpoint(); + +function showPopper(element, tooltip, arrow, placement) { + var thePopper = new Popper(element, tooltip, + { + placement, + modifiers: { + offset: { + offset: 0 + }, + flip: { + behavior: "flip" + }, + arrow: { + element: arrow, + enabled: true + }, + preventOverflow: { + boundary: "scrollParent" + } + + } + } + ); + return thePopper; +} + +function getFileById(elem, fileId) { + var file = elem._blazorFilesById[fileId]; + if (!file) { + throw new Error('There is no file with ID ' + fileId + '. The file list may have changed'); + } + + return file; +} + +function getArrayBufferFromFileAsync(elem, fileId) { + var file = getFileById(elem, fileId); + + // On the first read, convert the FileReader into a Promise + if (!file.readPromise) { + file.readPromise = new Promise(function (resolve, reject) { + var reader = new FileReader(); + reader.onload = function () { resolve(reader.result); }; + reader.onerror = function (err) { reject(err); }; + reader.readAsArrayBuffer(file.blob); + }); + } + + return file.readPromise; +} + +function hasParentInTree(element, parentElementId) { + if (!element.parentElement) return false; + if (element.parentElement.id === parentElementId) return true; + return hasParentInTree(element.parentElement, parentElementId); +} + +var uint8ToBase64 = (function () { + // Code from https://github.com/beatgammit/base64-js/ + // License: MIT + var lookup = []; + + var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + for (var i = 0, len = code.length; i < len; ++i) { + lookup[i] = code[i]; + } + + function tripletToBase64(num) { + return lookup[num >> 18 & 0x3F] + + lookup[num >> 12 & 0x3F] + + lookup[num >> 6 & 0x3F] + + lookup[num & 0x3F]; + } + + function encodeChunk(uint8, start, end) { + var tmp; + var output = []; + for (var i = start; i < end; i += 3) { + tmp = + ((uint8[i] << 16) & 0xFF0000) + + ((uint8[i + 1] << 8) & 0xFF00) + + (uint8[i + 2] & 0xFF); + output.push(tripletToBase64(tmp)); + } + return output.join(''); + } + + return function fromByteArray(uint8) { + var tmp; + var len = uint8.length; + var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes + var parts = []; + var maxChunkLength = 16383; // must be multiple of 3 + + // go through the array every three bytes, we'll deal with trailing stuff later + for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { + parts.push(encodeChunk( + uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength) + )); + } + + // pad the end with zeros, but make sure to not forget the extra bytes + if (extraBytes === 1) { + tmp = uint8[len - 1]; + parts.push( + lookup[tmp >> 2] + + lookup[(tmp << 4) & 0x3F] + + '==' + ); + } else if (extraBytes === 2) { + tmp = (uint8[len - 2] << 8) + uint8[len - 1]; + parts.push( + lookup[tmp >> 10] + + lookup[(tmp >> 4) & 0x3F] + + lookup[(tmp << 2) & 0x3F] + + '=' + ); + } + + return parts.join(''); + }; +})(); + +function mutateDOMChange(n){el=document.getElementById(n);ev=document.createEvent("Event");ev.initEvent("change",!0,!1);el.dispatchEvent(ev)}window.blazoriseBootstrap||(window.blazoriseBootstrap={});window.blazoriseBootstrap={tooltip:{initialize:n=>(n.querySelector(".custom-control-input,.btn")&&n.classList.add("b-tooltip-inline"),!0)},modal:{open:(n,t,i)=>(window.blazorise.addClassToBody("modal-open"),i&&(n.querySelector(".modal-body").scrollTop=0),!0),close:()=>(window.blazorise.removeClassFromBody("modal-open"),!0)}}; + +!function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=0)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=r(1);var i,o;!function(e){e.Success="success",e.RequiresRedirect="requiresRedirect"}(i=t.AccessTokenResultStatus||(t.AccessTokenResultStatus={})),function(e){e.Redirect="redirect",e.Success="success",e.Failure="failure",e.OperationCompleted="operationCompleted"}(o=t.AuthenticationResultStatus||(t.AuthenticationResultStatus={}));class s{constructor(e){this._userManager=e}async trySilentSignIn(){return this._intialSilentSignIn||(this._intialSilentSignIn=(async()=>{try{await this._userManager.signinSilent()}catch(e){}})()),this._intialSilentSignIn}async getUser(){window.parent!==window||window.opener||window.frameElement||!this._userManager.settings.redirect_uri||location.href.startsWith(this._userManager.settings.redirect_uri)||await a.instance.trySilentSignIn();const e=await this._userManager.getUser();return e&&e.profile}async getAccessToken(e){const t=await this._userManager.getUser();if(function(e){return!(!e||!e.access_token||e.expired||!e.scopes)}(t)&&function(e,t){const r=new Set(t);if(e&&e.scopes)for(const t of e.scopes)if(!r.has(t))return!1;return!0}(e,t.scopes))return{status:i.Success,token:{grantedScopes:t.scopes,expires:r(t.expires_in),value:t.access_token}};try{const t=e&&e.scopes?{scope:e.scopes.join(" ")}:void 0,n=await this._userManager.signinSilent(t);return{status:i.Success,token:{grantedScopes:n.scopes,expires:r(n.expires_in),value:n.access_token}}}catch(e){return{status:i.RequiresRedirect}}function r(e){const t=new Date;return t.setTime(t.getTime()+1e3*e),t}}async signIn(e){try{return await this._userManager.clearStaleState(),await this._userManager.signinSilent(this.createArguments()),this.success(e)}catch(t){try{return await this._userManager.clearStaleState(),await this._userManager.signinRedirect(this.createArguments(e)),this.redirect()}catch(e){return this.error(this.getExceptionMessage(e))}}}async completeSignIn(e){const t=await this.loginRequired(e),r=await this.stateExists(e);try{const t=await this._userManager.signinCallback(e);return window.self!==window.top?this.operationCompleted():this.success(t&&t.state)}catch(e){return t||window.self!==window.top||!r?this.operationCompleted():this.error("There was an error signing in.")}}async signOut(e){try{return await this._userManager.metadataService.getEndSessionEndpoint()?(await this._userManager.signoutRedirect(this.createArguments(e)),this.redirect()):(await this._userManager.removeUser(),this.success(e))}catch(e){return this.error(this.getExceptionMessage(e))}}async completeSignOut(e){try{if(await this.stateExists(e)){const t=await this._userManager.signoutCallback(e);return this.success(t&&t.state)}return this.operationCompleted()}catch(e){return this.error(this.getExceptionMessage(e))}}getExceptionMessage(e){return function(e){return e&&e.error_description}(e)?e.error_description:function(e){return e&&e.message}(e)?e.message:e.toString()}async stateExists(e){const t=new URLSearchParams(new URL(e).search).get("state");return t&&this._userManager.settings.stateStore?await this._userManager.settings.stateStore.get(t):void 0}async loginRequired(e){const t=new URLSearchParams(new URL(e).search).get("error");if(t&&this._userManager.settings.stateStore){return"login_required"===await this._userManager.settings.stateStore.get(t)}return!1}createArguments(e){return{useReplaceToNavigate:!0,data:e}}error(e){return{status:o.Failure,errorMessage:e}}success(e){return{status:o.Success,state:e}}redirect(){return{status:o.Redirect}}operationCompleted(){return{status:o.OperationCompleted}}}class a{static init(e){return a._initialized||(a._initialized=a.initializeCore(e)),a._initialized}static handleCallback(){return a.initializeCore()}static async initializeCore(e){const t=e||a.resolveCachedSettings();if(!e&&t){const e=a.createUserManagerCore(t);window.parent!==window&&!window.opener&&window.frameElement&&e.settings.redirect_uri&&location.href.startsWith(e.settings.redirect_uri)&&(a.instance=new s(e),a._initialized=(async()=>{await a.instance.completeSignIn(location.href)})())}else if(e){const t=await a.createUserManager(e);a.instance=new s(t)}}static resolveCachedSettings(){const e=window.sessionStorage.getItem(`${a._infrastructureKey}.CachedAuthSettings`);return e?JSON.parse(e):void 0}static getUser(){return a.instance.getUser()}static getAccessToken(e){return a.instance.getAccessToken(e)}static signIn(e){return a.instance.signIn(e)}static async completeSignIn(e){let t=this._pendingOperations[e];return t||(t=a.instance.completeSignIn(e),await t,delete this._pendingOperations[e]),t}static signOut(e){return a.instance.signOut(e)}static async completeSignOut(e){let t=this._pendingOperations[e];return t||(t=a.instance.completeSignOut(e),await t,delete this._pendingOperations[e]),t}static async createUserManager(e){let t;if(function(e){return e.hasOwnProperty("configurationEndpoint")}(e)){const r=await fetch(e.configurationEndpoint);if(!r.ok)throw new Error(`Could not load settings from '${e.configurationEndpoint}'`);t=await r.json()}else e.scope||(e.scope=e.defaultScopes.join(" ")),null===e.response_type&&delete e.response_type,t=e;return window.sessionStorage.setItem(`${a._infrastructureKey}.CachedAuthSettings`,JSON.stringify(t)),a.createUserManagerCore(t)}static createUserManagerCore(e){const t=new n.UserManager(e);return t.events.addUserSignedOut(async()=>{t.removeUser()}),t}}t.AuthenticationService=a,a._infrastructureKey="Microsoft.AspNetCore.Components.WebAssembly.Authentication",a._pendingOperations={},a.handleCallback(),window.AuthenticationService=a},function(e,t,r){var n;n=function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=22)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;r=4){for(var e=arguments.length,t=Array(e),r=0;r=3){for(var e=arguments.length,t=Array(e),r=0;r=2){for(var e=arguments.length,t=Array(e),r=0;r=1){for(var e=arguments.length,t=Array(e),r=0;r1&&void 0!==arguments[1]?arguments[1]:o.JsonService;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!t)throw i.Log.error("MetadataService: No settings passed to MetadataService"),new Error("settings");this._settings=t,this._jsonService=new r(["application/jwk-set+json"])}return e.prototype.getMetadata=function(){var e=this;return this._settings.metadata?(i.Log.debug("MetadataService.getMetadata: Returning metadata from settings"),Promise.resolve(this._settings.metadata)):this.metadataUrl?(i.Log.debug("MetadataService.getMetadata: getting metadata from",this.metadataUrl),this._jsonService.getJson(this.metadataUrl).then((function(t){return i.Log.debug("MetadataService.getMetadata: json received"),e._settings.metadata=t,t}))):(i.Log.error("MetadataService.getMetadata: No authority or metadataUrl configured on settings"),Promise.reject(new Error("No authority or metadataUrl configured on settings")))},e.prototype.getIssuer=function(){return this._getMetadataProperty("issuer")},e.prototype.getAuthorizationEndpoint=function(){return this._getMetadataProperty("authorization_endpoint")},e.prototype.getUserInfoEndpoint=function(){return this._getMetadataProperty("userinfo_endpoint")},e.prototype.getTokenEndpoint=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return this._getMetadataProperty("token_endpoint",e)},e.prototype.getCheckSessionIframe=function(){return this._getMetadataProperty("check_session_iframe",!0)},e.prototype.getEndSessionEndpoint=function(){return this._getMetadataProperty("end_session_endpoint",!0)},e.prototype.getRevocationEndpoint=function(){return this._getMetadataProperty("revocation_endpoint",!0)},e.prototype.getKeysEndpoint=function(){return this._getMetadataProperty("jwks_uri",!0)},e.prototype._getMetadataProperty=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return i.Log.debug("MetadataService.getMetadataProperty for: "+e),this.getMetadata().then((function(r){if(i.Log.debug("MetadataService.getMetadataProperty: metadata recieved"),void 0===r[e]){if(!0===t)return void i.Log.warn("MetadataService.getMetadataProperty: Metadata does not contain optional property "+e);throw i.Log.error("MetadataService.getMetadataProperty: Metadata does not contain property "+e),new Error("Metadata does not contain property "+e)}return r[e]}))},e.prototype.getSigningKeys=function(){var e=this;return this._settings.signingKeys?(i.Log.debug("MetadataService.getSigningKeys: Returning signingKeys from settings"),Promise.resolve(this._settings.signingKeys)):this._getMetadataProperty("jwks_uri").then((function(t){return i.Log.debug("MetadataService.getSigningKeys: jwks_uri received",t),e._jsonService.getJson(t).then((function(t){if(i.Log.debug("MetadataService.getSigningKeys: key set received",t),!t.keys)throw i.Log.error("MetadataService.getSigningKeys: Missing keys on keyset"),new Error("Missing keys on keyset");return e._settings.signingKeys=t.keys,e._settings.signingKeys}))}))},n(e,[{key:"metadataUrl",get:function(){return this._metadataUrl||(this._settings.metadataUrl?this._metadataUrl=this._settings.metadataUrl:(this._metadataUrl=this._settings.authority,this._metadataUrl&&this._metadataUrl.indexOf(".well-known/openid-configuration")<0&&("/"!==this._metadataUrl[this._metadataUrl.length-1]&&(this._metadataUrl+="/"),this._metadataUrl+=".well-known/openid-configuration"))),this._metadataUrl}}]),e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.UrlUtility=void 0;var n=r(0),i=r(1);t.UrlUtility=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e)}return e.addQueryParam=function(e,t,r){return e.indexOf("?")<0&&(e+="?"),"?"!==e[e.length-1]&&(e+="&"),e+=encodeURIComponent(t),(e+="=")+encodeURIComponent(r)},e.parseUrlFragment=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"#",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.Global;"string"!=typeof e&&(e=r.location.href);var o=e.lastIndexOf(t);o>=0&&(e=e.substr(o+1)),"?"===t&&(o=e.indexOf("#"))>=0&&(e=e.substr(0,o));for(var s,a={},u=/([^&=]+)=([^&]*)/g,c=0;s=u.exec(e);)if(a[decodeURIComponent(s[1])]=decodeURIComponent(s[2]),c++>50)return n.Log.error("UrlUtility.parseUrlFragment: response exceeded expected number of parameters",e),{error:"Response exceeded expected number of parameters"};for(var h in a)return a;return{}},e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.JoseUtil=void 0;var n=r(25),i=function(e){return e&&e.__esModule?e:{default:e}}(r(32));t.JoseUtil=(0,i.default)({jws:n.jws,KeyUtil:n.KeyUtil,X509:n.X509,crypto:n.crypto,hextob64u:n.hextob64u,b64tohex:n.b64tohex,AllowedSigningAlgs:n.AllowedSigningAlgs})},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.OidcClientSettings=void 0;var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=function(){function e(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},r=t.authority,i=t.metadataUrl,o=t.metadata,l=t.signingKeys,f=t.client_id,g=t.client_secret,d=t.response_type,p=void 0===d?c:d,v=t.scope,y=void 0===v?h:v,m=t.redirect_uri,_=t.post_logout_redirect_uri,S=t.prompt,w=t.display,F=t.max_age,b=t.ui_locales,E=t.acr_values,x=t.resource,k=t.response_mode,A=t.filterProtocolClaims,P=void 0===A||A,C=t.loadUserInfo,T=void 0===C||C,R=t.staleStateAge,I=void 0===R?900:R,D=t.clockSkew,U=void 0===D?300:D,L=t.userInfoJwtIssuer,N=void 0===L?"OP":L,O=t.stateStore,B=void 0===O?new s.WebStorageStateStore:O,M=t.ResponseValidatorCtor,j=void 0===M?a.ResponseValidator:M,H=t.MetadataServiceCtor,K=void 0===H?u.MetadataService:H,V=t.extraQueryParams,q=void 0===V?{}:V,J=t.extraTokenParams,W=void 0===J?{}:J;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._authority=r,this._metadataUrl=i,this._metadata=o,this._signingKeys=l,this._client_id=f,this._client_secret=g,this._response_type=p,this._scope=y,this._redirect_uri=m,this._post_logout_redirect_uri=_,this._prompt=S,this._display=w,this._max_age=F,this._ui_locales=b,this._acr_values=E,this._resource=x,this._response_mode=k,this._filterProtocolClaims=!!P,this._loadUserInfo=!!T,this._staleStateAge=I,this._clockSkew=U,this._userInfoJwtIssuer=N,this._stateStore=B,this._validator=new j(this),this._metadataService=new K(this),this._extraQueryParams="object"===(void 0===q?"undefined":n(q))?q:{},this._extraTokenParams="object"===(void 0===W?"undefined":n(W))?W:{}}return i(e,[{key:"client_id",get:function(){return this._client_id},set:function(e){if(this._client_id)throw o.Log.error("OidcClientSettings.set_client_id: client_id has already been assigned."),new Error("client_id has already been assigned.");this._client_id=e}},{key:"client_secret",get:function(){return this._client_secret}},{key:"response_type",get:function(){return this._response_type}},{key:"scope",get:function(){return this._scope}},{key:"redirect_uri",get:function(){return this._redirect_uri}},{key:"post_logout_redirect_uri",get:function(){return this._post_logout_redirect_uri}},{key:"prompt",get:function(){return this._prompt}},{key:"display",get:function(){return this._display}},{key:"max_age",get:function(){return this._max_age}},{key:"ui_locales",get:function(){return this._ui_locales}},{key:"acr_values",get:function(){return this._acr_values}},{key:"resource",get:function(){return this._resource}},{key:"response_mode",get:function(){return this._response_mode}},{key:"authority",get:function(){return this._authority},set:function(e){if(this._authority)throw o.Log.error("OidcClientSettings.set_authority: authority has already been assigned."),new Error("authority has already been assigned.");this._authority=e}},{key:"metadataUrl",get:function(){return this._metadataUrl||(this._metadataUrl=this.authority,this._metadataUrl&&this._metadataUrl.indexOf(".well-known/openid-configuration")<0&&("/"!==this._metadataUrl[this._metadataUrl.length-1]&&(this._metadataUrl+="/"),this._metadataUrl+=".well-known/openid-configuration")),this._metadataUrl}},{key:"metadata",get:function(){return this._metadata},set:function(e){this._metadata=e}},{key:"signingKeys",get:function(){return this._signingKeys},set:function(e){this._signingKeys=e}},{key:"filterProtocolClaims",get:function(){return this._filterProtocolClaims}},{key:"loadUserInfo",get:function(){return this._loadUserInfo}},{key:"staleStateAge",get:function(){return this._staleStateAge}},{key:"clockSkew",get:function(){return this._clockSkew}},{key:"userInfoJwtIssuer",get:function(){return this._userInfoJwtIssuer}},{key:"stateStore",get:function(){return this._stateStore}},{key:"validator",get:function(){return this._validator}},{key:"metadataService",get:function(){return this._metadataService}},{key:"extraQueryParams",get:function(){return this._extraQueryParams},set:function(e){"object"===(void 0===e?"undefined":n(e))?this._extraQueryParams=e:this._extraQueryParams={}}},{key:"extraTokenParams",get:function(){return this._extraTokenParams},set:function(e){"object"===(void 0===e?"undefined":n(e))?this._extraTokenParams=e:this._extraTokenParams={}}}]),e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.WebStorageStateStore=void 0;var n=r(0),i=r(1);t.WebStorageStateStore=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=t.prefix,n=void 0===r?"oidc.":r,o=t.store,s=void 0===o?i.Global.localStorage:o;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._store=s,this._prefix=n}return e.prototype.set=function(e,t){return n.Log.debug("WebStorageStateStore.set",e),e=this._prefix+e,this._store.setItem(e,t),Promise.resolve()},e.prototype.get=function(e){n.Log.debug("WebStorageStateStore.get",e),e=this._prefix+e;var t=this._store.getItem(e);return Promise.resolve(t)},e.prototype.remove=function(e){n.Log.debug("WebStorageStateStore.remove",e),e=this._prefix+e;var t=this._store.getItem(e);return this._store.removeItem(e),Promise.resolve(t)},e.prototype.getAllKeys=function(){n.Log.debug("WebStorageStateStore.getAllKeys");for(var e=[],t=0;t0&&void 0!==arguments[0]?arguments[0]:null,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i.Global.XMLHttpRequest,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),t&&Array.isArray(t)?this._contentTypes=t.slice():this._contentTypes=[],this._contentTypes.push("application/json"),n&&this._contentTypes.push("application/jwt"),this._XMLHttpRequest=r,this._jwtHandler=n}return e.prototype.getJson=function(e,t){var r=this;if(!e)throw n.Log.error("JsonService.getJson: No url passed"),new Error("url");return n.Log.debug("JsonService.getJson, url: ",e),new Promise((function(i,o){var s=new r._XMLHttpRequest;s.open("GET",e);var a=r._contentTypes,u=r._jwtHandler;s.onload=function(){if(n.Log.debug("JsonService.getJson: HTTP response received, status",s.status),200===s.status){var t=s.getResponseHeader("Content-Type");if(t){var r=a.find((function(e){if(t.startsWith(e))return!0}));if("application/jwt"==r)return void u(s).then(i,o);if(r)try{return void i(JSON.parse(s.responseText))}catch(e){return n.Log.error("JsonService.getJson: Error parsing JSON response",e.message),void o(e)}}o(Error("Invalid response Content-Type: "+t+", from URL: "+e))}else o(Error(s.statusText+" ("+s.status+")"))},s.onerror=function(){n.Log.error("JsonService.getJson: network error"),o(Error("Network Error"))},t&&(n.Log.debug("JsonService.getJson: token passed, setting Authorization header"),s.setRequestHeader("Authorization","Bearer "+t)),s.send()}))},e.prototype.postForm=function(e,t){var r=this;if(!e)throw n.Log.error("JsonService.postForm: No url passed"),new Error("url");return n.Log.debug("JsonService.postForm, url: ",e),new Promise((function(i,o){var s=new r._XMLHttpRequest;s.open("POST",e);var a=r._contentTypes;s.onload=function(){if(n.Log.debug("JsonService.postForm: HTTP response received, status",s.status),200!==s.status){if(400===s.status&&(r=s.getResponseHeader("Content-Type"))&&a.find((function(e){if(r.startsWith(e))return!0})))try{var t=JSON.parse(s.responseText);if(t&&t.error)return n.Log.error("JsonService.postForm: Error from server: ",t.error),void o(new Error(t.error))}catch(e){return n.Log.error("JsonService.postForm: Error parsing JSON response",e.message),void o(e)}o(Error(s.statusText+" ("+s.status+")"))}else{var r;if((r=s.getResponseHeader("Content-Type"))&&a.find((function(e){if(r.startsWith(e))return!0})))try{return void i(JSON.parse(s.responseText))}catch(e){return n.Log.error("JsonService.postForm: Error parsing JSON response",e.message),void o(e)}o(Error("Invalid response Content-Type: "+r+", from URL: "+e))}},s.onerror=function(){n.Log.error("JsonService.postForm: network error"),o(Error("Network Error"))};var u="";for(var c in t){var h=t[c];h&&(u.length>0&&(u+="&"),u+=encodeURIComponent(c),u+="=",u+=encodeURIComponent(h))}s.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),s.send(u)}))},e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.State=void 0;var n=function(){function e(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},r=t.id,n=t.data,i=t.created,s=t.request_type;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._id=r||(0,o.default)(),this._data=n,this._created="number"==typeof i&&i>0?i:parseInt(Date.now()/1e3),this._request_type=s}return e.prototype.toStorageString=function(){return i.Log.debug("State.toStorageString"),JSON.stringify({id:this.id,data:this.data,created:this.created,request_type:this.request_type})},e.fromStorageString=function(t){return i.Log.debug("State.fromStorageString"),new e(JSON.parse(t))},e.clearStaleState=function(t,r){var n=Date.now()/1e3-r;return t.getAllKeys().then((function(r){i.Log.debug("State.clearStaleState: got keys",r);for(var o=[],s=function(s){var a=r[s];u=t.get(a).then((function(r){var o=!1;if(r)try{var s=e.fromStorageString(r);i.Log.debug("State.clearStaleState: got item from key: ",a,s.created),s.created<=n&&(o=!0)}catch(e){i.Log.error("State.clearStaleState: Error parsing state for key",a,e.message),o=!0}else i.Log.debug("State.clearStaleState: no item in storage for key: ",a),o=!0;if(o)return i.Log.debug("State.clearStaleState: removed item for key: ",a),t.remove(a)})),o.push(u)},a=0;a0&&void 0!==arguments[0]?arguments[0]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),t instanceof o.OidcClientSettings?this._settings=t:this._settings=new o.OidcClientSettings(t)}return e.prototype.createSigninRequest=function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=t.response_type,n=t.scope,o=t.redirect_uri,s=t.data,u=t.state,c=t.prompt,h=t.display,l=t.max_age,f=t.ui_locales,g=t.id_token_hint,d=t.login_hint,p=t.acr_values,v=t.resource,y=t.request,m=t.request_uri,_=t.response_mode,S=t.extraQueryParams,w=t.extraTokenParams,F=t.request_type,b=t.skipUserInfo,E=arguments[1];i.Log.debug("OidcClient.createSigninRequest");var x=this._settings.client_id;r=r||this._settings.response_type,n=n||this._settings.scope,o=o||this._settings.redirect_uri,c=c||this._settings.prompt,h=h||this._settings.display,l=l||this._settings.max_age,f=f||this._settings.ui_locales,p=p||this._settings.acr_values,v=v||this._settings.resource,_=_||this._settings.response_mode,S=S||this._settings.extraQueryParams,w=w||this._settings.extraTokenParams;var k=this._settings.authority;return a.SigninRequest.isCode(r)&&"code"!==r?Promise.reject(new Error("OpenID Connect hybrid flow is not supported")):this._metadataService.getAuthorizationEndpoint().then((function(t){i.Log.debug("OidcClient.createSigninRequest: Received authorization endpoint",t);var A=new a.SigninRequest({url:t,client_id:x,redirect_uri:o,response_type:r,scope:n,data:s||u,authority:k,prompt:c,display:h,max_age:l,ui_locales:f,id_token_hint:g,login_hint:d,acr_values:p,resource:v,request:y,request_uri:m,extraQueryParams:S,extraTokenParams:w,request_type:F,response_mode:_,client_secret:e._settings.client_secret,skipUserInfo:b}),P=A.state;return(E=E||e._stateStore).set(P.id,P.toStorageString()).then((function(){return A}))}))},e.prototype.readSigninResponseState=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];i.Log.debug("OidcClient.readSigninResponseState");var n="query"===this._settings.response_mode||!this._settings.response_mode&&a.SigninRequest.isCode(this._settings.response_type)?"?":"#",o=new u.SigninResponse(e,n);return o.state?(t=t||this._stateStore,(r?t.remove.bind(t):t.get.bind(t))(o.state).then((function(e){if(!e)throw i.Log.error("OidcClient.readSigninResponseState: No matching state found in storage"),new Error("No matching state found in storage");return{state:l.SigninState.fromStorageString(e),response:o}}))):(i.Log.error("OidcClient.readSigninResponseState: No state in response"),Promise.reject(new Error("No state in response")))},e.prototype.processSigninResponse=function(e,t){var r=this;return i.Log.debug("OidcClient.processSigninResponse"),this.readSigninResponseState(e,t,!0).then((function(e){var t=e.state,n=e.response;return i.Log.debug("OidcClient.processSigninResponse: Received state from storage; validating response"),r._validator.validateSigninResponse(t,n)}))},e.prototype.createSignoutRequest=function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=t.id_token_hint,n=t.data,o=t.state,s=t.post_logout_redirect_uri,a=t.extraQueryParams,u=t.request_type,h=arguments[1];return i.Log.debug("OidcClient.createSignoutRequest"),s=s||this._settings.post_logout_redirect_uri,a=a||this._settings.extraQueryParams,this._metadataService.getEndSessionEndpoint().then((function(t){if(!t)throw i.Log.error("OidcClient.createSignoutRequest: No end session endpoint url returned"),new Error("no end session endpoint");i.Log.debug("OidcClient.createSignoutRequest: Received end session endpoint",t);var l=new c.SignoutRequest({url:t,id_token_hint:r,post_logout_redirect_uri:s,data:n||o,extraQueryParams:a,request_type:u}),f=l.state;return f&&(i.Log.debug("OidcClient.createSignoutRequest: Signout request has state to persist"),(h=h||e._stateStore).set(f.id,f.toStorageString())),l}))},e.prototype.readSignoutResponseState=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];i.Log.debug("OidcClient.readSignoutResponseState");var n=new h.SignoutResponse(e);if(!n.state)return i.Log.debug("OidcClient.readSignoutResponseState: No state in response"),n.error?(i.Log.warn("OidcClient.readSignoutResponseState: Response was error: ",n.error),Promise.reject(new s.ErrorResponse(n))):Promise.resolve({undefined:void 0,response:n});var o=n.state;return t=t||this._stateStore,(r?t.remove.bind(t):t.get.bind(t))(o).then((function(e){if(!e)throw i.Log.error("OidcClient.readSignoutResponseState: No matching state found in storage"),new Error("No matching state found in storage");return{state:f.State.fromStorageString(e),response:n}}))},e.prototype.processSignoutResponse=function(e,t){var r=this;return i.Log.debug("OidcClient.processSignoutResponse"),this.readSignoutResponseState(e,t,!0).then((function(e){var t=e.state,n=e.response;return t?(i.Log.debug("OidcClient.processSignoutResponse: Received state from storage; validating response"),r._validator.validateSignoutResponse(t,n)):(i.Log.debug("OidcClient.processSignoutResponse: No state from storage; skipping validating response"),n)}))},e.prototype.clearStaleState=function(e){return i.Log.debug("OidcClient.clearStaleState"),e=e||this._stateStore,f.State.clearStaleState(e,this.settings.staleStateAge)},n(e,[{key:"_stateStore",get:function(){return this.settings.stateStore}},{key:"_validator",get:function(){return this.settings.validator}},{key:"_metadataService",get:function(){return this.settings.metadataService}},{key:"settings",get:function(){return this._settings}},{key:"metadataService",get:function(){return this._metadataService}}]),e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TokenClient=void 0;var n=r(7),i=r(2),o=r(0);t.TokenClient=function(){function e(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.JsonService,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.MetadataService;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!t)throw o.Log.error("TokenClient.ctor: No settings passed"),new Error("settings");this._settings=t,this._jsonService=new r,this._metadataService=new s(this._settings)}return e.prototype.exchangeCode=function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(t=Object.assign({},t)).grant_type=t.grant_type||"authorization_code",t.client_id=t.client_id||this._settings.client_id,t.redirect_uri=t.redirect_uri||this._settings.redirect_uri,t.code?t.redirect_uri?t.code_verifier?t.client_id?this._metadataService.getTokenEndpoint(!1).then((function(r){return o.Log.debug("TokenClient.exchangeCode: Received token endpoint"),e._jsonService.postForm(r,t).then((function(e){return o.Log.debug("TokenClient.exchangeCode: response received"),e}))})):(o.Log.error("TokenClient.exchangeCode: No client_id passed"),Promise.reject(new Error("A client_id is required"))):(o.Log.error("TokenClient.exchangeCode: No code_verifier passed"),Promise.reject(new Error("A code_verifier is required"))):(o.Log.error("TokenClient.exchangeCode: No redirect_uri passed"),Promise.reject(new Error("A redirect_uri is required"))):(o.Log.error("TokenClient.exchangeCode: No code passed"),Promise.reject(new Error("A code is required")))},e.prototype.exchangeRefreshToken=function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(t=Object.assign({},t)).grant_type=t.grant_type||"refresh_token",t.client_id=t.client_id||this._settings.client_id,t.client_secret=t.client_secret||this._settings.client_secret,t.refresh_token?t.client_id?this._metadataService.getTokenEndpoint(!1).then((function(r){return o.Log.debug("TokenClient.exchangeRefreshToken: Received token endpoint"),e._jsonService.postForm(r,t).then((function(e){return o.Log.debug("TokenClient.exchangeRefreshToken: response received"),e}))})):(o.Log.error("TokenClient.exchangeRefreshToken: No client_id passed"),Promise.reject(new Error("A client_id is required"))):(o.Log.error("TokenClient.exchangeRefreshToken: No refresh_token passed"),Promise.reject(new Error("A refresh_token is required")))},e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ErrorResponse=void 0;var n=r(0);t.ErrorResponse=function(e){function t(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=r.error,o=r.error_description,s=r.error_uri,a=r.state,u=r.session_state;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),!i)throw n.Log.error("No error passed to ErrorResponse"),new Error("error");var c=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,e.call(this,o||i));return c.name="ErrorResponse",c.error=i,c.error_description=o,c.error_uri=s,c.state=a,c.session_state=u,c}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t}(Error)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SigninRequest=void 0;var n=r(0),i=r(3),o=r(13);t.SigninRequest=function(){function e(t){var r=t.url,s=t.client_id,a=t.redirect_uri,u=t.response_type,c=t.scope,h=t.authority,l=t.data,f=t.prompt,g=t.display,d=t.max_age,p=t.ui_locales,v=t.id_token_hint,y=t.login_hint,m=t.acr_values,_=t.resource,S=t.response_mode,w=t.request,F=t.request_uri,b=t.extraQueryParams,E=t.request_type,x=t.client_secret,k=t.extraTokenParams,A=t.skipUserInfo;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!r)throw n.Log.error("SigninRequest.ctor: No url passed"),new Error("url");if(!s)throw n.Log.error("SigninRequest.ctor: No client_id passed"),new Error("client_id");if(!a)throw n.Log.error("SigninRequest.ctor: No redirect_uri passed"),new Error("redirect_uri");if(!u)throw n.Log.error("SigninRequest.ctor: No response_type passed"),new Error("response_type");if(!c)throw n.Log.error("SigninRequest.ctor: No scope passed"),new Error("scope");if(!h)throw n.Log.error("SigninRequest.ctor: No authority passed"),new Error("authority");var P=e.isOidc(u),C=e.isCode(u);S||(S=e.isCode(u)?"query":null),this.state=new o.SigninState({nonce:P,data:l,client_id:s,authority:h,redirect_uri:a,code_verifier:C,request_type:E,response_mode:S,client_secret:x,scope:c,extraTokenParams:k,skipUserInfo:A}),r=i.UrlUtility.addQueryParam(r,"client_id",s),r=i.UrlUtility.addQueryParam(r,"redirect_uri",a),r=i.UrlUtility.addQueryParam(r,"response_type",u),r=i.UrlUtility.addQueryParam(r,"scope",c),r=i.UrlUtility.addQueryParam(r,"state",this.state.id),P&&(r=i.UrlUtility.addQueryParam(r,"nonce",this.state.nonce)),C&&(r=i.UrlUtility.addQueryParam(r,"code_challenge",this.state.code_challenge),r=i.UrlUtility.addQueryParam(r,"code_challenge_method","S256"));var T={prompt:f,display:g,max_age:d,ui_locales:p,id_token_hint:v,login_hint:y,acr_values:m,resource:_,request:w,request_uri:F,response_mode:S};for(var R in T)T[R]&&(r=i.UrlUtility.addQueryParam(r,R,T[R]));for(var I in b)r=i.UrlUtility.addQueryParam(r,I,b[I]);this.url=r}return e.isOidc=function(e){return!!e.split(/\s+/g).filter((function(e){return"id_token"===e}))[0]},e.isOAuth=function(e){return!!e.split(/\s+/g).filter((function(e){return"token"===e}))[0]},e.isCode=function(e){return!!e.split(/\s+/g).filter((function(e){return"code"===e}))[0]},e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SigninState=void 0;var n=function(){function e(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},n=r.nonce,i=r.authority,o=r.client_id,u=r.redirect_uri,c=r.code_verifier,h=r.response_mode,l=r.client_secret,f=r.scope,g=r.extraTokenParams,d=r.skipUserInfo;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var p=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,e.call(this,arguments[0]));if(!0===n?p._nonce=(0,a.default)():n&&(p._nonce=n),!0===c?p._code_verifier=(0,a.default)()+(0,a.default)()+(0,a.default)():c&&(p._code_verifier=c),p.code_verifier){var v=s.JoseUtil.hashString(p.code_verifier,"SHA256");p._code_challenge=s.JoseUtil.hexToBase64Url(v)}return p._redirect_uri=u,p._authority=i,p._client_id=o,p._response_mode=h,p._client_secret=l,p._scope=f,p._extraTokenParams=g,p._skipUserInfo=d,p}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.toStorageString=function(){return i.Log.debug("SigninState.toStorageString"),JSON.stringify({id:this.id,data:this.data,created:this.created,request_type:this.request_type,nonce:this.nonce,code_verifier:this.code_verifier,redirect_uri:this.redirect_uri,authority:this.authority,client_id:this.client_id,response_mode:this.response_mode,client_secret:this.client_secret,scope:this.scope,extraTokenParams:this.extraTokenParams,skipUserInfo:this.skipUserInfo})},t.fromStorageString=function(e){return i.Log.debug("SigninState.fromStorageString"),new t(JSON.parse(e))},n(t,[{key:"nonce",get:function(){return this._nonce}},{key:"authority",get:function(){return this._authority}},{key:"client_id",get:function(){return this._client_id}},{key:"redirect_uri",get:function(){return this._redirect_uri}},{key:"code_verifier",get:function(){return this._code_verifier}},{key:"code_challenge",get:function(){return this._code_challenge}},{key:"response_mode",get:function(){return this._response_mode}},{key:"client_secret",get:function(){return this._client_secret}},{key:"scope",get:function(){return this._scope}},{key:"extraTokenParams",get:function(){return this._extraTokenParams}},{key:"skipUserInfo",get:function(){return this._skipUserInfo}}]),t}(o.State)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return(0,n.default)().replace(/-/g,"")};var n=function(e){return e&&e.__esModule?e:{default:e}}(r(33));e.exports=t.default},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.User=void 0;var n=function(){function e(e,t){for(var r=0;r0){var r=parseInt(Date.now()/1e3);this.expires_at=r+t}}},{key:"expired",get:function(){var e=this.expires_in;if(void 0!==e)return e<=0}},{key:"scopes",get:function(){return(this.scope||"").split(" ")}}]),e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AccessTokenEvents=void 0;var n=r(0),i=r(48);t.AccessTokenEvents=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=t.accessTokenExpiringNotificationTime,n=void 0===r?60:r,o=t.accessTokenExpiringTimer,s=void 0===o?new i.Timer("Access token expiring"):o,a=t.accessTokenExpiredTimer,u=void 0===a?new i.Timer("Access token expired"):a;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._accessTokenExpiringNotificationTime=n,this._accessTokenExpiring=s,this._accessTokenExpired=u}return e.prototype.load=function(e){if(e.access_token&&void 0!==e.expires_in){var t=e.expires_in;if(n.Log.debug("AccessTokenEvents.load: access token present, remaining duration:",t),t>0){var r=t-this._accessTokenExpiringNotificationTime;r<=0&&(r=1),n.Log.debug("AccessTokenEvents.load: registering expiring timer in:",r),this._accessTokenExpiring.init(r)}else n.Log.debug("AccessTokenEvents.load: canceling existing expiring timer becase we're past expiration."),this._accessTokenExpiring.cancel();var i=t+1;n.Log.debug("AccessTokenEvents.load: registering expired timer in:",i),this._accessTokenExpired.init(i)}else this._accessTokenExpiring.cancel(),this._accessTokenExpired.cancel()},e.prototype.unload=function(){n.Log.debug("AccessTokenEvents.unload: canceling existing access token timers"),this._accessTokenExpiring.cancel(),this._accessTokenExpired.cancel()},e.prototype.addAccessTokenExpiring=function(e){this._accessTokenExpiring.addHandler(e)},e.prototype.removeAccessTokenExpiring=function(e){this._accessTokenExpiring.removeHandler(e)},e.prototype.addAccessTokenExpired=function(e){this._accessTokenExpired.addHandler(e)},e.prototype.removeAccessTokenExpired=function(e){this._accessTokenExpired.removeHandler(e)},e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Event=void 0;var n=r(0);t.Event=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._name=t,this._callbacks=[]}return e.prototype.addHandler=function(e){this._callbacks.push(e)},e.prototype.removeHandler=function(e){var t=this._callbacks.findIndex((function(t){return t===e}));t>=0&&this._callbacks.splice(t,1)},e.prototype.raise=function(){n.Log.debug("Event: Raising event: "+this._name);for(var e=0;e1&&void 0!==arguments[1]?arguments[1]:o.CheckSessionIFrame,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:s.Global.timer;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!t)throw i.Log.error("SessionMonitor.ctor: No user manager passed to SessionMonitor"),new Error("userManager");this._userManager=t,this._CheckSessionIFrameCtor=n,this._timer=a,this._userManager.events.addUserLoaded(this._start.bind(this)),this._userManager.events.addUserUnloaded(this._stop.bind(this)),this._userManager.getUser().then((function(e){e?r._start(e):r._settings.monitorAnonymousSession&&r._userManager.querySessionStatus().then((function(e){var t={session_state:e.session_state};e.sub&&e.sid&&(t.profile={sub:e.sub,sid:e.sid}),r._start(t)})).catch((function(e){i.Log.error("SessionMonitor ctor: error from querySessionStatus:",e.message)}))})).catch((function(e){i.Log.error("SessionMonitor ctor: error from getUser:",e.message)}))}return e.prototype._start=function(e){var t=this,r=e.session_state;r&&(e.profile?(this._sub=e.profile.sub,this._sid=e.profile.sid,i.Log.debug("SessionMonitor._start: session_state:",r,", sub:",this._sub)):(this._sub=void 0,this._sid=void 0,i.Log.debug("SessionMonitor._start: session_state:",r,", anonymous user")),this._checkSessionIFrame?this._checkSessionIFrame.start(r):this._metadataService.getCheckSessionIframe().then((function(e){if(e){i.Log.debug("SessionMonitor._start: Initializing check session iframe");var n=t._client_id,o=t._checkSessionInterval,s=t._stopCheckSessionOnError;t._checkSessionIFrame=new t._CheckSessionIFrameCtor(t._callback.bind(t),n,e,o,s),t._checkSessionIFrame.load().then((function(){t._checkSessionIFrame.start(r)}))}else i.Log.warn("SessionMonitor._start: No check session iframe found in the metadata")})).catch((function(e){i.Log.error("SessionMonitor._start: Error from getCheckSessionIframe:",e.message)})))},e.prototype._stop=function(){var e=this;if(this._sub=void 0,this._sid=void 0,this._checkSessionIFrame&&(i.Log.debug("SessionMonitor._stop"),this._checkSessionIFrame.stop()),this._settings.monitorAnonymousSession)var t=this._timer.setInterval((function(){e._timer.clearInterval(t),e._userManager.querySessionStatus().then((function(t){var r={session_state:t.session_state};t.sub&&t.sid&&(r.profile={sub:t.sub,sid:t.sid}),e._start(r)})).catch((function(e){i.Log.error("SessionMonitor: error from querySessionStatus:",e.message)}))}),1e3)},e.prototype._callback=function(){var e=this;this._userManager.querySessionStatus().then((function(t){var r=!0;t?t.sub===e._sub?(r=!1,e._checkSessionIFrame.start(t.session_state),t.sid===e._sid?i.Log.debug("SessionMonitor._callback: Same sub still logged in at OP, restarting check session iframe; session_state:",t.session_state):(i.Log.debug("SessionMonitor._callback: Same sub still logged in at OP, session state has changed, restarting check session iframe; session_state:",t.session_state),e._userManager.events._raiseUserSessionChanged())):i.Log.debug("SessionMonitor._callback: Different subject signed into OP:",t.sub):i.Log.debug("SessionMonitor._callback: Subject no longer signed into OP"),r&&(e._sub?(i.Log.debug("SessionMonitor._callback: SessionMonitor._callback; raising signed out event"),e._userManager.events._raiseUserSignedOut()):(i.Log.debug("SessionMonitor._callback: SessionMonitor._callback; raising signed in event"),e._userManager.events._raiseUserSignedIn()))})).catch((function(t){e._sub&&(i.Log.debug("SessionMonitor._callback: Error calling queryCurrentSigninSession; raising signed out event",t.message),e._userManager.events._raiseUserSignedOut())}))},n(e,[{key:"_settings",get:function(){return this._userManager.settings}},{key:"_metadataService",get:function(){return this._userManager.metadataService}},{key:"_client_id",get:function(){return this._settings.client_id}},{key:"_checkSessionInterval",get:function(){return this._settings.checkSessionInterval}},{key:"_stopCheckSessionOnError",get:function(){return this._settings.stopCheckSessionOnError}}]),e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CheckSessionIFrame=void 0;var n=r(0);t.CheckSessionIFrame=function(){function e(t,r,n,i){var o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._callback=t,this._client_id=r,this._url=n,this._interval=i||2e3,this._stopOnError=o;var s=n.indexOf("/",n.indexOf("//")+2);this._frame_origin=n.substr(0,s),this._frame=window.document.createElement("iframe"),this._frame.style.visibility="hidden",this._frame.style.position="absolute",this._frame.style.display="none",this._frame.style.width=0,this._frame.style.height=0,this._frame.src=n}return e.prototype.load=function(){var e=this;return new Promise((function(t){e._frame.onload=function(){t()},window.document.body.appendChild(e._frame),e._boundMessageEvent=e._message.bind(e),window.addEventListener("message",e._boundMessageEvent,!1)}))},e.prototype._message=function(e){e.origin===this._frame_origin&&e.source===this._frame.contentWindow&&("error"===e.data?(n.Log.error("CheckSessionIFrame: error message from check session op iframe"),this._stopOnError&&this.stop()):"changed"===e.data?(n.Log.debug("CheckSessionIFrame: changed message from check session op iframe"),this.stop(),this._callback()):n.Log.debug("CheckSessionIFrame: "+e.data+" message from check session op iframe"))},e.prototype.start=function(e){var t=this;if(this._session_state!==e){n.Log.debug("CheckSessionIFrame.start"),this.stop(),this._session_state=e;var r=function(){t._frame.contentWindow.postMessage(t._client_id+" "+t._session_state,t._frame_origin)};r(),this._timer=window.setInterval(r,this._interval)}},e.prototype.stop=function(){this._session_state=null,this._timer&&(n.Log.debug("CheckSessionIFrame.stop"),window.clearInterval(this._timer),this._timer=null)},e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TokenRevocationClient=void 0;var n=r(0),i=r(2),o=r(1);t.TokenRevocationClient=function(){function e(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o.Global.XMLHttpRequest,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.MetadataService;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!t)throw n.Log.error("TokenRevocationClient.ctor: No settings provided"),new Error("No settings provided.");this._settings=t,this._XMLHttpRequestCtor=r,this._metadataService=new s(this._settings)}return e.prototype.revoke=function(e,t){var r=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"access_token";if(!e)throw n.Log.error("TokenRevocationClient.revoke: No token provided"),new Error("No token provided.");if("access_token"!==i&&"refresh_token"!=i)throw n.Log.error("TokenRevocationClient.revoke: Invalid token type"),new Error("Invalid token type.");return this._metadataService.getRevocationEndpoint().then((function(o){if(o){n.Log.debug("TokenRevocationClient.revoke: Revoking "+i);var s=r._settings.client_id,a=r._settings.client_secret;return r._revoke(o,s,a,e,i)}if(t)throw n.Log.error("TokenRevocationClient.revoke: Revocation not supported"),new Error("Revocation not supported")}))},e.prototype._revoke=function(e,t,r,i,o){var s=this;return new Promise((function(a,u){var c=new s._XMLHttpRequestCtor;c.open("POST",e),c.onload=function(){n.Log.debug("TokenRevocationClient.revoke: HTTP response received, status",c.status),200===c.status?a():u(Error(c.statusText+" ("+c.status+")"))},c.onerror=function(){n.Log.debug("TokenRevocationClient.revoke: Network Error."),u("Network Error")};var h="client_id="+encodeURIComponent(t);r&&(h+="&client_secret="+encodeURIComponent(r)),h+="&token_type_hint="+encodeURIComponent(o),h+="&token="+encodeURIComponent(i),c.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),c.send(h)}))},e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CordovaPopupWindow=void 0;var n=function(){function e(e,t){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:o.MetadataService,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:s.UserInfoService,u=arguments.length>3&&void 0!==arguments[3]?arguments[3]:c.JoseUtil,h=arguments.length>4&&void 0!==arguments[4]?arguments[4]:a.TokenClient;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!t)throw i.Log.error("ResponseValidator.ctor: No settings passed to ResponseValidator"),new Error("settings");this._settings=t,this._metadataService=new r(this._settings),this._userInfoService=new n(this._settings),this._joseUtil=u,this._tokenClient=new h(this._settings)}return e.prototype.validateSigninResponse=function(e,t){var r=this;return i.Log.debug("ResponseValidator.validateSigninResponse"),this._processSigninParams(e,t).then((function(t){return i.Log.debug("ResponseValidator.validateSigninResponse: state processed"),r._validateTokens(e,t).then((function(t){return i.Log.debug("ResponseValidator.validateSigninResponse: tokens validated"),r._processClaims(e,t).then((function(e){return i.Log.debug("ResponseValidator.validateSigninResponse: claims processed"),e}))}))}))},e.prototype.validateSignoutResponse=function(e,t){return e.id!==t.state?(i.Log.error("ResponseValidator.validateSignoutResponse: State does not match"),Promise.reject(new Error("State does not match"))):(i.Log.debug("ResponseValidator.validateSignoutResponse: state validated"),t.state=e.data,t.error?(i.Log.warn("ResponseValidator.validateSignoutResponse: Response was error",t.error),Promise.reject(new u.ErrorResponse(t))):Promise.resolve(t))},e.prototype._processSigninParams=function(e,t){if(e.id!==t.state)return i.Log.error("ResponseValidator._processSigninParams: State does not match"),Promise.reject(new Error("State does not match"));if(!e.client_id)return i.Log.error("ResponseValidator._processSigninParams: No client_id on state"),Promise.reject(new Error("No client_id on state"));if(!e.authority)return i.Log.error("ResponseValidator._processSigninParams: No authority on state"),Promise.reject(new Error("No authority on state"));if(this._settings.authority){if(this._settings.authority&&this._settings.authority!==e.authority)return i.Log.error("ResponseValidator._processSigninParams: authority mismatch on settings vs. signin state"),Promise.reject(new Error("authority mismatch on settings vs. signin state"))}else this._settings.authority=e.authority;if(this._settings.client_id){if(this._settings.client_id&&this._settings.client_id!==e.client_id)return i.Log.error("ResponseValidator._processSigninParams: client_id mismatch on settings vs. signin state"),Promise.reject(new Error("client_id mismatch on settings vs. signin state"))}else this._settings.client_id=e.client_id;return i.Log.debug("ResponseValidator._processSigninParams: state validated"),t.state=e.data,t.error?(i.Log.warn("ResponseValidator._processSigninParams: Response was error",t.error),Promise.reject(new u.ErrorResponse(t))):e.nonce&&!t.id_token?(i.Log.error("ResponseValidator._processSigninParams: Expecting id_token in response"),Promise.reject(new Error("No id_token in response"))):!e.nonce&&t.id_token?(i.Log.error("ResponseValidator._processSigninParams: Not expecting id_token in response"),Promise.reject(new Error("Unexpected id_token in response"))):e.code_verifier&&!t.code?(i.Log.error("ResponseValidator._processSigninParams: Expecting code in response"),Promise.reject(new Error("No code in response"))):!e.code_verifier&&t.code?(i.Log.error("ResponseValidator._processSigninParams: Not expecting code in response"),Promise.reject(new Error("Unexpected code in response"))):(t.scope||(t.scope=e.scope),Promise.resolve(t))},e.prototype._processClaims=function(e,t){var r=this;if(t.isOpenIdConnect){if(i.Log.debug("ResponseValidator._processClaims: response is OIDC, processing claims"),t.profile=this._filterProtocolClaims(t.profile),!0!==e.skipUserInfo&&this._settings.loadUserInfo&&t.access_token)return i.Log.debug("ResponseValidator._processClaims: loading user info"),this._userInfoService.getClaims(t.access_token).then((function(e){return i.Log.debug("ResponseValidator._processClaims: user info claims received from user info endpoint"),e.sub!==t.profile.sub?(i.Log.error("ResponseValidator._processClaims: sub from user info endpoint does not match sub in access_token"),Promise.reject(new Error("sub from user info endpoint does not match sub in access_token"))):(t.profile=r._mergeClaims(t.profile,e),i.Log.debug("ResponseValidator._processClaims: user info claims received, updated profile:",t.profile),t)}));i.Log.debug("ResponseValidator._processClaims: not loading user info")}else i.Log.debug("ResponseValidator._processClaims: response is not OIDC, not processing claims");return Promise.resolve(t)},e.prototype._mergeClaims=function(e,t){var r=Object.assign({},e);for(var i in t){var o=t[i];Array.isArray(o)||(o=[o]);for(var s=0;s1)return i.Log.error("ResponseValidator._validateIdToken: No kid found in id_token and more than one key found in metadata"),Promise.reject(new Error("No kid found in id_token and more than one key found in metadata"));u=a[0]}if(!u)return i.Log.error("ResponseValidator._validateIdToken: No key matching kid or alg found in signing keys"),Promise.reject(new Error("No key matching kid or alg found in signing keys"));var c=e.client_id,h=r._settings.clockSkew;return i.Log.debug("ResponseValidator._validateIdToken: Validaing JWT; using clock skew (in seconds) of: ",h),r._joseUtil.validateJwt(t.id_token,u,s,c,h).then((function(){return i.Log.debug("ResponseValidator._validateIdToken: JWT validation successful"),n.payload.sub?(t.profile=n.payload,t):(i.Log.error("ResponseValidator._validateIdToken: No sub present in id_token"),Promise.reject(new Error("No sub present in id_token")))}))}))}))},e.prototype._filterByAlg=function(e,t){var r=null;if(t.startsWith("RS"))r="RSA";else if(t.startsWith("PS"))r="PS";else{if(!t.startsWith("ES"))return i.Log.debug("ResponseValidator._filterByAlg: alg not supported: ",t),[];r="EC"}return i.Log.debug("ResponseValidator._filterByAlg: Looking for keys that match kty: ",r),e=e.filter((function(e){return e.kty===r})),i.Log.debug("ResponseValidator._filterByAlg: Number of keys that match kty: ",r,e.length),e},e.prototype._validateAccessToken=function(e){if(!e.profile)return i.Log.error("ResponseValidator._validateAccessToken: No profile loaded from id_token"),Promise.reject(new Error("No profile loaded from id_token"));if(!e.profile.at_hash)return i.Log.error("ResponseValidator._validateAccessToken: No at_hash in id_token"),Promise.reject(new Error("No at_hash in id_token"));if(!e.id_token)return i.Log.error("ResponseValidator._validateAccessToken: No id_token"),Promise.reject(new Error("No id_token"));var t=this._joseUtil.parseJwt(e.id_token);if(!t||!t.header)return i.Log.error("ResponseValidator._validateAccessToken: Failed to parse id_token",t),Promise.reject(new Error("Failed to parse id_token"));var r=t.header.alg;if(!r||5!==r.length)return i.Log.error("ResponseValidator._validateAccessToken: Unsupported alg:",r),Promise.reject(new Error("Unsupported alg: "+r));var n=r.substr(2,3);if(!n)return i.Log.error("ResponseValidator._validateAccessToken: Unsupported alg:",r,n),Promise.reject(new Error("Unsupported alg: "+r));if(256!==(n=parseInt(n))&&384!==n&&512!==n)return i.Log.error("ResponseValidator._validateAccessToken: Unsupported alg:",r,n),Promise.reject(new Error("Unsupported alg: "+r));var o="sha"+n,s=this._joseUtil.hashString(e.access_token,o);if(!s)return i.Log.error("ResponseValidator._validateAccessToken: access_token hash failed:",o),Promise.reject(new Error("Failed to validate at_hash"));var a=s.substr(0,s.length/2),u=this._joseUtil.hexToBase64Url(a);return u!==e.profile.at_hash?(i.Log.error("ResponseValidator._validateAccessToken: Failed to validate at_hash",u,e.profile.at_hash),Promise.reject(new Error("Failed to validate at_hash"))):(i.Log.debug("ResponseValidator._validateAccessToken: success"),Promise.resolve(e))},e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.UserInfoService=void 0;var n=r(7),i=r(2),o=r(0),s=r(4);t.UserInfoService=function(){function e(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.JsonService,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.MetadataService,u=arguments.length>3&&void 0!==arguments[3]?arguments[3]:s.JoseUtil;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!t)throw o.Log.error("UserInfoService.ctor: No settings passed"),new Error("settings");this._settings=t,this._jsonService=new r(void 0,void 0,this._getClaimsFromJwt.bind(this)),this._metadataService=new a(this._settings),this._joseUtil=u}return e.prototype.getClaims=function(e){var t=this;return e?this._metadataService.getUserInfoEndpoint().then((function(r){return o.Log.debug("UserInfoService.getClaims: received userinfo url",r),t._jsonService.getJson(r,e).then((function(e){return o.Log.debug("UserInfoService.getClaims: claims received",e),e}))})):(o.Log.error("UserInfoService.getClaims: No token passed"),Promise.reject(new Error("A token is required")))},e.prototype._getClaimsFromJwt=function e(t){var r=this;try{var n=this._joseUtil.parseJwt(t.responseText);if(!n||!n.header||!n.payload)return o.Log.error("UserInfoService._getClaimsFromJwt: Failed to parse JWT",n),Promise.reject(new Error("Failed to parse id_token"));var i=n.header.kid,s=void 0;switch(this._settings.userInfoJwtIssuer){case"OP":s=this._metadataService.getIssuer();break;case"ANY":s=Promise.resolve(n.payload.iss);break;default:s=Promise.resolve(this._settings.userInfoJwtIssuer)}return s.then((function(e){return o.Log.debug("UserInfoService._getClaimsFromJwt: Received issuer:"+e),r._metadataService.getSigningKeys().then((function(s){if(!s)return o.Log.error("UserInfoService._getClaimsFromJwt: No signing keys from metadata"),Promise.reject(new Error("No signing keys from metadata"));o.Log.debug("UserInfoService._getClaimsFromJwt: Received signing keys");var a=void 0;if(i)a=s.filter((function(e){return e.kid===i}))[0];else{if((s=r._filterByAlg(s,n.header.alg)).length>1)return o.Log.error("UserInfoService._getClaimsFromJwt: No kid found in id_token and more than one key found in metadata"),Promise.reject(new Error("No kid found in id_token and more than one key found in metadata"));a=s[0]}if(!a)return o.Log.error("UserInfoService._getClaimsFromJwt: No key matching kid or alg found in signing keys"),Promise.reject(new Error("No key matching kid or alg found in signing keys"));var u=r._settings.client_id,c=r._settings.clockSkew;return o.Log.debug("UserInfoService._getClaimsFromJwt: Validaing JWT; using clock skew (in seconds) of: ",c),r._joseUtil.validateJwt(t.responseText,a,e,u,c,void 0,!0).then((function(){return o.Log.debug("UserInfoService._getClaimsFromJwt: JWT validation successful"),n.payload}))}))}))}catch(e){return o.Log.error("UserInfoService._getClaimsFromJwt: Error parsing JWT response",e.message),void reject(e)}},e.prototype._filterByAlg=function(e,t){var r=null;if(t.startsWith("RS"))r="RSA";else if(t.startsWith("PS"))r="PS";else{if(!t.startsWith("ES"))return o.Log.debug("UserInfoService._filterByAlg: alg not supported: ",t),[];r="EC"}return o.Log.debug("UserInfoService._filterByAlg: Looking for keys that match kty: ",r),e=e.filter((function(e){return e.kty===r})),o.Log.debug("UserInfoService._filterByAlg: Number of keys that match kty: ",r,e.length),e},e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AllowedSigningAlgs=t.b64tohex=t.hextob64u=t.crypto=t.X509=t.KeyUtil=t.jws=void 0;var n=r(26);t.jws=n.jws,t.KeyUtil=n.KEYUTIL,t.X509=n.X509,t.crypto=n.crypto,t.hextob64u=n.hextob64u,t.b64tohex=n.b64tohex,t.AllowedSigningAlgs=["RS256","RS384","RS512","PS256","PS384","PS512","ES256","ES384","ES512"]},function(e,t,r){"use strict";(function(e){Object.defineProperty(t,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n={userAgent:!1},i={}; +/*! +Copyright (c) 2011, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.com/yui/license.html +version: 2.9.0 +*/if(void 0===o)var o={};o.lang={extend:function(e,t,r){if(!t||!e)throw new Error("YAHOO.lang.extend failed, please check that all dependencies are included.");var i=function(){};if(i.prototype=t.prototype,e.prototype=new i,e.prototype.constructor=e,e.superclass=t.prototype,t.prototype.constructor==Object.prototype.constructor&&(t.prototype.constructor=t),r){var o;for(o in r)e.prototype[o]=r[o];var s=function(){},a=["toString","valueOf"];try{/MSIE/.test(n.userAgent)&&(s=function(e,t){for(o=0;o>>2]>>>24-o%4*8&255;t[n+o>>>2]|=s<<24-(n+o)%4*8}else for(o=0;o>>2]=r[o>>>2];return this.sigBytes+=i,this},clamp:function(){var e=this.words,t=this.sigBytes;e[t>>>2]&=4294967295<<32-t%4*8,e.length=s.ceil(t/4)},clone:function(){var e=c.clone.call(this);return e.words=this.words.slice(0),e},random:function(e){for(var t=[],r=0;r>>2]>>>24-i%4*8&255;n.push((o>>>4).toString(16)),n.push((15&o).toString(16))}return n.join("")},parse:function(e){for(var t=e.length,r=[],n=0;n>>3]|=parseInt(e.substr(n,2),16)<<24-n%8*4;return new h.init(r,t/2)}},g=l.Latin1={stringify:function(e){for(var t=e.words,r=e.sigBytes,n=[],i=0;i>>2]>>>24-i%4*8&255;n.push(String.fromCharCode(o))}return n.join("")},parse:function(e){for(var t=e.length,r=[],n=0;n>>2]|=(255&e.charCodeAt(n))<<24-n%4*8;return new h.init(r,t)}},d=l.Utf8={stringify:function(e){try{return decodeURIComponent(escape(g.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return g.parse(unescape(encodeURIComponent(e)))}},p=u.BufferedBlockAlgorithm=c.extend({reset:function(){this._data=new h.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=d.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(e){var t=this._data,r=t.words,n=t.sigBytes,i=this.blockSize,o=n/(4*i),a=(o=e?s.ceil(o):s.max((0|o)-this._minBufferSize,0))*i,u=s.min(4*a,n);if(a){for(var c=0;c>>2]>>>24-i%4*8&255)<<16|(t[i+1>>>2]>>>24-(i+1)%4*8&255)<<8|t[i+2>>>2]>>>24-(i+2)%4*8&255,s=0;4>s&&i+.75*s>>6*(3-s)&63));if(t=n.charAt(64))for(;e.length%4;)e.push(t);return e.join("")},parse:function(e){var r=e.length,n=this._map;(i=n.charAt(64))&&-1!=(i=e.indexOf(i))&&(r=i);for(var i=[],o=0,s=0;s>>6-s%4*2;i[o>>>2]|=(a|u)<<24-o%4*8,o++}return t.create(i,o)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),function(e){for(var t=y,r=(i=t.lib).WordArray,n=i.Hasher,i=t.algo,o=[],s=[],a=function(e){return 4294967296*(e-(0|e))|0},u=2,c=0;64>c;){var h;e:{h=u;for(var l=e.sqrt(h),f=2;f<=l;f++)if(!(h%f)){h=!1;break e}h=!0}h&&(8>c&&(o[c]=a(e.pow(u,.5))),s[c]=a(e.pow(u,1/3)),c++),u++}var g=[];i=i.SHA256=n.extend({_doReset:function(){this._hash=new r.init(o.slice(0))},_doProcessBlock:function(e,t){for(var r=this._hash.words,n=r[0],i=r[1],o=r[2],a=r[3],u=r[4],c=r[5],h=r[6],l=r[7],f=0;64>f;f++){if(16>f)g[f]=0|e[t+f];else{var d=g[f-15],p=g[f-2];g[f]=((d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3)+g[f-7]+((p<<15|p>>>17)^(p<<13|p>>>19)^p>>>10)+g[f-16]}d=l+((u<<26|u>>>6)^(u<<21|u>>>11)^(u<<7|u>>>25))+(u&c^~u&h)+s[f]+g[f],p=((n<<30|n>>>2)^(n<<19|n>>>13)^(n<<10|n>>>22))+(n&i^n&o^i&o),l=h,h=c,c=u,u=a+d|0,a=o,o=i,i=n,n=d+p|0}r[0]=r[0]+n|0,r[1]=r[1]+i|0,r[2]=r[2]+o|0,r[3]=r[3]+a|0,r[4]=r[4]+u|0,r[5]=r[5]+c|0,r[6]=r[6]+h|0,r[7]=r[7]+l|0},_doFinalize:function(){var t=this._data,r=t.words,n=8*this._nDataBytes,i=8*t.sigBytes;return r[i>>>5]|=128<<24-i%32,r[14+(i+64>>>9<<4)]=e.floor(n/4294967296),r[15+(i+64>>>9<<4)]=n,t.sigBytes=4*r.length,this._process(),this._hash},clone:function(){var e=n.clone.call(this);return e._hash=this._hash.clone(),e}}),t.SHA256=n._createHelper(i),t.HmacSHA256=n._createHmacHelper(i)}(Math),function(){function e(){return n.create.apply(n,arguments)}for(var t=y,r=t.lib.Hasher,n=(o=t.x64).Word,i=o.WordArray,o=t.algo,s=[e(1116352408,3609767458),e(1899447441,602891725),e(3049323471,3964484399),e(3921009573,2173295548),e(961987163,4081628472),e(1508970993,3053834265),e(2453635748,2937671579),e(2870763221,3664609560),e(3624381080,2734883394),e(310598401,1164996542),e(607225278,1323610764),e(1426881987,3590304994),e(1925078388,4068182383),e(2162078206,991336113),e(2614888103,633803317),e(3248222580,3479774868),e(3835390401,2666613458),e(4022224774,944711139),e(264347078,2341262773),e(604807628,2007800933),e(770255983,1495990901),e(1249150122,1856431235),e(1555081692,3175218132),e(1996064986,2198950837),e(2554220882,3999719339),e(2821834349,766784016),e(2952996808,2566594879),e(3210313671,3203337956),e(3336571891,1034457026),e(3584528711,2466948901),e(113926993,3758326383),e(338241895,168717936),e(666307205,1188179964),e(773529912,1546045734),e(1294757372,1522805485),e(1396182291,2643833823),e(1695183700,2343527390),e(1986661051,1014477480),e(2177026350,1206759142),e(2456956037,344077627),e(2730485921,1290863460),e(2820302411,3158454273),e(3259730800,3505952657),e(3345764771,106217008),e(3516065817,3606008344),e(3600352804,1432725776),e(4094571909,1467031594),e(275423344,851169720),e(430227734,3100823752),e(506948616,1363258195),e(659060556,3750685593),e(883997877,3785050280),e(958139571,3318307427),e(1322822218,3812723403),e(1537002063,2003034995),e(1747873779,3602036899),e(1955562222,1575990012),e(2024104815,1125592928),e(2227730452,2716904306),e(2361852424,442776044),e(2428436474,593698344),e(2756734187,3733110249),e(3204031479,2999351573),e(3329325298,3815920427),e(3391569614,3928383900),e(3515267271,566280711),e(3940187606,3454069534),e(4118630271,4000239992),e(116418474,1914138554),e(174292421,2731055270),e(289380356,3203993006),e(460393269,320620315),e(685471733,587496836),e(852142971,1086792851),e(1017036298,365543100),e(1126000580,2618297676),e(1288033470,3409855158),e(1501505948,4234509866),e(1607167915,987167468),e(1816402316,1246189591)],a=[],u=0;80>u;u++)a[u]=e();o=o.SHA512=r.extend({_doReset:function(){this._hash=new i.init([new n.init(1779033703,4089235720),new n.init(3144134277,2227873595),new n.init(1013904242,4271175723),new n.init(2773480762,1595750129),new n.init(1359893119,2917565137),new n.init(2600822924,725511199),new n.init(528734635,4215389547),new n.init(1541459225,327033209)])},_doProcessBlock:function(e,t){for(var r=(l=this._hash.words)[0],n=l[1],i=l[2],o=l[3],u=l[4],c=l[5],h=l[6],l=l[7],f=r.high,g=r.low,d=n.high,p=n.low,v=i.high,y=i.low,m=o.high,_=o.low,S=u.high,w=u.low,F=c.high,b=c.low,E=h.high,x=h.low,k=l.high,A=l.low,P=f,C=g,T=d,R=p,I=v,D=y,U=m,L=_,N=S,O=w,B=F,M=b,j=E,H=x,K=k,V=A,q=0;80>q;q++){var J=a[q];if(16>q)var W=J.high=0|e[t+2*q],z=J.low=0|e[t+2*q+1];else{W=((z=(W=a[q-15]).high)>>>1|(Y=W.low)<<31)^(z>>>8|Y<<24)^z>>>7;var Y=(Y>>>1|z<<31)^(Y>>>8|z<<24)^(Y>>>7|z<<25),G=((z=(G=a[q-2]).high)>>>19|(X=G.low)<<13)^(z<<3|X>>>29)^z>>>6,X=(X>>>19|z<<13)^(X<<3|z>>>29)^(X>>>6|z<<26),$=(z=a[q-7]).high,Q=(Z=a[q-16]).high,Z=Z.low;W=(W=(W=W+$+((z=Y+z.low)>>>0>>0?1:0))+G+((z+=X)>>>0>>0?1:0))+Q+((z+=Z)>>>0>>0?1:0),J.high=W,J.low=z}$=N&B^~N&j,Z=O&M^~O&H,J=P&T^P&I^T&I;var ee=C&R^C&D^R&D,te=(Y=(P>>>28|C<<4)^(P<<30|C>>>2)^(P<<25|C>>>7),G=(C>>>28|P<<4)^(C<<30|P>>>2)^(C<<25|P>>>7),(X=s[q]).high),re=X.low;Q=(Q=(Q=(Q=K+((N>>>14|O<<18)^(N>>>18|O<<14)^(N<<23|O>>>9))+((X=V+((O>>>14|N<<18)^(O>>>18|N<<14)^(O<<23|N>>>9)))>>>0>>0?1:0))+$+((X+=Z)>>>0>>0?1:0))+te+((X+=re)>>>0>>0?1:0))+W+((X+=z)>>>0>>0?1:0),K=j,V=H,j=B,H=M,B=N,M=O,N=U+Q+((O=L+X|0)>>>0>>0?1:0)|0,U=I,L=D,I=T,D=R,T=P,R=C,P=Q+(J=Y+J+((z=G+ee)>>>0>>0?1:0))+((C=X+z|0)>>>0>>0?1:0)|0}g=r.low=g+C,r.high=f+P+(g>>>0>>0?1:0),p=n.low=p+R,n.high=d+T+(p>>>0>>0?1:0),y=i.low=y+D,i.high=v+I+(y>>>0>>0?1:0),_=o.low=_+L,o.high=m+U+(_>>>0>>0?1:0),w=u.low=w+O,u.high=S+N+(w>>>0>>0?1:0),b=c.low=b+M,c.high=F+B+(b>>>0>>0?1:0),x=h.low=x+H,h.high=E+j+(x>>>0>>0?1:0),A=l.low=A+V,l.high=k+K+(A>>>0>>0?1:0)},_doFinalize:function(){var e=this._data,t=e.words,r=8*this._nDataBytes,n=8*e.sigBytes;return t[n>>>5]|=128<<24-n%32,t[30+(n+128>>>10<<5)]=Math.floor(r/4294967296),t[31+(n+128>>>10<<5)]=r,e.sigBytes=4*t.length,this._process(),this._hash.toX32()},clone:function(){var e=r.clone.call(this);return e._hash=this._hash.clone(),e},blockSize:32}),t.SHA512=r._createHelper(o),t.HmacSHA512=r._createHmacHelper(o)}(),function(){var e=y,t=(i=e.x64).Word,r=i.WordArray,n=(i=e.algo).SHA512,i=i.SHA384=n.extend({_doReset:function(){this._hash=new r.init([new t.init(3418070365,3238371032),new t.init(1654270250,914150663),new t.init(2438529370,812702999),new t.init(355462360,4144912697),new t.init(1731405415,4290775857),new t.init(2394180231,1750603025),new t.init(3675008525,1694076839),new t.init(1203062813,3204075428)])},_doFinalize:function(){var e=n._doFinalize.call(this);return e.sigBytes-=16,e}});e.SHA384=n._createHelper(i),e.HmacSHA384=n._createHmacHelper(i)}(); +/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/ + */ +var m,_="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function S(e){var t,r,n="";for(t=0;t+3<=e.length;t+=3)r=parseInt(e.substring(t,t+3),16),n+=_.charAt(r>>6)+_.charAt(63&r);for(t+1==e.length?(r=parseInt(e.substring(t,t+1),16),n+=_.charAt(r<<2)):t+2==e.length&&(r=parseInt(e.substring(t,t+2),16),n+=_.charAt(r>>2)+_.charAt((3&r)<<4));(3&n.length)>0;)n+="=";return n}function w(e){var t,r,n,i="",o=0;for(t=0;t>2),r=3&n,o=1):1==o?(i+=P(r<<2|n>>4),r=15&n,o=2):2==o?(i+=P(r),i+=P(n>>2),r=3&n,o=3):(i+=P(r<<2|n>>4),i+=P(15&n),o=0));return 1==o&&(i+=P(r<<2)),i}function F(e){var t,r=w(e),n=new Array;for(t=0;2*t>15;--o>=0;){var u=32767&this[e],c=this[e++]>>15,h=a*u+c*s;i=((u=s*u+((32767&h)<<15)+r[n]+(1073741823&i))>>>30)+(h>>>15)+a*c+(i>>>30),r[n++]=1073741823&u}return i},m=30):"Netscape"!=n.appName?(b.prototype.am=function(e,t,r,n,i,o){for(;--o>=0;){var s=t*this[e++]+r[n]+i;i=Math.floor(s/67108864),r[n++]=67108863&s}return i},m=26):(b.prototype.am=function(e,t,r,n,i,o){for(var s=16383&t,a=t>>14;--o>=0;){var u=16383&this[e],c=this[e++]>>14,h=a*u+c*s;i=((u=s*u+((16383&h)<<14)+r[n]+i)>>28)+(h>>14)+a*c,r[n++]=268435455&u}return i},m=28),b.prototype.DB=m,b.prototype.DM=(1<>>16)&&(e=t,r+=16),0!=(t=e>>8)&&(e=t,r+=8),0!=(t=e>>4)&&(e=t,r+=4),0!=(t=e>>2)&&(e=t,r+=2),0!=(t=e>>1)&&(e=t,r+=1),r}function I(e){this.m=e}function D(e){this.m=e,this.mp=e.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<>=16,t+=16),0==(255&e)&&(e>>=8,t+=8),0==(15&e)&&(e>>=4,t+=4),0==(3&e)&&(e>>=2,t+=2),0==(1&e)&&++t,t}function M(e){for(var t=0;0!=e;)e&=e-1,++t;return t}function j(){}function H(e){return e}function K(e){this.r2=E(),this.q3=E(),b.ONE.dlShiftTo(2*e.t,this.r2),this.mu=this.r2.divide(e),this.m=e}I.prototype.convert=function(e){return e.s<0||e.compareTo(this.m)>=0?e.mod(this.m):e},I.prototype.revert=function(e){return e},I.prototype.reduce=function(e){e.divRemTo(this.m,null,e)},I.prototype.mulTo=function(e,t,r){e.multiplyTo(t,r),this.reduce(r)},I.prototype.sqrTo=function(e,t){e.squareTo(t),this.reduce(t)},D.prototype.convert=function(e){var t=E();return e.abs().dlShiftTo(this.m.t,t),t.divRemTo(this.m,null,t),e.s<0&&t.compareTo(b.ZERO)>0&&this.m.subTo(t,t),t},D.prototype.revert=function(e){var t=E();return e.copyTo(t),this.reduce(t),t},D.prototype.reduce=function(e){for(;e.t<=this.mt2;)e[e.t++]=0;for(var t=0;t>15)*this.mpl&this.um)<<15)&e.DM;for(e[r=t+this.m.t]+=this.m.am(0,n,e,t,0,this.m.t);e[r]>=e.DV;)e[r]-=e.DV,e[++r]++}e.clamp(),e.drShiftTo(this.m.t,e),e.compareTo(this.m)>=0&&e.subTo(this.m,e)},D.prototype.mulTo=function(e,t,r){e.multiplyTo(t,r),this.reduce(r)},D.prototype.sqrTo=function(e,t){e.squareTo(t),this.reduce(t)},b.prototype.copyTo=function(e){for(var t=this.t-1;t>=0;--t)e[t]=this[t];e.t=this.t,e.s=this.s},b.prototype.fromInt=function(e){this.t=1,this.s=e<0?-1:0,e>0?this[0]=e:e<-1?this[0]=e+this.DV:this.t=0},b.prototype.fromString=function(e,t){var r;if(16==t)r=4;else if(8==t)r=3;else if(256==t)r=8;else if(2==t)r=1;else if(32==t)r=5;else{if(4!=t)return void this.fromRadix(e,t);r=2}this.t=0,this.s=0;for(var n=e.length,i=!1,o=0;--n>=0;){var s=8==r?255&e[n]:C(e,n);s<0?"-"==e.charAt(n)&&(i=!0):(i=!1,0==o?this[this.t++]=s:o+r>this.DB?(this[this.t-1]|=(s&(1<>this.DB-o):this[this.t-1]|=s<=this.DB&&(o-=this.DB))}8==r&&0!=(128&e[0])&&(this.s=-1,o>0&&(this[this.t-1]|=(1<0&&this[this.t-1]==e;)--this.t},b.prototype.dlShiftTo=function(e,t){var r;for(r=this.t-1;r>=0;--r)t[r+e]=this[r];for(r=e-1;r>=0;--r)t[r]=0;t.t=this.t+e,t.s=this.s},b.prototype.drShiftTo=function(e,t){for(var r=e;r=0;--r)t[r+s+1]=this[r]>>i|a,a=(this[r]&o)<=0;--r)t[r]=0;t[s]=a,t.t=this.t+s+1,t.s=this.s,t.clamp()},b.prototype.rShiftTo=function(e,t){t.s=this.s;var r=Math.floor(e/this.DB);if(r>=this.t)t.t=0;else{var n=e%this.DB,i=this.DB-n,o=(1<>n;for(var s=r+1;s>n;n>0&&(t[this.t-r-1]|=(this.s&o)<>=this.DB;if(e.t>=this.DB;n+=this.s}else{for(n+=this.s;r>=this.DB;n-=e.s}t.s=n<0?-1:0,n<-1?t[r++]=this.DV+n:n>0&&(t[r++]=n),t.t=r,t.clamp()},b.prototype.multiplyTo=function(e,t){var r=this.abs(),n=e.abs(),i=r.t;for(t.t=i+n.t;--i>=0;)t[i]=0;for(i=0;i=0;)e[r]=0;for(r=0;r=t.DV&&(e[r+t.t]-=t.DV,e[r+t.t+1]=1)}e.t>0&&(e[e.t-1]+=t.am(r,t[r],e,2*r,0,1)),e.s=0,e.clamp()},b.prototype.divRemTo=function(e,t,r){var n=e.abs();if(!(n.t<=0)){var i=this.abs();if(i.t0?(n.lShiftTo(u,o),i.lShiftTo(u,r)):(n.copyTo(o),i.copyTo(r));var c=o.t,h=o[c-1];if(0!=h){var l=h*(1<1?o[c-2]>>this.F2:0),f=this.FV/l,g=(1<=0&&(r[r.t++]=1,r.subTo(y,r)),b.ONE.dlShiftTo(c,y),y.subTo(o,o);o.t=0;){var m=r[--p]==h?this.DM:Math.floor(r[p]*f+(r[p-1]+d)*g);if((r[p]+=o.am(0,m,r,v,0,c))0&&r.rShiftTo(u,r),s<0&&b.ZERO.subTo(r,r)}}},b.prototype.invDigit=function(){if(this.t<1)return 0;var e=this[0];if(0==(1&e))return 0;var t=3&e;return(t=(t=(t=(t=t*(2-(15&e)*t)&15)*(2-(255&e)*t)&255)*(2-((65535&e)*t&65535))&65535)*(2-e*t%this.DV)%this.DV)>0?this.DV-t:-t},b.prototype.isEven=function(){return 0==(this.t>0?1&this[0]:this.s)},b.prototype.exp=function(e,t){if(e>4294967295||e<1)return b.ONE;var r=E(),n=E(),i=t.convert(this),o=R(e)-1;for(i.copyTo(r);--o>=0;)if(t.sqrTo(r,n),(e&1<0)t.mulTo(n,i,r);else{var s=r;r=n,n=s}return t.revert(r)},b.prototype.toString=function(e){if(this.s<0)return"-"+this.negate().toString(e);var t;if(16==e)t=4;else if(8==e)t=3;else if(2==e)t=1;else if(32==e)t=5;else{if(4!=e)return this.toRadix(e);t=2}var r,n=(1<0)for(a>a)>0&&(i=!0,o=P(r));s>=0;)a>(a+=this.DB-t)):(r=this[s]>>(a-=t)&n,a<=0&&(a+=this.DB,--s)),r>0&&(i=!0),i&&(o+=P(r));return i?o:"0"},b.prototype.negate=function(){var e=E();return b.ZERO.subTo(this,e),e},b.prototype.abs=function(){return this.s<0?this.negate():this},b.prototype.compareTo=function(e){var t=this.s-e.s;if(0!=t)return t;var r=this.t;if(0!=(t=r-e.t))return this.s<0?-t:t;for(;--r>=0;)if(0!=(t=this[r]-e[r]))return t;return 0},b.prototype.bitLength=function(){return this.t<=0?0:this.DB*(this.t-1)+R(this[this.t-1]^this.s&this.DM)},b.prototype.mod=function(e){var t=E();return this.abs().divRemTo(e,null,t),this.s<0&&t.compareTo(b.ZERO)>0&&e.subTo(t,t),t},b.prototype.modPowInt=function(e,t){var r;return r=e<256||t.isEven()?new I(t):new D(t),this.exp(e,r)},b.ZERO=T(0),b.ONE=T(1),j.prototype.convert=H,j.prototype.revert=H,j.prototype.mulTo=function(e,t,r){e.multiplyTo(t,r)},j.prototype.sqrTo=function(e,t){e.squareTo(t)},K.prototype.convert=function(e){if(e.s<0||e.t>2*this.m.t)return e.mod(this.m);if(e.compareTo(this.m)<0)return e;var t=E();return e.copyTo(t),this.reduce(t),t},K.prototype.revert=function(e){return e},K.prototype.reduce=function(e){for(e.drShiftTo(this.m.t-1,this.r2),e.t>this.m.t+1&&(e.t=this.m.t+1,e.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);e.compareTo(this.r2)<0;)e.dAddOffset(1,this.m.t+1);for(e.subTo(this.r2,e);e.compareTo(this.m)>=0;)e.subTo(this.m,e)},K.prototype.mulTo=function(e,t,r){e.multiplyTo(t,r),this.reduce(r)},K.prototype.sqrTo=function(e,t){e.squareTo(t),this.reduce(t)};var V,q,J,W=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997],z=(1<<26)/W[W.length-1]; +/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/ + */function Y(){this.i=0,this.j=0,this.S=new Array} +/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/ + */ +function G(){!function(e){q[J++]^=255&e,q[J++]^=e>>8&255,q[J++]^=e>>16&255,q[J++]^=e>>24&255,J>=256&&(J-=256)}((new Date).getTime())}if(b.prototype.chunkSize=function(e){return Math.floor(Math.LN2*this.DB/Math.log(e))},b.prototype.toRadix=function(e){if(null==e&&(e=10),0==this.signum()||e<2||e>36)return"0";var t=this.chunkSize(e),r=Math.pow(e,t),n=T(r),i=E(),o=E(),s="";for(this.divRemTo(n,i,o);i.signum()>0;)s=(r+o.intValue()).toString(e).substr(1)+s,i.divRemTo(n,i,o);return o.intValue().toString(e)+s},b.prototype.fromRadix=function(e,t){this.fromInt(0),null==t&&(t=10);for(var r=this.chunkSize(t),n=Math.pow(t,r),i=!1,o=0,s=0,a=0;a=r&&(this.dMultiply(n),this.dAddOffset(s,0),o=0,s=0))}o>0&&(this.dMultiply(Math.pow(t,o)),this.dAddOffset(s,0)),i&&b.ZERO.subTo(this,this)},b.prototype.fromNumber=function(e,t,r){if("number"==typeof t)if(e<2)this.fromInt(1);else for(this.fromNumber(e,r),this.testBit(e-1)||this.bitwiseTo(b.ONE.shiftLeft(e-1),L,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(t);)this.dAddOffset(2,0),this.bitLength()>e&&this.subTo(b.ONE.shiftLeft(e-1),this);else{var n=new Array,i=7&e;n.length=1+(e>>3),t.nextBytes(n),i>0?n[0]&=(1<>=this.DB;if(e.t>=this.DB;n+=this.s}else{for(n+=this.s;r>=this.DB;n+=e.s}t.s=n<0?-1:0,n>0?t[r++]=n:n<-1&&(t[r++]=this.DV+n),t.t=r,t.clamp()},b.prototype.dMultiply=function(e){this[this.t]=this.am(0,e-1,this,0,0,this.t),++this.t,this.clamp()},b.prototype.dAddOffset=function(e,t){if(0!=e){for(;this.t<=t;)this[this.t++]=0;for(this[t]+=e;this[t]>=this.DV;)this[t]-=this.DV,++t>=this.t&&(this[this.t++]=0),++this[t]}},b.prototype.multiplyLowerTo=function(e,t,r){var n,i=Math.min(this.t+e.t,t);for(r.s=0,r.t=i;i>0;)r[--i]=0;for(n=r.t-this.t;i=0;)r[n]=0;for(n=Math.max(t-this.t,0);n0)if(0==t)r=this[0]%e;else for(var n=this.t-1;n>=0;--n)r=(t*r+this[n])%e;return r},b.prototype.millerRabin=function(e){var t=this.subtract(b.ONE),r=t.getLowestSetBit();if(r<=0)return!1;var n=t.shiftRight(r);(e=e+1>>1)>W.length&&(e=W.length);for(var i=E(),o=0;o>24},b.prototype.shortValue=function(){return 0==this.t?this.s:this[0]<<16>>16},b.prototype.signum=function(){return this.s<0?-1:this.t<=0||1==this.t&&this[0]<=0?0:1},b.prototype.toByteArray=function(){var e=this.t,t=new Array;t[0]=this.s;var r,n=this.DB-e*this.DB%8,i=0;if(e-- >0)for(n>n)!=(this.s&this.DM)>>n&&(t[i++]=r|this.s<=0;)n<8?(r=(this[e]&(1<>(n+=this.DB-8)):(r=this[e]>>(n-=8)&255,n<=0&&(n+=this.DB,--e)),0!=(128&r)&&(r|=-256),0==i&&(128&this.s)!=(128&r)&&++i,(i>0||r!=this.s)&&(t[i++]=r);return t},b.prototype.equals=function(e){return 0==this.compareTo(e)},b.prototype.min=function(e){return this.compareTo(e)<0?this:e},b.prototype.max=function(e){return this.compareTo(e)>0?this:e},b.prototype.and=function(e){var t=E();return this.bitwiseTo(e,U,t),t},b.prototype.or=function(e){var t=E();return this.bitwiseTo(e,L,t),t},b.prototype.xor=function(e){var t=E();return this.bitwiseTo(e,N,t),t},b.prototype.andNot=function(e){var t=E();return this.bitwiseTo(e,O,t),t},b.prototype.not=function(){for(var e=E(),t=0;t=this.t?0!=this.s:0!=(this[t]&1<1){var h=E();for(n.sqrTo(s[1],h);a<=c;)s[a]=E(),n.mulTo(h,s[a-2],s[a]),a+=2}var l,f,g=e.t-1,d=!0,p=E();for(i=R(e[g])-1;g>=0;){for(i>=u?l=e[g]>>i-u&c:(l=(e[g]&(1<0&&(l|=e[g-1]>>this.DB+i-u)),a=r;0==(1&l);)l>>=1,--a;if((i-=a)<0&&(i+=this.DB,--g),d)s[l].copyTo(o),d=!1;else{for(;a>1;)n.sqrTo(o,p),n.sqrTo(p,o),a-=2;a>0?n.sqrTo(o,p):(f=o,o=p,p=f),n.mulTo(p,s[l],o)}for(;g>=0&&0==(e[g]&1<=0?(r.subTo(n,r),t&&i.subTo(s,i),o.subTo(a,o)):(n.subTo(r,n),t&&s.subTo(i,s),a.subTo(o,a))}return 0!=n.compareTo(b.ONE)?b.ZERO:a.compareTo(e)>=0?a.subtract(e):a.signum()<0?(a.addTo(e,a),a.signum()<0?a.add(e):a):a},b.prototype.pow=function(e){return this.exp(e,new j)},b.prototype.gcd=function(e){var t=this.s<0?this.negate():this.clone(),r=e.s<0?e.negate():e.clone();if(t.compareTo(r)<0){var n=t;t=r,r=n}var i=t.getLowestSetBit(),o=r.getLowestSetBit();if(o<0)return t;for(i0&&(t.rShiftTo(o,t),r.rShiftTo(o,r));t.signum()>0;)(i=t.getLowestSetBit())>0&&t.rShiftTo(i,t),(i=r.getLowestSetBit())>0&&r.rShiftTo(i,r),t.compareTo(r)>=0?(t.subTo(r,t),t.rShiftTo(1,t)):(r.subTo(t,r),r.rShiftTo(1,r));return o>0&&r.lShiftTo(o,r),r},b.prototype.isProbablePrime=function(e){var t,r=this.abs();if(1==r.t&&r[0]<=W[W.length-1]){for(t=0;t>>8,q[J++]=255&X;J=0,G()}function ee(){if(null==V){for(G(),(V=new Y).init(q),J=0;J>24,(16711680&i)>>16,(65280&i)>>8,255&i]))),i+=1;return n}function ie(){this.n=null,this.e=0,this.d=null,this.p=null,this.q=null,this.dmp1=null,this.dmq1=null,this.coeff=null} +/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/ + */function oe(e,t){this.x=t,this.q=e}function se(e,t,r,n){this.curve=e,this.x=t,this.y=r,this.z=null==n?b.ONE:n,this.zinv=null}function ae(e,t,r){this.q=e,this.a=this.fromBigInteger(t),this.b=this.fromBigInteger(r),this.infinity=new se(this,null,null)}te.prototype.nextBytes=function(e){var t;for(t=0;t0&&t.length>0))throw"Invalid RSA public key";this.n=re(e,16),this.e=parseInt(t,16)}},ie.prototype.encrypt=function(e){var t=function(e,t){if(t=0&&t>0;){var i=e.charCodeAt(n--);i<128?r[--t]=i:i>127&&i<2048?(r[--t]=63&i|128,r[--t]=i>>6|192):(r[--t]=63&i|128,r[--t]=i>>6&63|128,r[--t]=i>>12|224)}r[--t]=0;for(var o=new te,s=new Array;t>2;){for(s[0]=0;0==s[0];)o.nextBytes(s);r[--t]=s[0]}return r[--t]=2,r[--t]=0,new b(r)}(e,this.n.bitLength()+7>>3);if(null==t)return null;var r=this.doPublic(t);if(null==r)return null;var n=r.toString(16);return 0==(1&n.length)?n:"0"+n},ie.prototype.encryptOAEP=function(e,t,r){var n=function(e,t,r,n){var i=ce.crypto.MessageDigest,o=ce.crypto.Util,s=null;if(r||(r="sha1"),"string"==typeof r&&(s=i.getCanonicalAlgName(r),n=i.getHashLength(s),r=function(e){return be(o.hashHex(Ee(e),s))}),e.length+2*n+2>t)throw"Message too long for RSA";var a,u="";for(a=0;a>3,t,r);if(null==n)return null;var i=this.doPublic(n);if(null==i)return null;var o=i.toString(16);return 0==(1&o.length)?o:"0"+o},ie.prototype.type="RSA",oe.prototype.equals=function(e){return e==this||this.q.equals(e.q)&&this.x.equals(e.x)},oe.prototype.toBigInteger=function(){return this.x},oe.prototype.negate=function(){return new oe(this.q,this.x.negate().mod(this.q))},oe.prototype.add=function(e){return new oe(this.q,this.x.add(e.toBigInteger()).mod(this.q))},oe.prototype.subtract=function(e){return new oe(this.q,this.x.subtract(e.toBigInteger()).mod(this.q))},oe.prototype.multiply=function(e){return new oe(this.q,this.x.multiply(e.toBigInteger()).mod(this.q))},oe.prototype.square=function(){return new oe(this.q,this.x.square().mod(this.q))},oe.prototype.divide=function(e){return new oe(this.q,this.x.multiply(e.toBigInteger().modInverse(this.q)).mod(this.q))},se.prototype.getX=function(){return null==this.zinv&&(this.zinv=this.z.modInverse(this.curve.q)),this.curve.fromBigInteger(this.x.toBigInteger().multiply(this.zinv).mod(this.curve.q))},se.prototype.getY=function(){return null==this.zinv&&(this.zinv=this.z.modInverse(this.curve.q)),this.curve.fromBigInteger(this.y.toBigInteger().multiply(this.zinv).mod(this.curve.q))},se.prototype.equals=function(e){return e==this||(this.isInfinity()?e.isInfinity():e.isInfinity()?this.isInfinity():!!e.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(e.z)).mod(this.curve.q).equals(b.ZERO)&&e.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(e.z)).mod(this.curve.q).equals(b.ZERO))},se.prototype.isInfinity=function(){return null==this.x&&null==this.y||this.z.equals(b.ZERO)&&!this.y.toBigInteger().equals(b.ZERO)},se.prototype.negate=function(){return new se(this.curve,this.x,this.y.negate(),this.z)},se.prototype.add=function(e){if(this.isInfinity())return e;if(e.isInfinity())return this;var t=e.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(e.z)).mod(this.curve.q),r=e.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(e.z)).mod(this.curve.q);if(b.ZERO.equals(r))return b.ZERO.equals(t)?this.twice():this.curve.getInfinity();var n=new b("3"),i=this.x.toBigInteger(),o=this.y.toBigInteger(),s=(e.x.toBigInteger(),e.y.toBigInteger(),r.square()),a=s.multiply(r),u=i.multiply(s),c=t.square().multiply(this.z),h=c.subtract(u.shiftLeft(1)).multiply(e.z).subtract(a).multiply(r).mod(this.curve.q),l=u.multiply(n).multiply(t).subtract(o.multiply(a)).subtract(c.multiply(t)).multiply(e.z).add(t.multiply(a)).mod(this.curve.q),f=a.multiply(this.z).multiply(e.z).mod(this.curve.q);return new se(this.curve,this.curve.fromBigInteger(h),this.curve.fromBigInteger(l),f)},se.prototype.twice=function(){if(this.isInfinity())return this;if(0==this.y.toBigInteger().signum())return this.curve.getInfinity();var e=new b("3"),t=this.x.toBigInteger(),r=this.y.toBigInteger(),n=r.multiply(this.z),i=n.multiply(r).mod(this.curve.q),o=this.curve.a.toBigInteger(),s=t.square().multiply(e);b.ZERO.equals(o)||(s=s.add(this.z.square().multiply(o)));var a=(s=s.mod(this.curve.q)).square().subtract(t.shiftLeft(3).multiply(i)).shiftLeft(1).multiply(n).mod(this.curve.q),u=s.multiply(e).multiply(t).subtract(i.shiftLeft(1)).shiftLeft(2).multiply(i).subtract(s.square().multiply(s)).mod(this.curve.q),c=n.square().multiply(n).shiftLeft(3).mod(this.curve.q);return new se(this.curve,this.curve.fromBigInteger(a),this.curve.fromBigInteger(u),c)},se.prototype.multiply=function(e){if(this.isInfinity())return this;if(0==e.signum())return this.curve.getInfinity();var t,r=e,n=r.multiply(new b("3")),i=this.negate(),o=this;for(t=n.bitLength()-2;t>0;--t){o=o.twice();var s=n.testBit(t);s!=r.testBit(t)&&(o=o.add(s?this:i))}return o},se.prototype.multiplyTwo=function(e,t,r){var n;n=e.bitLength()>r.bitLength()?e.bitLength()-1:r.bitLength()-1;for(var i=this.curve.getInfinity(),o=this.add(t);n>=0;)i=i.twice(),e.testBit(n)?i=r.testBit(n)?i.add(o):i.add(this):r.testBit(n)&&(i=i.add(t)),--n;return i},ae.prototype.getQ=function(){return this.q},ae.prototype.getA=function(){return this.a},ae.prototype.getB=function(){return this.b},ae.prototype.equals=function(e){return e==this||this.q.equals(e.q)&&this.a.equals(e.a)&&this.b.equals(e.b)},ae.prototype.getInfinity=function(){return this.infinity},ae.prototype.fromBigInteger=function(e){return new oe(this.q,e)},ae.prototype.decodePointHex=function(e){switch(parseInt(e.substr(0,2),16)){case 0:return this.infinity;case 2:case 3:return null;case 4:case 6:case 7:var t=(e.length-2)/2,r=e.substr(2,t),n=e.substr(t+2,t);return new se(this,this.fromBigInteger(new b(r,16)),this.fromBigInteger(new b(n,16)));default:return null}}, +/*! (c) Stefan Thomas | https://github.com/bitcoinjs/bitcoinjs-lib + */ +oe.prototype.getByteLength=function(){return Math.floor((this.toBigInteger().bitLength()+7)/8)},se.prototype.getEncoded=function(e){var t=function(e,t){var r=e.toByteArrayUnsigned();if(tr.length;)r.unshift(0);return r},r=this.getX().toBigInteger(),n=this.getY().toBigInteger(),i=t(r,32);return e?n.isEven()?i.unshift(2):i.unshift(3):(i.unshift(4),i=i.concat(t(n,32))),i},se.decodeFrom=function(e,t){t[0];var r=t.length-1,n=t.slice(1,1+r/2),i=t.slice(1+r/2,1+r);n.unshift(0),i.unshift(0);var o=new b(n),s=new b(i);return new se(e,e.fromBigInteger(o),e.fromBigInteger(s))},se.decodeFromHex=function(e,t){t.substr(0,2);var r=t.length-2,n=t.substr(2,r/2),i=t.substr(2+r/2,r/2),o=new b(n,16),s=new b(i,16);return new se(e,e.fromBigInteger(o),e.fromBigInteger(s))},se.prototype.add2D=function(e){if(this.isInfinity())return e;if(e.isInfinity())return this;if(this.x.equals(e.x))return this.y.equals(e.y)?this.twice():this.curve.getInfinity();var t=e.x.subtract(this.x),r=e.y.subtract(this.y).divide(t),n=r.square().subtract(this.x).subtract(e.x),i=r.multiply(this.x.subtract(n)).subtract(this.y);return new se(this.curve,n,i)},se.prototype.twice2D=function(){if(this.isInfinity())return this;if(0==this.y.toBigInteger().signum())return this.curve.getInfinity();var e=this.curve.fromBigInteger(b.valueOf(2)),t=this.curve.fromBigInteger(b.valueOf(3)),r=this.x.square().multiply(t).add(this.curve.a).divide(this.y.multiply(e)),n=r.square().subtract(this.x.multiply(e)),i=r.multiply(this.x.subtract(n)).subtract(this.y);return new se(this.curve,n,i)},se.prototype.multiply2D=function(e){if(this.isInfinity())return this;if(0==e.signum())return this.curve.getInfinity();var t,r=e,n=r.multiply(new b("3")),i=this.negate(),o=this;for(t=n.bitLength()-2;t>0;--t){o=o.twice();var s=n.testBit(t);s!=r.testBit(t)&&(o=o.add2D(s?this:i))}return o},se.prototype.isOnCurve=function(){var e=this.getX().toBigInteger(),t=this.getY().toBigInteger(),r=this.curve.getA().toBigInteger(),n=this.curve.getB().toBigInteger(),i=this.curve.getQ(),o=t.multiply(t).mod(i),s=e.multiply(e).multiply(e).add(r.multiply(e)).add(n).mod(i);return o.equals(s)},se.prototype.toString=function(){return"("+this.getX().toBigInteger().toString()+","+this.getY().toBigInteger().toString()+")"},se.prototype.validate=function(){var e=this.curve.getQ();if(this.isInfinity())throw new Error("Point is at infinity.");var t=this.getX().toBigInteger(),r=this.getY().toBigInteger();if(t.compareTo(b.ONE)<0||t.compareTo(e.subtract(b.ONE))>0)throw new Error("x coordinate out of bounds");if(r.compareTo(b.ONE)<0||r.compareTo(e.subtract(b.ONE))>0)throw new Error("y coordinate out of bounds");if(!this.isOnCurve())throw new Error("Point is not on the curve.");if(this.multiply(e).isInfinity())throw new Error("Point is not a scalar multiple of G.");return!0}; +/*! Mike Samuel (c) 2009 | code.google.com/p/json-sans-eval + */ +var ue=function(){var e=new RegExp('(?:false|true|null|[\\{\\}\\[\\]]|(?:-?\\b(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?\\b)|(?:"(?:[^\\0-\\x08\\x0a-\\x1f"\\\\]|\\\\(?:["/\\\\bfnrt]|u[0-9A-Fa-f]{4}))*"))',"g"),t=new RegExp("\\\\(?:([^u])|u(.{4}))","g"),n={'"':'"',"/":"/","\\":"\\",b:"\b",f:"\f",n:"\n",r:"\r",t:"\t"};function i(e,t,r){return t?n[t]:String.fromCharCode(parseInt(r,16))}var o=new String(""),s=Object.hasOwnProperty;return function(n,a){var u,c,h=n.match(e),l=h[0],f=!1;"{"===l?u={}:"["===l?u=[]:(u=[],f=!0);for(var g=[u],d=1-f,p=h.length;d=0;)delete i[o[h]]}return a.call(t,n,i)}({"":u},"")),u}}();void 0!==ce&&ce||(t.KJUR=ce={}),void 0!==ce.asn1&&ce.asn1||(ce.asn1={}),ce.asn1.ASN1Util=new function(){this.integerToByteHex=function(e){var t=e.toString(16);return t.length%2==1&&(t="0"+t),t},this.bigIntToMinTwosComplementsHex=function(e){var t=e.toString(16);if("-"!=t.substr(0,1))t.length%2==1?t="0"+t:t.match(/^[0-7]/)||(t="00"+t);else{var r=t.substr(1).length;r%2==1?r+=1:t.match(/^[0-7]/)||(r+=2);for(var n="",i=0;i15)throw"ASN.1 length too long to represent by 8x: n = "+e.toString(16);return(128+r).toString(16)+t},this.getEncodedHex=function(){return(null==this.hTLV||this.isModified)&&(this.hV=this.getFreshValueHex(),this.hL=this.getLengthHexFromValue(),this.hTLV=this.hT+this.hL+this.hV,this.isModified=!1),this.hTLV},this.getValueHex=function(){return this.getEncodedHex(),this.hV},this.getFreshValueHex=function(){return""}},ce.asn1.DERAbstractString=function(e){ce.asn1.DERAbstractString.superclass.constructor.call(this),this.getString=function(){return this.s},this.setString=function(e){this.hTLV=null,this.isModified=!0,this.s=e,this.hV=we(this.s).toLowerCase()},this.setStringHex=function(e){this.hTLV=null,this.isModified=!0,this.s=null,this.hV=e},this.getFreshValueHex=function(){return this.hV},void 0!==e&&("string"==typeof e?this.setString(e):void 0!==e.str?this.setString(e.str):void 0!==e.hex&&this.setStringHex(e.hex))},o.lang.extend(ce.asn1.DERAbstractString,ce.asn1.ASN1Object),ce.asn1.DERAbstractTime=function(e){ce.asn1.DERAbstractTime.superclass.constructor.call(this),this.localDateToUTC=function(e){return utc=e.getTime()+6e4*e.getTimezoneOffset(),new Date(utc)},this.formatDate=function(e,t,r){var n=this.zeroPadding,i=this.localDateToUTC(e),o=String(i.getFullYear());"utc"==t&&(o=o.substr(2,2));var s=o+n(String(i.getMonth()+1),2)+n(String(i.getDate()),2)+n(String(i.getHours()),2)+n(String(i.getMinutes()),2)+n(String(i.getSeconds()),2);if(!0===r){var a=i.getMilliseconds();if(0!=a){var u=n(String(a),3);s=s+"."+(u=u.replace(/[0]+$/,""))}}return s+"Z"},this.zeroPadding=function(e,t){return e.length>=t?e:new Array(t-e.length+1).join("0")+e},this.getString=function(){return this.s},this.setString=function(e){this.hTLV=null,this.isModified=!0,this.s=e,this.hV=ve(e)},this.setByDateValue=function(e,t,r,n,i,o){var s=new Date(Date.UTC(e,t-1,r,n,i,o,0));this.setByDate(s)},this.getFreshValueHex=function(){return this.hV}},o.lang.extend(ce.asn1.DERAbstractTime,ce.asn1.ASN1Object),ce.asn1.DERAbstractStructured=function(e){ce.asn1.DERAbstractString.superclass.constructor.call(this),this.setByASN1ObjectArray=function(e){this.hTLV=null,this.isModified=!0,this.asn1Array=e},this.appendASN1Object=function(e){this.hTLV=null,this.isModified=!0,this.asn1Array.push(e)},this.asn1Array=new Array,void 0!==e&&void 0!==e.array&&(this.asn1Array=e.array)},o.lang.extend(ce.asn1.DERAbstractStructured,ce.asn1.ASN1Object),ce.asn1.DERBoolean=function(){ce.asn1.DERBoolean.superclass.constructor.call(this),this.hT="01",this.hTLV="0101ff"},o.lang.extend(ce.asn1.DERBoolean,ce.asn1.ASN1Object),ce.asn1.DERInteger=function(e){ce.asn1.DERInteger.superclass.constructor.call(this),this.hT="02",this.setByBigInteger=function(e){this.hTLV=null,this.isModified=!0,this.hV=ce.asn1.ASN1Util.bigIntToMinTwosComplementsHex(e)},this.setByInteger=function(e){var t=new b(String(e),10);this.setByBigInteger(t)},this.setValueHex=function(e){this.hV=e},this.getFreshValueHex=function(){return this.hV},void 0!==e&&(void 0!==e.bigint?this.setByBigInteger(e.bigint):void 0!==e.int?this.setByInteger(e.int):"number"==typeof e?this.setByInteger(e):void 0!==e.hex&&this.setValueHex(e.hex))},o.lang.extend(ce.asn1.DERInteger,ce.asn1.ASN1Object),ce.asn1.DERBitString=function(e){if(void 0!==e&&void 0!==e.obj){var t=ce.asn1.ASN1Util.newObject(e.obj);e.hex="00"+t.getEncodedHex()}ce.asn1.DERBitString.superclass.constructor.call(this),this.hT="03",this.setHexValueIncludingUnusedBits=function(e){this.hTLV=null,this.isModified=!0,this.hV=e},this.setUnusedBitsAndHexValue=function(e,t){if(e<0||7i.length&&(i=n[r]);return(e=e.replace(i,"::")).slice(1,-1)}function Ne(e){var t="malformed hex value";if(!e.match(/^([0-9A-Fa-f][0-9A-Fa-f]){1,}$/))throw t;if(8!=e.length)return 32==e.length?Le(e):e;try{return parseInt(e.substr(0,2),16)+"."+parseInt(e.substr(2,2),16)+"."+parseInt(e.substr(4,2),16)+"."+parseInt(e.substr(6,2),16)}catch(e){throw t}}function Oe(e){for(var t=encodeURIComponent(e),r="",n=0;n"7"?"00"+e:e}fe.getLblen=function(e,t){if("8"!=e.substr(t+2,1))return 1;var r=parseInt(e.substr(t+3,1));return 0==r?-1:0=2*o)break;if(a>=200)break;n.push(u),s=u,a++}return n},fe.getNthChildIdx=function(e,t,r){return fe.getChildIdx(e,t)[r]},fe.getIdxbyList=function(e,t,r,n){var i,o,s=fe;if(0==r.length){if(void 0!==n&&e.substr(t,2)!==n)throw"checking tag doesn't match: "+e.substr(t,2)+"!="+n;return t}return i=r.shift(),o=s.getChildIdx(e,t),s.getIdxbyList(e,o[i],r,n)},fe.getTLVbyList=function(e,t,r,n){var i=fe,o=i.getIdxbyList(e,t,r);if(void 0===o)throw"can't find nthList object";if(void 0!==n&&e.substr(o,2)!=n)throw"checking tag doesn't match: "+e.substr(o,2)+"!="+n;return i.getTLV(e,o)},fe.getVbyList=function(e,t,r,n,i){var o,s,a=fe;if(void 0===(o=a.getIdxbyList(e,t,r,n)))throw"can't find nthList object";return s=a.getV(e,o),!0===i&&(s=s.substr(2)),s},fe.hextooidstr=function(e){var t=function(e,t){return e.length>=t?e:new Array(t-e.length+1).join("0")+e},r=[],n=e.substr(0,2),i=parseInt(n,16);r[0]=new String(Math.floor(i/40)),r[1]=new String(i%40);for(var o=e.substr(2),s=[],a=0;a0&&(h=h+"."+u.join(".")),h},fe.dump=function(e,t,r,n){var i=fe,o=i.getV,s=i.dump,a=i.getChildIdx,u=e;e instanceof ce.asn1.ASN1Object&&(u=e.getEncodedHex());var c=function(e,t){return e.length<=2*t?e:e.substr(0,t)+"..(total "+e.length/2+"bytes).."+e.substr(e.length-t,t)};void 0===t&&(t={ommit_long_octet:32}),void 0===r&&(r=0),void 0===n&&(n="");var h=t.ommit_long_octet;if("01"==u.substr(r,2))return"00"==(l=o(u,r))?n+"BOOLEAN FALSE\n":n+"BOOLEAN TRUE\n";if("02"==u.substr(r,2))return n+"INTEGER "+c(l=o(u,r),h)+"\n";if("03"==u.substr(r,2))return n+"BITSTRING "+c(l=o(u,r),h)+"\n";if("04"==u.substr(r,2)){var l=o(u,r);return i.isASN1HEX(l)?(F=n+"OCTETSTRING, encapsulates\n")+s(l,t,0,n+" "):n+"OCTETSTRING "+c(l,h)+"\n"}if("05"==u.substr(r,2))return n+"NULL\n";if("06"==u.substr(r,2)){var f=o(u,r),g=ce.asn1.ASN1Util.oidHexToInt(f),d=ce.asn1.x509.OID.oid2name(g),p=g.replace(/\./g," ");return""!=d?n+"ObjectIdentifier "+d+" ("+p+")\n":n+"ObjectIdentifier ("+p+")\n"}if("0c"==u.substr(r,2))return n+"UTF8String '"+Fe(o(u,r))+"'\n";if("13"==u.substr(r,2))return n+"PrintableString '"+Fe(o(u,r))+"'\n";if("14"==u.substr(r,2))return n+"TeletexString '"+Fe(o(u,r))+"'\n";if("16"==u.substr(r,2))return n+"IA5String '"+Fe(o(u,r))+"'\n";if("17"==u.substr(r,2))return n+"UTCTime "+Fe(o(u,r))+"\n";if("18"==u.substr(r,2))return n+"GeneralizedTime "+Fe(o(u,r))+"\n";if("30"==u.substr(r,2)){if("3000"==u.substr(r,4))return n+"SEQUENCE {}\n";F=n+"SEQUENCE\n";var v=t;if((2==(_=a(u,r)).length||3==_.length)&&"06"==u.substr(_[0],2)&&"04"==u.substr(_[_.length-1],2)){d=i.oidname(o(u,_[0]));var y=JSON.parse(JSON.stringify(t));y.x509ExtName=d,v=y}for(var m=0;m<_.length;m++)F+=s(u,v,_[m],n+" ");return F}if("31"==u.substr(r,2)){F=n+"SET\n";var _=a(u,r);for(m=0;m<_.length;m++)F+=s(u,t,_[m],n+" ");return F}var S=parseInt(u.substr(r,2),16);if(0!=(128&S)){var w=31&S;if(0!=(32&S)){var F=n+"["+w+"]\n";for(_=a(u,r),m=0;m<_.length;m++)F+=s(u,t,_[m],n+" ");return F}return"68747470"==(l=o(u,r)).substr(0,8)&&(l=Fe(l)),"subjectAltName"===t.x509ExtName&&2==w&&(l=Fe(l)),n+"["+w+"] "+l+"\n"}return n+"UNKNOWN("+u.substr(r,2)+") "+o(u,r)+"\n"},fe.isASN1HEX=function(e){var t=fe;if(e.length%2==1)return!1;var r=t.getVblen(e,0),n=e.substr(0,2),i=t.getL(e,0);return e.length-n.length-i.length==2*r},fe.oidname=function(e){var t=ce.asn1;ce.lang.String.isHex(e)&&(e=t.ASN1Util.oidHexToInt(e));var r=t.x509.OID.oid2name(e);return""===r&&(r=e),r},void 0!==ce&&ce||(t.KJUR=ce={}),void 0!==ce.lang&&ce.lang||(ce.lang={}),ce.lang.String=function(){},"function"==typeof e?(t.utf8tob64u=he=function(t){return ye(new e(t,"utf8").toString("base64"))},t.b64utoutf8=le=function(t){return new e(me(t),"base64").toString("utf8")}):(t.utf8tob64u=he=function(e){return _e(Ie(Oe(e)))},t.b64utoutf8=le=function(e){return decodeURIComponent(De(Se(e)))}),ce.lang.String.isInteger=function(e){return!!e.match(/^[0-9]+$/)||!!e.match(/^-[0-9]+$/)},ce.lang.String.isHex=function(e){return!(e.length%2!=0||!e.match(/^[0-9a-f]+$/)&&!e.match(/^[0-9A-F]+$/))},ce.lang.String.isBase64=function(e){return!(!(e=e.replace(/\s+/g,"")).match(/^[0-9A-Za-z+\/]+={0,3}$/)||e.length%4!=0)},ce.lang.String.isBase64URL=function(e){return!e.match(/[+/=]/)&&(e=me(e),ce.lang.String.isBase64(e))},ce.lang.String.isIntegerArray=function(e){return!!(e=e.replace(/\s+/g,"")).match(/^\[[0-9,]+\]$/)},void 0!==ce&&ce||(t.KJUR=ce={}),void 0!==ce.crypto&&ce.crypto||(ce.crypto={}),ce.crypto.Util=new function(){this.DIGESTINFOHEAD={sha1:"3021300906052b0e03021a05000414",sha224:"302d300d06096086480165030402040500041c",sha256:"3031300d060960864801650304020105000420",sha384:"3041300d060960864801650304020205000430",sha512:"3051300d060960864801650304020305000440",md2:"3020300c06082a864886f70d020205000410",md5:"3020300c06082a864886f70d020505000410",ripemd160:"3021300906052b2403020105000414"},this.DEFAULTPROVIDER={md5:"cryptojs",sha1:"cryptojs",sha224:"cryptojs",sha256:"cryptojs",sha384:"cryptojs",sha512:"cryptojs",ripemd160:"cryptojs",hmacmd5:"cryptojs",hmacsha1:"cryptojs",hmacsha224:"cryptojs",hmacsha256:"cryptojs",hmacsha384:"cryptojs",hmacsha512:"cryptojs",hmacripemd160:"cryptojs",MD5withRSA:"cryptojs/jsrsa",SHA1withRSA:"cryptojs/jsrsa",SHA224withRSA:"cryptojs/jsrsa",SHA256withRSA:"cryptojs/jsrsa",SHA384withRSA:"cryptojs/jsrsa",SHA512withRSA:"cryptojs/jsrsa",RIPEMD160withRSA:"cryptojs/jsrsa",MD5withECDSA:"cryptojs/jsrsa",SHA1withECDSA:"cryptojs/jsrsa",SHA224withECDSA:"cryptojs/jsrsa",SHA256withECDSA:"cryptojs/jsrsa",SHA384withECDSA:"cryptojs/jsrsa",SHA512withECDSA:"cryptojs/jsrsa",RIPEMD160withECDSA:"cryptojs/jsrsa",SHA1withDSA:"cryptojs/jsrsa",SHA224withDSA:"cryptojs/jsrsa",SHA256withDSA:"cryptojs/jsrsa",MD5withRSAandMGF1:"cryptojs/jsrsa",SHA1withRSAandMGF1:"cryptojs/jsrsa",SHA224withRSAandMGF1:"cryptojs/jsrsa",SHA256withRSAandMGF1:"cryptojs/jsrsa",SHA384withRSAandMGF1:"cryptojs/jsrsa",SHA512withRSAandMGF1:"cryptojs/jsrsa",RIPEMD160withRSAandMGF1:"cryptojs/jsrsa"},this.CRYPTOJSMESSAGEDIGESTNAME={md5:y.algo.MD5,sha1:y.algo.SHA1,sha224:y.algo.SHA224,sha256:y.algo.SHA256,sha384:y.algo.SHA384,sha512:y.algo.SHA512,ripemd160:y.algo.RIPEMD160},this.getDigestInfoHex=function(e,t){if(void 0===this.DIGESTINFOHEAD[t])throw"alg not supported in Util.DIGESTINFOHEAD: "+t;return this.DIGESTINFOHEAD[t]+e},this.getPaddedDigestInfoHex=function(e,t,r){var n=this.getDigestInfoHex(e,t),i=r/4;if(n.length+22>i)throw"key is too short for SigAlg: keylen="+r+","+t;for(var o="0001",s="00"+n,a="",u=i-o.length-s.length,c=0;c=0)return!1;if(r.compareTo(b.ONE)<0||r.compareTo(i)>=0)return!1;var s=r.modInverse(i),a=e.multiply(s).mod(i),u=t.multiply(s).mod(i);return o.multiply(a).add(n.multiply(u)).getX().toBigInteger().mod(i).equals(t)},this.serializeSig=function(e,t){var r=e.toByteArraySigned(),n=t.toByteArraySigned(),i=[];return i.push(2),i.push(r.length),(i=i.concat(r)).push(2),i.push(n.length),(i=i.concat(n)).unshift(i.length),i.unshift(48),i},this.parseSig=function(e){var t;if(48!=e[0])throw new Error("Signature not a valid DERSequence");if(2!=e[t=2])throw new Error("First element in signature must be a DERInteger");var r=e.slice(t+2,t+2+e[t+1]);if(2!=e[t+=2+e[t+1]])throw new Error("Second element in signature must be a DERInteger");var n=e.slice(t+2,t+2+e[t+1]);return t+=2+e[t+1],{r:b.fromByteArrayUnsigned(r),s:b.fromByteArrayUnsigned(n)}},this.parseSigCompact=function(e){if(65!==e.length)throw"Signature has the wrong length";var t=e[0]-27;if(t<0||t>7)throw"Invalid signature type";var r=this.ecparams.n;return{r:b.fromByteArrayUnsigned(e.slice(1,33)).mod(r),s:b.fromByteArrayUnsigned(e.slice(33,65)).mod(r),i:t}},this.readPKCS5PrvKeyHex=function(e){var t,r,n,i=fe,o=ce.crypto.ECDSA.getName,s=i.getVbyList;if(!1===i.isASN1HEX(e))throw"not ASN.1 hex string";try{t=s(e,0,[2,0],"06"),r=s(e,0,[1],"04");try{n=s(e,0,[3,0],"03").substr(2)}catch(e){}}catch(e){throw"malformed PKCS#1/5 plain ECC private key"}if(this.curveName=o(t),void 0===this.curveName)throw"unsupported curve name";this.setNamedCurve(this.curveName),this.setPublicKeyHex(n),this.setPrivateKeyHex(r),this.isPublic=!1},this.readPKCS8PrvKeyHex=function(e){var t,r,n,i=fe,o=ce.crypto.ECDSA.getName,s=i.getVbyList;if(!1===i.isASN1HEX(e))throw"not ASN.1 hex string";try{s(e,0,[1,0],"06"),t=s(e,0,[1,1],"06"),r=s(e,0,[2,0,1],"04");try{n=s(e,0,[2,0,2,0],"03").substr(2)}catch(e){}}catch(e){throw"malformed PKCS#8 plain ECC private key"}if(this.curveName=o(t),void 0===this.curveName)throw"unsupported curve name";this.setNamedCurve(this.curveName),this.setPublicKeyHex(n),this.setPrivateKeyHex(r),this.isPublic=!1},this.readPKCS8PubKeyHex=function(e){var t,r,n=fe,i=ce.crypto.ECDSA.getName,o=n.getVbyList;if(!1===n.isASN1HEX(e))throw"not ASN.1 hex string";try{o(e,0,[0,0],"06"),t=o(e,0,[0,1],"06"),r=o(e,0,[1],"03").substr(2)}catch(e){throw"malformed PKCS#8 ECC public key"}if(this.curveName=i(t),null===this.curveName)throw"unsupported curve name";this.setNamedCurve(this.curveName),this.setPublicKeyHex(r)},this.readCertPubKeyHex=function(e,t){5!==t&&(t=6);var r,n,i=fe,o=ce.crypto.ECDSA.getName,s=i.getVbyList;if(!1===i.isASN1HEX(e))throw"not ASN.1 hex string";try{r=s(e,0,[0,t,0,1],"06"),n=s(e,0,[0,t,1],"03").substr(2)}catch(e){throw"malformed X.509 certificate ECC public key"}if(this.curveName=o(r),null===this.curveName)throw"unsupported curve name";this.setNamedCurve(this.curveName),this.setPublicKeyHex(n)},void 0!==e&&void 0!==e.curve&&(this.curveName=e.curve),void 0===this.curveName&&(this.curveName="secp256r1"),this.setNamedCurve(this.curveName),void 0!==e&&(void 0!==e.prv&&this.setPrivateKeyHex(e.prv),void 0!==e.pub&&this.setPublicKeyHex(e.pub))},ce.crypto.ECDSA.parseSigHex=function(e){var t=ce.crypto.ECDSA.parseSigHexInHexRS(e);return{r:new b(t.r,16),s:new b(t.s,16)}},ce.crypto.ECDSA.parseSigHexInHexRS=function(e){var t=fe,r=t.getChildIdx,n=t.getV;if("30"!=e.substr(0,2))throw"signature is not a ASN.1 sequence";var i=r(e,0);if(2!=i.length)throw"number of signature ASN.1 sequence elements seem wrong";var o=i[0],s=i[1];if("02"!=e.substr(o,2))throw"1st item of sequene of signature is not ASN.1 integer";if("02"!=e.substr(s,2))throw"2nd item of sequene of signature is not ASN.1 integer";return{r:n(e,o),s:n(e,s)}},ce.crypto.ECDSA.asn1SigToConcatSig=function(e){var t=ce.crypto.ECDSA.parseSigHexInHexRS(e),r=t.r,n=t.s;if("00"==r.substr(0,2)&&r.length%32==2&&(r=r.substr(2)),"00"==n.substr(0,2)&&n.length%32==2&&(n=n.substr(2)),r.length%32==30&&(r="00"+r),n.length%32==30&&(n="00"+n),r.length%32!=0)throw"unknown ECDSA sig r length error";if(n.length%32!=0)throw"unknown ECDSA sig s length error";return r+n},ce.crypto.ECDSA.concatSigToASN1Sig=function(e){if(e.length/2*8%128!=0)throw"unknown ECDSA concatinated r-s sig length error";var t=e.substr(0,e.length/2),r=e.substr(e.length/2);return ce.crypto.ECDSA.hexRSSigToASN1Sig(t,r)},ce.crypto.ECDSA.hexRSSigToASN1Sig=function(e,t){var r=new b(e,16),n=new b(t,16);return ce.crypto.ECDSA.biRSSigToASN1Sig(r,n)},ce.crypto.ECDSA.biRSSigToASN1Sig=function(e,t){var r=ce.asn1,n=new r.DERInteger({bigint:e}),i=new r.DERInteger({bigint:t});return new r.DERSequence({array:[n,i]}).getEncodedHex()},ce.crypto.ECDSA.getName=function(e){return"2a8648ce3d030107"===e?"secp256r1":"2b8104000a"===e?"secp256k1":"2b81040022"===e?"secp384r1":-1!=="|secp256r1|NIST P-256|P-256|prime256v1|".indexOf(e)?"secp256r1":-1!=="|secp256k1|".indexOf(e)?"secp256k1":-1!=="|secp384r1|NIST P-384|P-384|".indexOf(e)?"secp384r1":null},void 0!==ce&&ce||(t.KJUR=ce={}),void 0!==ce.crypto&&ce.crypto||(ce.crypto={}),ce.crypto.ECParameterDB=new function(){var e={},t={};function r(e){return new b(e,16)}this.getByName=function(r){var n=r;if(void 0!==t[n]&&(n=t[r]),void 0!==e[n])return e[n];throw"unregistered EC curve name: "+n},this.regist=function(n,i,o,s,a,u,c,h,l,f,g,d){e[n]={};var p=r(o),v=r(s),y=r(a),m=r(u),_=r(c),S=new ae(p,v,y),w=S.decodePointHex("04"+h+l);e[n].name=n,e[n].keylen=i,e[n].curve=S,e[n].G=w,e[n].n=m,e[n].h=_,e[n].oid=g,e[n].info=d;for(var F=0;F=2*a)break}var l={};return l.keyhex=u.substr(0,2*i[e].keylen),l.ivhex=u.substr(2*i[e].keylen,2*i[e].ivlen),l},a=function(e,t,r,n){var o=y.enc.Base64.parse(e),s=y.enc.Hex.stringify(o);return(0,i[t].proc)(s,r,n)};return{version:"1.0.0",parsePKCS5PEM:function(e){return o(e)},getKeyAndUnusedIvByPasscodeAndIvsalt:function(e,t,r){return s(e,t,r)},decryptKeyB64:function(e,t,r,n){return a(e,t,r,n)},getDecryptedKeyHex:function(e,t){var r=o(e),n=(r.type,r.cipher),i=r.ivsalt,u=r.data,c=s(n,t,i).keyhex;return a(u,n,c,i)},getEncryptedPKCS5PEMFromPrvKeyHex:function(e,t,r,n,o){var a="";if(void 0!==n&&null!=n||(n="AES-256-CBC"),void 0===i[n])throw"KEYUTIL unsupported algorithm: "+n;return void 0!==o&&null!=o||(o=function(e){var t=y.lib.WordArray.random(e);return y.enc.Hex.stringify(t)}(i[n].ivlen).toUpperCase()),a="-----BEGIN "+e+" PRIVATE KEY-----\r\n",a+="Proc-Type: 4,ENCRYPTED\r\n",a+="DEK-Info: "+n+","+o+"\r\n",a+="\r\n",(a+=function(e,t,r,n){return(0,i[t].eproc)(e,r,n)}(t,n,s(n,r,o).keyhex,o).replace(/(.{64})/g,"$1\r\n"))+"\r\n-----END "+e+" PRIVATE KEY-----\r\n"},parseHexOfEncryptedPKCS8:function(e){var t=fe,r=t.getChildIdx,n=t.getV,i={},o=r(e,0);if(2!=o.length)throw"malformed format: SEQUENCE(0).items != 2: "+o.length;i.ciphertext=n(e,o[1]);var s=r(e,o[0]);if(2!=s.length)throw"malformed format: SEQUENCE(0.0).items != 2: "+s.length;if("2a864886f70d01050d"!=n(e,s[0]))throw"this only supports pkcs5PBES2";var a=r(e,s[1]);if(2!=s.length)throw"malformed format: SEQUENCE(0.0.1).items != 2: "+a.length;var u=r(e,a[1]);if(2!=u.length)throw"malformed format: SEQUENCE(0.0.1.1).items != 2: "+u.length;if("2a864886f70d0307"!=n(e,u[0]))throw"this only supports TripleDES";i.encryptionSchemeAlg="TripleDES",i.encryptionSchemeIV=n(e,u[1]);var c=r(e,a[0]);if(2!=c.length)throw"malformed format: SEQUENCE(0.0.1.0).items != 2: "+c.length;if("2a864886f70d01050c"!=n(e,c[0]))throw"this only supports pkcs5PBKDF2";var h=r(e,c[1]);if(h.length<2)throw"malformed format: SEQUENCE(0.0.1.0.1).items < 2: "+h.length;i.pbkdf2Salt=n(e,h[0]);var l=n(e,h[1]);try{i.pbkdf2Iter=parseInt(l,16)}catch(e){throw"malformed format pbkdf2Iter: "+l}return i},getPBKDF2KeyHexFromParam:function(e,t){var r=y.enc.Hex.parse(e.pbkdf2Salt),n=e.pbkdf2Iter,i=y.PBKDF2(t,r,{keySize:6,iterations:n});return y.enc.Hex.stringify(i)},_getPlainPKCS8HexFromEncryptedPKCS8PEM:function(e,t){var r=Ce(e,"ENCRYPTED PRIVATE KEY"),n=this.parseHexOfEncryptedPKCS8(r),i=Me.getPBKDF2KeyHexFromParam(n,t),o={};o.ciphertext=y.enc.Hex.parse(n.ciphertext);var s=y.enc.Hex.parse(i),a=y.enc.Hex.parse(n.encryptionSchemeIV),u=y.TripleDES.decrypt(o,s,{iv:a});return y.enc.Hex.stringify(u)},getKeyFromEncryptedPKCS8PEM:function(e,t){var r=this._getPlainPKCS8HexFromEncryptedPKCS8PEM(e,t);return this.getKeyFromPlainPrivatePKCS8Hex(r)},parsePlainPrivatePKCS8Hex:function(e){var t=fe,r=t.getChildIdx,n=t.getV,i={algparam:null};if("30"!=e.substr(0,2))throw"malformed plain PKCS8 private key(code:001)";var o=r(e,0);if(3!=o.length)throw"malformed plain PKCS8 private key(code:002)";if("30"!=e.substr(o[1],2))throw"malformed PKCS8 private key(code:003)";var s=r(e,o[1]);if(2!=s.length)throw"malformed PKCS8 private key(code:004)";if("06"!=e.substr(s[0],2))throw"malformed PKCS8 private key(code:005)";if(i.algoid=n(e,s[0]),"06"==e.substr(s[1],2)&&(i.algparam=n(e,s[1])),"04"!=e.substr(o[2],2))throw"malformed PKCS8 private key(code:006)";return i.keyidx=t.getVidx(e,o[2]),i},getKeyFromPlainPrivatePKCS8PEM:function(e){var t=Ce(e,"PRIVATE KEY");return this.getKeyFromPlainPrivatePKCS8Hex(t)},getKeyFromPlainPrivatePKCS8Hex:function(e){var t,r=this.parsePlainPrivatePKCS8Hex(e);if("2a864886f70d010101"==r.algoid)t=new ie;else if("2a8648ce380401"==r.algoid)t=new ce.crypto.DSA;else{if("2a8648ce3d0201"!=r.algoid)throw"unsupported private key algorithm";t=new ce.crypto.ECDSA}return t.readPKCS8PrvKeyHex(e),t},_getKeyFromPublicPKCS8Hex:function(e){var t,r=fe.getVbyList(e,0,[0,0],"06");if("2a864886f70d010101"===r)t=new ie;else if("2a8648ce380401"===r)t=new ce.crypto.DSA;else{if("2a8648ce3d0201"!==r)throw"unsupported PKCS#8 public key hex";t=new ce.crypto.ECDSA}return t.readPKCS8PubKeyHex(e),t},parsePublicRawRSAKeyHex:function(e){var t=fe,r=t.getChildIdx,n=t.getV,i={};if("30"!=e.substr(0,2))throw"malformed RSA key(code:001)";var o=r(e,0);if(2!=o.length)throw"malformed RSA key(code:002)";if("02"!=e.substr(o[0],2))throw"malformed RSA key(code:003)";if(i.n=n(e,o[0]),"02"!=e.substr(o[1],2))throw"malformed RSA key(code:004)";return i.e=n(e,o[1]),i},parsePublicPKCS8Hex:function(e){var t=fe,r=t.getChildIdx,n=t.getV,i={algparam:null},o=r(e,0);if(2!=o.length)throw"outer DERSequence shall have 2 elements: "+o.length;var s=o[0];if("30"!=e.substr(s,2))throw"malformed PKCS8 public key(code:001)";var a=r(e,s);if(2!=a.length)throw"malformed PKCS8 public key(code:002)";if("06"!=e.substr(a[0],2))throw"malformed PKCS8 public key(code:003)";if(i.algoid=n(e,a[0]),"06"==e.substr(a[1],2)?i.algparam=n(e,a[1]):"30"==e.substr(a[1],2)&&(i.algparam={},i.algparam.p=t.getVbyList(e,a[1],[0],"02"),i.algparam.q=t.getVbyList(e,a[1],[1],"02"),i.algparam.g=t.getVbyList(e,a[1],[2],"02")),"03"!=e.substr(o[1],2))throw"malformed PKCS8 public key(code:004)";return i.key=n(e,o[1]).substr(2),i}}}();Me.getKey=function(e,t,r){var n,i=(y=fe).getChildIdx,o=(y.getV,y.getVbyList),s=ce.crypto,a=s.ECDSA,u=s.DSA,c=ie,h=Ce,l=Me;if(void 0!==c&&e instanceof c)return e;if(void 0!==a&&e instanceof a)return e;if(void 0!==u&&e instanceof u)return e;if(void 0!==e.curve&&void 0!==e.xy&&void 0===e.d)return new a({pub:e.xy,curve:e.curve});if(void 0!==e.curve&&void 0!==e.d)return new a({prv:e.d,curve:e.curve});if(void 0===e.kty&&void 0!==e.n&&void 0!==e.e&&void 0===e.d)return(C=new c).setPublic(e.n,e.e),C;if(void 0===e.kty&&void 0!==e.n&&void 0!==e.e&&void 0!==e.d&&void 0!==e.p&&void 0!==e.q&&void 0!==e.dp&&void 0!==e.dq&&void 0!==e.co&&void 0===e.qi)return(C=new c).setPrivateEx(e.n,e.e,e.d,e.p,e.q,e.dp,e.dq,e.co),C;if(void 0===e.kty&&void 0!==e.n&&void 0!==e.e&&void 0!==e.d&&void 0===e.p)return(C=new c).setPrivate(e.n,e.e,e.d),C;if(void 0!==e.p&&void 0!==e.q&&void 0!==e.g&&void 0!==e.y&&void 0===e.x)return(C=new u).setPublic(e.p,e.q,e.g,e.y),C;if(void 0!==e.p&&void 0!==e.q&&void 0!==e.g&&void 0!==e.y&&void 0!==e.x)return(C=new u).setPrivate(e.p,e.q,e.g,e.y,e.x),C;if("RSA"===e.kty&&void 0!==e.n&&void 0!==e.e&&void 0===e.d)return(C=new c).setPublic(Se(e.n),Se(e.e)),C;if("RSA"===e.kty&&void 0!==e.n&&void 0!==e.e&&void 0!==e.d&&void 0!==e.p&&void 0!==e.q&&void 0!==e.dp&&void 0!==e.dq&&void 0!==e.qi)return(C=new c).setPrivateEx(Se(e.n),Se(e.e),Se(e.d),Se(e.p),Se(e.q),Se(e.dp),Se(e.dq),Se(e.qi)),C;if("RSA"===e.kty&&void 0!==e.n&&void 0!==e.e&&void 0!==e.d)return(C=new c).setPrivate(Se(e.n),Se(e.e),Se(e.d)),C;if("EC"===e.kty&&void 0!==e.crv&&void 0!==e.x&&void 0!==e.y&&void 0===e.d){var f=(P=new a({curve:e.crv})).ecparams.keylen/4,g="04"+("0000000000"+Se(e.x)).slice(-f)+("0000000000"+Se(e.y)).slice(-f);return P.setPublicKeyHex(g),P}if("EC"===e.kty&&void 0!==e.crv&&void 0!==e.x&&void 0!==e.y&&void 0!==e.d){f=(P=new a({curve:e.crv})).ecparams.keylen/4,g="04"+("0000000000"+Se(e.x)).slice(-f)+("0000000000"+Se(e.y)).slice(-f);var d=("0000000000"+Se(e.d)).slice(-f);return P.setPublicKeyHex(g),P.setPrivateKeyHex(d),P}if("pkcs5prv"===r){var p,v=e,y=fe;if(9===(p=i(v,0)).length)(C=new c).readPKCS5PrvKeyHex(v);else if(6===p.length)(C=new u).readPKCS5PrvKeyHex(v);else{if(!(p.length>2&&"04"===v.substr(p[1],2)))throw"unsupported PKCS#1/5 hexadecimal key";(C=new a).readPKCS5PrvKeyHex(v)}return C}if("pkcs8prv"===r)return l.getKeyFromPlainPrivatePKCS8Hex(e);if("pkcs8pub"===r)return l._getKeyFromPublicPKCS8Hex(e);if("x509pub"===r)return qe.getPublicKeyFromCertHex(e);if(-1!=e.indexOf("-END CERTIFICATE-",0)||-1!=e.indexOf("-END X509 CERTIFICATE-",0)||-1!=e.indexOf("-END TRUSTED CERTIFICATE-",0))return qe.getPublicKeyFromCertPEM(e);if(-1!=e.indexOf("-END PUBLIC KEY-")){var m=Ce(e,"PUBLIC KEY");return l._getKeyFromPublicPKCS8Hex(m)}if(-1!=e.indexOf("-END RSA PRIVATE KEY-")&&-1==e.indexOf("4,ENCRYPTED")){var _=h(e,"RSA PRIVATE KEY");return l.getKey(_,null,"pkcs5prv")}if(-1!=e.indexOf("-END DSA PRIVATE KEY-")&&-1==e.indexOf("4,ENCRYPTED")){var S=o(n=h(e,"DSA PRIVATE KEY"),0,[1],"02"),w=o(n,0,[2],"02"),F=o(n,0,[3],"02"),E=o(n,0,[4],"02"),x=o(n,0,[5],"02");return(C=new u).setPrivate(new b(S,16),new b(w,16),new b(F,16),new b(E,16),new b(x,16)),C}if(-1!=e.indexOf("-END PRIVATE KEY-"))return l.getKeyFromPlainPrivatePKCS8PEM(e);if(-1!=e.indexOf("-END RSA PRIVATE KEY-")&&-1!=e.indexOf("4,ENCRYPTED")){var k=l.getDecryptedKeyHex(e,t),A=new ie;return A.readPKCS5PrvKeyHex(k),A}if(-1!=e.indexOf("-END EC PRIVATE KEY-")&&-1!=e.indexOf("4,ENCRYPTED")){var P,C=o(n=l.getDecryptedKeyHex(e,t),0,[1],"04"),T=o(n,0,[2,0],"06"),R=o(n,0,[3,0],"03").substr(2);if(void 0===ce.crypto.OID.oidhex2name[T])throw"undefined OID(hex) in KJUR.crypto.OID: "+T;return(P=new a({curve:ce.crypto.OID.oidhex2name[T]})).setPublicKeyHex(R),P.setPrivateKeyHex(C),P.isPublic=!1,P}if(-1!=e.indexOf("-END DSA PRIVATE KEY-")&&-1!=e.indexOf("4,ENCRYPTED"))return S=o(n=l.getDecryptedKeyHex(e,t),0,[1],"02"),w=o(n,0,[2],"02"),F=o(n,0,[3],"02"),E=o(n,0,[4],"02"),x=o(n,0,[5],"02"),(C=new u).setPrivate(new b(S,16),new b(w,16),new b(F,16),new b(E,16),new b(x,16)),C;if(-1!=e.indexOf("-END ENCRYPTED PRIVATE KEY-"))return l.getKeyFromEncryptedPKCS8PEM(e,t);throw"not supported argument"},Me.generateKeypair=function(e,t){if("RSA"==e){var r=t;(s=new ie).generate(r,"10001"),s.isPrivate=!0,s.isPublic=!0;var n=new ie,i=s.n.toString(16),o=s.e.toString(16);return n.setPublic(i,o),n.isPrivate=!1,n.isPublic=!0,(a={}).prvKeyObj=s,a.pubKeyObj=n,a}if("EC"==e){var s,a,u=t,c=new ce.crypto.ECDSA({curve:u}).generateKeyPairHex();return(s=new ce.crypto.ECDSA({curve:u})).setPublicKeyHex(c.ecpubhex),s.setPrivateKeyHex(c.ecprvhex),s.isPrivate=!0,s.isPublic=!1,(n=new ce.crypto.ECDSA({curve:u})).setPublicKeyHex(c.ecpubhex),n.isPrivate=!1,n.isPublic=!0,(a={}).prvKeyObj=s,a.pubKeyObj=n,a}throw"unknown algorithm: "+e},Me.getPEM=function(e,t,r,n,i,o){var s=ce,a=s.asn1,u=a.DERObjectIdentifier,c=a.DERInteger,h=a.ASN1Util.newObject,l=a.x509.SubjectPublicKeyInfo,f=s.crypto,g=f.DSA,d=f.ECDSA,p=ie;function v(e){return h({seq:[{int:0},{int:{bigint:e.n}},{int:e.e},{int:{bigint:e.d}},{int:{bigint:e.p}},{int:{bigint:e.q}},{int:{bigint:e.dmp1}},{int:{bigint:e.dmq1}},{int:{bigint:e.coeff}}]})}function m(e){return h({seq:[{int:1},{octstr:{hex:e.prvKeyHex}},{tag:["a0",!0,{oid:{name:e.curveName}}]},{tag:["a1",!0,{bitstr:{hex:"00"+e.pubKeyHex}}]}]})}function _(e){return h({seq:[{int:0},{int:{bigint:e.p}},{int:{bigint:e.q}},{int:{bigint:e.g}},{int:{bigint:e.y}},{int:{bigint:e.x}}]})}if((void 0!==p&&e instanceof p||void 0!==g&&e instanceof g||void 0!==d&&e instanceof d)&&1==e.isPublic&&(void 0===t||"PKCS8PUB"==t))return Pe(b=new l(e).getEncodedHex(),"PUBLIC KEY");if("PKCS1PRV"==t&&void 0!==p&&e instanceof p&&(void 0===r||null==r)&&1==e.isPrivate)return Pe(b=v(e).getEncodedHex(),"RSA PRIVATE KEY");if("PKCS1PRV"==t&&void 0!==d&&e instanceof d&&(void 0===r||null==r)&&1==e.isPrivate){var S=new u({name:e.curveName}).getEncodedHex(),w=m(e).getEncodedHex(),F="";return(F+=Pe(S,"EC PARAMETERS"))+Pe(w,"EC PRIVATE KEY")}if("PKCS1PRV"==t&&void 0!==g&&e instanceof g&&(void 0===r||null==r)&&1==e.isPrivate)return Pe(b=_(e).getEncodedHex(),"DSA PRIVATE KEY");if("PKCS5PRV"==t&&void 0!==p&&e instanceof p&&void 0!==r&&null!=r&&1==e.isPrivate){var b=v(e).getEncodedHex();return void 0===n&&(n="DES-EDE3-CBC"),this.getEncryptedPKCS5PEMFromPrvKeyHex("RSA",b,r,n,o)}if("PKCS5PRV"==t&&void 0!==d&&e instanceof d&&void 0!==r&&null!=r&&1==e.isPrivate)return b=m(e).getEncodedHex(),void 0===n&&(n="DES-EDE3-CBC"),this.getEncryptedPKCS5PEMFromPrvKeyHex("EC",b,r,n,o);if("PKCS5PRV"==t&&void 0!==g&&e instanceof g&&void 0!==r&&null!=r&&1==e.isPrivate)return b=_(e).getEncodedHex(),void 0===n&&(n="DES-EDE3-CBC"),this.getEncryptedPKCS5PEMFromPrvKeyHex("DSA",b,r,n,o);var E=function(e,t){var r=x(e,t);return new h({seq:[{seq:[{oid:{name:"pkcs5PBES2"}},{seq:[{seq:[{oid:{name:"pkcs5PBKDF2"}},{seq:[{octstr:{hex:r.pbkdf2Salt}},{int:r.pbkdf2Iter}]}]},{seq:[{oid:{name:"des-EDE3-CBC"}},{octstr:{hex:r.encryptionSchemeIV}}]}]}]},{octstr:{hex:r.ciphertext}}]}).getEncodedHex()},x=function(e,t){var r=y.lib.WordArray.random(8),n=y.lib.WordArray.random(8),i=y.PBKDF2(t,r,{keySize:6,iterations:100}),o=y.enc.Hex.parse(e),s=y.TripleDES.encrypt(o,i,{iv:n})+"",a={};return a.ciphertext=s,a.pbkdf2Salt=y.enc.Hex.stringify(r),a.pbkdf2Iter=100,a.encryptionSchemeAlg="DES-EDE3-CBC",a.encryptionSchemeIV=y.enc.Hex.stringify(n),a};if("PKCS8PRV"==t&&null!=p&&e instanceof p&&1==e.isPrivate){var k=v(e).getEncodedHex();return b=h({seq:[{int:0},{seq:[{oid:{name:"rsaEncryption"}},{null:!0}]},{octstr:{hex:k}}]}).getEncodedHex(),void 0===r||null==r?Pe(b,"PRIVATE KEY"):Pe(w=E(b,r),"ENCRYPTED PRIVATE KEY")}if("PKCS8PRV"==t&&void 0!==d&&e instanceof d&&1==e.isPrivate)return k=new h({seq:[{int:1},{octstr:{hex:e.prvKeyHex}},{tag:["a1",!0,{bitstr:{hex:"00"+e.pubKeyHex}}]}]}).getEncodedHex(),b=h({seq:[{int:0},{seq:[{oid:{name:"ecPublicKey"}},{oid:{name:e.curveName}}]},{octstr:{hex:k}}]}).getEncodedHex(),void 0===r||null==r?Pe(b,"PRIVATE KEY"):Pe(w=E(b,r),"ENCRYPTED PRIVATE KEY");if("PKCS8PRV"==t&&void 0!==g&&e instanceof g&&1==e.isPrivate)return k=new c({bigint:e.x}).getEncodedHex(),b=h({seq:[{int:0},{seq:[{oid:{name:"dsa"}},{seq:[{int:{bigint:e.p}},{int:{bigint:e.q}},{int:{bigint:e.g}}]}]},{octstr:{hex:k}}]}).getEncodedHex(),void 0===r||null==r?Pe(b,"PRIVATE KEY"):Pe(w=E(b,r),"ENCRYPTED PRIVATE KEY");throw"unsupported object nor format"},Me.getKeyFromCSRPEM=function(e){var t=Ce(e,"CERTIFICATE REQUEST");return Me.getKeyFromCSRHex(t)},Me.getKeyFromCSRHex=function(e){var t=Me.parseCSRHex(e);return Me.getKey(t.p8pubkeyhex,null,"pkcs8pub")},Me.parseCSRHex=function(e){var t=fe,r=t.getChildIdx,n=t.getTLV,i={},o=e;if("30"!=o.substr(0,2))throw"malformed CSR(code:001)";var s=r(o,0);if(s.length<1)throw"malformed CSR(code:002)";if("30"!=o.substr(s[0],2))throw"malformed CSR(code:003)";var a=r(o,s[0]);if(a.length<3)throw"malformed CSR(code:004)";return i.p8pubkeyhex=n(o,a[2]),i},Me.getJWKFromKey=function(e){var t={};if(e instanceof ie&&e.isPrivate)return t.kty="RSA",t.n=_e(e.n.toString(16)),t.e=_e(e.e.toString(16)),t.d=_e(e.d.toString(16)),t.p=_e(e.p.toString(16)),t.q=_e(e.q.toString(16)),t.dp=_e(e.dmp1.toString(16)),t.dq=_e(e.dmq1.toString(16)),t.qi=_e(e.coeff.toString(16)),t;if(e instanceof ie&&e.isPublic)return t.kty="RSA",t.n=_e(e.n.toString(16)),t.e=_e(e.e.toString(16)),t;if(e instanceof ce.crypto.ECDSA&&e.isPrivate){if("P-256"!==(n=e.getShortNISTPCurveName())&&"P-384"!==n)throw"unsupported curve name for JWT: "+n;var r=e.getPublicKeyXYHex();return t.kty="EC",t.crv=n,t.x=_e(r.x),t.y=_e(r.y),t.d=_e(e.prvKeyHex),t}if(e instanceof ce.crypto.ECDSA&&e.isPublic){var n;if("P-256"!==(n=e.getShortNISTPCurveName())&&"P-384"!==n)throw"unsupported curve name for JWT: "+n;return r=e.getPublicKeyXYHex(),t.kty="EC",t.crv=n,t.x=_e(r.x),t.y=_e(r.y),t}throw"not supported key object"},ie.getPosArrayOfChildrenFromHex=function(e){return fe.getChildIdx(e,0)},ie.getHexValueArrayOfChildrenFromHex=function(e){var t,r=fe.getV,n=r(e,(t=ie.getPosArrayOfChildrenFromHex(e))[0]),i=r(e,t[1]),o=r(e,t[2]),s=r(e,t[3]),a=r(e,t[4]),u=r(e,t[5]),c=r(e,t[6]),h=r(e,t[7]),l=r(e,t[8]);return(t=new Array).push(n,i,o,s,a,u,c,h,l),t},ie.prototype.readPrivateKeyFromPEMString=function(e){var t=Ce(e),r=ie.getHexValueArrayOfChildrenFromHex(t);this.setPrivateEx(r[1],r[2],r[3],r[4],r[5],r[6],r[7],r[8])},ie.prototype.readPKCS5PrvKeyHex=function(e){var t=ie.getHexValueArrayOfChildrenFromHex(e);this.setPrivateEx(t[1],t[2],t[3],t[4],t[5],t[6],t[7],t[8])},ie.prototype.readPKCS8PrvKeyHex=function(e){var t,r,n,i,o,s,a,u,c=fe,h=c.getVbyList;if(!1===c.isASN1HEX(e))throw"not ASN.1 hex string";try{t=h(e,0,[2,0,1],"02"),r=h(e,0,[2,0,2],"02"),n=h(e,0,[2,0,3],"02"),i=h(e,0,[2,0,4],"02"),o=h(e,0,[2,0,5],"02"),s=h(e,0,[2,0,6],"02"),a=h(e,0,[2,0,7],"02"),u=h(e,0,[2,0,8],"02")}catch(e){throw"malformed PKCS#8 plain RSA private key"}this.setPrivateEx(t,r,n,i,o,s,a,u)},ie.prototype.readPKCS5PubKeyHex=function(e){var t=fe,r=t.getV;if(!1===t.isASN1HEX(e))throw"keyHex is not ASN.1 hex string";var n=t.getChildIdx(e,0);if(2!==n.length||"02"!==e.substr(n[0],2)||"02"!==e.substr(n[1],2))throw"wrong hex for PKCS#5 public key";var i=r(e,n[0]),o=r(e,n[1]);this.setPublic(i,o)},ie.prototype.readPKCS8PubKeyHex=function(e){var t=fe;if(!1===t.isASN1HEX(e))throw"not ASN.1 hex string";if("06092a864886f70d010101"!==t.getTLVbyList(e,0,[0,0]))throw"not PKCS8 RSA public key";var r=t.getTLVbyList(e,0,[1,0]);this.readPKCS5PubKeyHex(r)},ie.prototype.readCertPubKeyHex=function(e,t){var r,n;(r=new qe).readCertHex(e),n=r.getPublicKeyHex(),this.readPKCS8PubKeyHex(n)};var je=new RegExp("");function He(e,t){for(var r="",n=t/4-e.length,i=0;i>24,(16711680&i)>>16,(65280&i)>>8,255&i])))),i+=1;return n}function Ve(e){for(var t in ce.crypto.Util.DIGESTINFOHEAD){var r=ce.crypto.Util.DIGESTINFOHEAD[t],n=r.length;if(e.substring(0,n)==r)return[t,e.substring(n)]}return[]}function qe(){var e=fe,t=e.getChildIdx,r=e.getV,n=e.getTLV,i=e.getVbyList,o=e.getTLVbyList,s=e.getIdxbyList,a=e.getVidx,u=e.oidname,c=qe,h=Ce;this.hex=null,this.version=0,this.foffset=0,this.aExtInfo=null,this.getVersion=function(){return null===this.hex||0!==this.version?this.version:"a003020102"!==o(this.hex,0,[0,0])?(this.version=1,this.foffset=-1,1):(this.version=3,3)},this.getSerialNumberHex=function(){return i(this.hex,0,[0,1+this.foffset],"02")},this.getSignatureAlgorithmField=function(){return u(i(this.hex,0,[0,2+this.foffset,0],"06"))},this.getIssuerHex=function(){return o(this.hex,0,[0,3+this.foffset],"30")},this.getIssuerString=function(){return c.hex2dn(this.getIssuerHex())},this.getSubjectHex=function(){return o(this.hex,0,[0,5+this.foffset],"30")},this.getSubjectString=function(){return c.hex2dn(this.getSubjectHex())},this.getNotBefore=function(){var e=i(this.hex,0,[0,4+this.foffset,0]);return e=e.replace(/(..)/g,"%$1"),decodeURIComponent(e)},this.getNotAfter=function(){var e=i(this.hex,0,[0,4+this.foffset,1]);return e=e.replace(/(..)/g,"%$1"),decodeURIComponent(e)},this.getPublicKeyHex=function(){return e.getTLVbyList(this.hex,0,[0,6+this.foffset],"30")},this.getPublicKeyIdx=function(){return s(this.hex,0,[0,6+this.foffset],"30")},this.getPublicKeyContentIdx=function(){var e=this.getPublicKeyIdx();return s(this.hex,e,[1,0],"30")},this.getPublicKey=function(){return Me.getKey(this.getPublicKeyHex(),null,"pkcs8pub")},this.getSignatureAlgorithmName=function(){return u(i(this.hex,0,[1,0],"06"))},this.getSignatureValueHex=function(){return i(this.hex,0,[2],"03",!0)},this.verifySignature=function(e){var t=this.getSignatureAlgorithmName(),r=this.getSignatureValueHex(),n=o(this.hex,0,[0],"30"),i=new ce.crypto.Signature({alg:t});return i.init(e),i.updateHex(n),i.verify(r)},this.parseExt=function(){if(3!==this.version)return-1;var r=s(this.hex,0,[0,7,0],"30"),n=t(this.hex,r);this.aExtInfo=new Array;for(var o=0;o0&&(c=new Array(r),(new te).nextBytes(c),c=String.fromCharCode.apply(String,c));var h=be(u(Ee("\0\0\0\0\0\0\0\0"+i+c))),l=[];for(n=0;n>8*a-s&255;for(d[0]&=~p,n=0;nthis.n.bitLength())return 0;var n=Ve(this.doPublic(r).toString(16).replace(/^1f+00/,""));if(0==n.length)return!1;var i=n[0];return n[1]==function(e){return ce.crypto.Util.hashString(e,i)}(e)},ie.prototype.verifyWithMessageHash=function(e,t){var r=re(t=(t=t.replace(je,"")).replace(/[ \n]+/g,""),16);if(r.bitLength()>this.n.bitLength())return 0;var n=Ve(this.doPublic(r).toString(16).replace(/^1f+00/,""));return 0!=n.length&&(n[0],n[1]==e)},ie.prototype.verifyPSS=function(e,t,r,n){var i=function(e){return ce.crypto.Util.hashHex(e,r)}(Ee(e));return void 0===n&&(n=-1),this.verifyWithMessageHashPSS(i,t,r,n)},ie.prototype.verifyWithMessageHashPSS=function(e,t,r,n){var i=new b(t,16);if(i.bitLength()>this.n.bitLength())return!1;var o,s=function(e){return ce.crypto.Util.hashHex(e,r)},a=be(e),u=a.length,c=this.n.bitLength()-1,h=Math.ceil(c/8);if(-1===n||void 0===n)n=u;else if(-2===n)n=h-u-2;else if(n<-2)throw"invalid salt length";if(h>8*h-c&255;if(0!=(f.charCodeAt(0)&d))throw"bits beyond keysize not zero";var p=Ke(g,f.length,s),v=[];for(o=0;o0&&-1==(":"+n.join(":")+":").indexOf(":"+y+":"))throw"algorithm '"+y+"' not accepted in the list";if("none"!=y&&null===t)throw"key shall be specified to verify.";if("string"==typeof t&&-1!=t.indexOf("-----BEGIN ")&&(t=Me.getKey(t)),!("RS"!=g&&"PS"!=g||t instanceof i))throw"key shall be a RSAKey obj for RS* and PS* algs";if("ES"==g&&!(t instanceof c))throw"key shall be a ECDSA obj for ES* algs";var m=null;if(void 0===s.jwsalg2sigalg[v.alg])throw"unsupported alg name: "+y;if("none"==(m=s.jwsalg2sigalg[y]))throw"not supported";if("Hmac"==m.substr(0,4)){if(void 0===t)throw"hexadecimal key shall be specified for HMAC";var _=new h({alg:m,pass:t});return _.updateString(d),p==_.doFinal()}if(-1!=m.indexOf("withECDSA")){var S,w=null;try{w=c.concatSigToASN1Sig(p)}catch(e){return!1}return(S=new l({alg:m})).init(t),S.updateString(d),S.verify(w)}return(S=new l({alg:m})).init(t),S.updateString(d),S.verify(p)},ce.jws.JWS.parse=function(e){var t,r,n,i=e.split("."),o={};if(2!=i.length&&3!=i.length)throw"malformed sJWS: wrong number of '.' splitted elements";return t=i[0],r=i[1],3==i.length&&(n=i[2]),o.headerObj=ce.jws.JWS.readSafeJSONString(le(t)),o.payloadObj=ce.jws.JWS.readSafeJSONString(le(r)),o.headerPP=JSON.stringify(o.headerObj,null," "),null==o.payloadObj?o.payloadPP=le(r):o.payloadPP=JSON.stringify(o.payloadObj,null," "),void 0!==n&&(o.sigHex=Se(n)),o},ce.jws.JWS.verifyJWT=function(e,t,n){var i=ce.jws,o=i.JWS,s=o.readSafeJSONString,a=o.inArray,u=o.includedArray,c=e.split("."),h=c[0],l=c[1],f=(Se(c[2]),s(le(h))),g=s(le(l));if(void 0===f.alg)return!1;if(void 0===n.alg)throw"acceptField.alg shall be specified";if(!a(f.alg,n.alg))return!1;if(void 0!==g.iss&&"object"===r(n.iss)&&!a(g.iss,n.iss))return!1;if(void 0!==g.sub&&"object"===r(n.sub)&&!a(g.sub,n.sub))return!1;if(void 0!==g.aud&&"object"===r(n.aud))if("string"==typeof g.aud){if(!a(g.aud,n.aud))return!1}else if("object"==r(g.aud)&&!u(g.aud,n.aud))return!1;var d=i.IntDate.getNow();return void 0!==n.verifyAt&&"number"==typeof n.verifyAt&&(d=n.verifyAt),void 0!==n.gracePeriod&&"number"==typeof n.gracePeriod||(n.gracePeriod=0),!(void 0!==g.exp&&"number"==typeof g.exp&&g.exp+n.gracePeriodt.length&&(r=t.length);for(var n=0;n + * @license MIT + */ +var n=r(29),i=r(30),o=r(31);function s(){return u.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function a(e,t){if(s()=s())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s().toString(16)+" bytes");return 0|e}function d(e,t){if(u.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var r=e.length;if(0===r)return 0;for(var n=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return j(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return H(e).length;default:if(n)return j(e).length;t=(""+t).toLowerCase(),n=!0}}function p(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function v(e,t,r,n,i){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof t&&(t=u.from(t,n)),u.isBuffer(t))return 0===t.length?-1:y(e,t,r,n,i);if("number"==typeof t)return t&=255,u.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):y(e,[t],r,n,i);throw new TypeError("val must be string, number or Buffer")}function y(e,t,r,n,i){var o,s=1,a=e.length,u=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;s=2,a/=2,u/=2,r/=2}function c(e,t){return 1===s?e[t]:e.readUInt16BE(t*s)}if(i){var h=-1;for(o=r;oa&&(r=a-u),o=r;o>=0;o--){for(var l=!0,f=0;fi&&(n=i):n=i;var o=t.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var s=0;s>8,i=r%256,o.push(i),o.push(n);return o}(t,e.length-r),e,r,n)}function E(e,t,r){return 0===t&&r===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,r))}function x(e,t,r){r=Math.min(e.length,r);for(var n=[],i=t;i239?4:c>223?3:c>191?2:1;if(i+l<=r)switch(l){case 1:c<128&&(h=c);break;case 2:128==(192&(o=e[i+1]))&&(u=(31&c)<<6|63&o)>127&&(h=u);break;case 3:o=e[i+1],s=e[i+2],128==(192&o)&&128==(192&s)&&(u=(15&c)<<12|(63&o)<<6|63&s)>2047&&(u<55296||u>57343)&&(h=u);break;case 4:o=e[i+1],s=e[i+2],a=e[i+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(u=(15&c)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&u<1114112&&(h=u)}null===h?(h=65533,l=1):h>65535&&(h-=65536,n.push(h>>>10&1023|55296),h=56320|1023&h),n.push(h),i+=l}return function(e){var t=e.length;if(t<=k)return String.fromCharCode.apply(String,e);for(var r="",n=0;nthis.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return C(this,t,r);case"utf8":case"utf-8":return x(this,t,r);case"ascii":return A(this,t,r);case"latin1":case"binary":return P(this,t,r);case"base64":return E(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return T(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}.apply(this,arguments)},u.prototype.equals=function(e){if(!u.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===u.compare(this,e)},u.prototype.inspect=function(){var e="",r=t.INSPECT_MAX_BYTES;return this.length>0&&(e=this.toString("hex",0,r).match(/.{2}/g).join(" "),this.length>r&&(e+=" ... ")),""},u.prototype.compare=function(e,t,r,n,i){if(!u.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),t<0||r>e.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&t>=r)return 0;if(n>=i)return-1;if(t>=r)return 1;if(this===e)return 0;for(var o=(i>>>=0)-(n>>>=0),s=(r>>>=0)-(t>>>=0),a=Math.min(o,s),c=this.slice(n,i),h=e.slice(t,r),l=0;li)&&(r=i),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return m(this,e,t,r);case"utf8":case"utf-8":return _(this,e,t,r);case"ascii":return S(this,e,t,r);case"latin1":case"binary":return w(this,e,t,r);case"base64":return F(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return b(this,e,t,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},u.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var k=4096;function A(e,t,r){var n="";r=Math.min(e.length,r);for(var i=t;in)&&(r=n);for(var i="",o=t;or)throw new RangeError("Trying to access beyond buffer length")}function I(e,t,r,n,i,o){if(!u.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||te.length)throw new RangeError("Index out of range")}function D(e,t,r,n){t<0&&(t=65535+t+1);for(var i=0,o=Math.min(e.length-r,2);i>>8*(n?i:1-i)}function U(e,t,r,n){t<0&&(t=4294967295+t+1);for(var i=0,o=Math.min(e.length-r,4);i>>8*(n?i:3-i)&255}function L(e,t,r,n,i,o){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function N(e,t,r,n,o){return o||L(e,0,r,4),i.write(e,t,r,n,23,4),r+4}function O(e,t,r,n,o){return o||L(e,0,r,8),i.write(e,t,r,n,52,8),r+8}u.prototype.slice=function(e,t){var r,n=this.length;if((e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(t=void 0===t?n:~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),t0&&(i*=256);)n+=this[e+--t]*i;return n},u.prototype.readUInt8=function(e,t){return t||R(e,1,this.length),this[e]},u.prototype.readUInt16LE=function(e,t){return t||R(e,2,this.length),this[e]|this[e+1]<<8},u.prototype.readUInt16BE=function(e,t){return t||R(e,2,this.length),this[e]<<8|this[e+1]},u.prototype.readUInt32LE=function(e,t){return t||R(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},u.prototype.readUInt32BE=function(e,t){return t||R(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},u.prototype.readIntLE=function(e,t,r){e|=0,t|=0,r||R(e,t,this.length);for(var n=this[e],i=1,o=0;++o=(i*=128)&&(n-=Math.pow(2,8*t)),n},u.prototype.readIntBE=function(e,t,r){e|=0,t|=0,r||R(e,t,this.length);for(var n=t,i=1,o=this[e+--n];n>0&&(i*=256);)o+=this[e+--n]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*t)),o},u.prototype.readInt8=function(e,t){return t||R(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},u.prototype.readInt16LE=function(e,t){t||R(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},u.prototype.readInt16BE=function(e,t){t||R(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},u.prototype.readInt32LE=function(e,t){return t||R(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},u.prototype.readInt32BE=function(e,t){return t||R(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},u.prototype.readFloatLE=function(e,t){return t||R(e,4,this.length),i.read(this,e,!0,23,4)},u.prototype.readFloatBE=function(e,t){return t||R(e,4,this.length),i.read(this,e,!1,23,4)},u.prototype.readDoubleLE=function(e,t){return t||R(e,8,this.length),i.read(this,e,!0,52,8)},u.prototype.readDoubleBE=function(e,t){return t||R(e,8,this.length),i.read(this,e,!1,52,8)},u.prototype.writeUIntLE=function(e,t,r,n){e=+e,t|=0,r|=0,n||I(this,e,t,r,Math.pow(2,8*r)-1,0);var i=1,o=0;for(this[t]=255&e;++o=0&&(o*=256);)this[t+i]=e/o&255;return t+r},u.prototype.writeUInt8=function(e,t,r){return e=+e,t|=0,r||I(this,e,t,1,255,0),u.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},u.prototype.writeUInt16LE=function(e,t,r){return e=+e,t|=0,r||I(this,e,t,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},u.prototype.writeUInt16BE=function(e,t,r){return e=+e,t|=0,r||I(this,e,t,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},u.prototype.writeUInt32LE=function(e,t,r){return e=+e,t|=0,r||I(this,e,t,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):U(this,e,t,!0),t+4},u.prototype.writeUInt32BE=function(e,t,r){return e=+e,t|=0,r||I(this,e,t,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):U(this,e,t,!1),t+4},u.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t|=0,!n){var i=Math.pow(2,8*r-1);I(this,e,t,r,i-1,-i)}var o=0,s=1,a=0;for(this[t]=255&e;++o>0)-a&255;return t+r},u.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t|=0,!n){var i=Math.pow(2,8*r-1);I(this,e,t,r,i-1,-i)}var o=r-1,s=1,a=0;for(this[t+o]=255&e;--o>=0&&(s*=256);)e<0&&0===a&&0!==this[t+o+1]&&(a=1),this[t+o]=(e/s>>0)-a&255;return t+r},u.prototype.writeInt8=function(e,t,r){return e=+e,t|=0,r||I(this,e,t,1,127,-128),u.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},u.prototype.writeInt16LE=function(e,t,r){return e=+e,t|=0,r||I(this,e,t,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},u.prototype.writeInt16BE=function(e,t,r){return e=+e,t|=0,r||I(this,e,t,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},u.prototype.writeInt32LE=function(e,t,r){return e=+e,t|=0,r||I(this,e,t,4,2147483647,-2147483648),u.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):U(this,e,t,!0),t+4},u.prototype.writeInt32BE=function(e,t,r){return e=+e,t|=0,r||I(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),u.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):U(this,e,t,!1),t+4},u.prototype.writeFloatLE=function(e,t,r){return N(this,e,t,!0,r)},u.prototype.writeFloatBE=function(e,t,r){return N(this,e,t,!1,r)},u.prototype.writeDoubleLE=function(e,t,r){return O(this,e,t,!0,r)},u.prototype.writeDoubleBE=function(e,t,r){return O(this,e,t,!1,r)},u.prototype.copy=function(e,t,r,n){if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t=0;--i)e[i+t]=this[i+r];else if(o<1e3||!u.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(o=t;o55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(t-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(t-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;o.push(r)}else if(r<2048){if((t-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function H(e){return n.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(B,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function K(e,t,r,n){for(var i=0;i=t.length||i>=e.length);++i)t[i+r]=e[i];return i}}).call(this,r(28))},function(e,t){var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(e){"object"==typeof window&&(r=window)}e.exports=r},function(e,t,r){"use strict";t.byteLength=function(e){var t=c(e),r=t[0],n=t[1];return 3*(r+n)/4-n},t.toByteArray=function(e){for(var t,r=c(e),n=r[0],s=r[1],a=new o(function(e,t,r){return 3*(t+r)/4-r}(0,n,s)),u=0,h=s>0?n-4:n,l=0;l>16&255,a[u++]=t>>8&255,a[u++]=255&t;return 2===s&&(t=i[e.charCodeAt(l)]<<2|i[e.charCodeAt(l+1)]>>4,a[u++]=255&t),1===s&&(t=i[e.charCodeAt(l)]<<10|i[e.charCodeAt(l+1)]<<4|i[e.charCodeAt(l+2)]>>2,a[u++]=t>>8&255,a[u++]=255&t),a},t.fromByteArray=function(e){for(var t,r=e.length,i=r%3,o=[],s=0,a=r-i;sa?a:s+16383));return 1===i?(t=e[r-1],o.push(n[t>>2]+n[t<<4&63]+"==")):2===i&&(t=(e[r-2]<<8)+e[r-1],o.push(n[t>>10]+n[t>>4&63]+n[t<<2&63]+"=")),o.join("")};for(var n=[],i=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,u=s.length;a0)throw new Error("Invalid string. Length must be a multiple of 4");var r=e.indexOf("=");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function h(e,t,r){for(var i,o,s=[],a=t;a>18&63]+n[o>>12&63]+n[o>>6&63]+n[63&o]);return s.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},function(e,t){t.read=function(e,t,r,n,i){var o,s,a=8*i-n-1,u=(1<>1,h=-7,l=r?i-1:0,f=r?-1:1,g=e[t+l];for(l+=f,o=g&(1<<-h)-1,g>>=-h,h+=a;h>0;o=256*o+e[t+l],l+=f,h-=8);for(s=o&(1<<-h)-1,o>>=-h,h+=n;h>0;s=256*s+e[t+l],l+=f,h-=8);if(0===o)o=1-c;else{if(o===u)return s?NaN:1/0*(g?-1:1);s+=Math.pow(2,n),o-=c}return(g?-1:1)*s*Math.pow(2,o-n)},t.write=function(e,t,r,n,i,o){var s,a,u,c=8*o-i-1,h=(1<>1,f=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,g=n?0:o-1,d=n?1:-1,p=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,s=h):(s=Math.floor(Math.log(t)/Math.LN2),t*(u=Math.pow(2,-s))<1&&(s--,u*=2),(t+=s+l>=1?f/u:f*Math.pow(2,1-l))*u>=2&&(s++,u/=2),s+l>=h?(a=0,s=h):s+l>=1?(a=(t*u-1)*Math.pow(2,i),s+=l):(a=t*Math.pow(2,l-1)*Math.pow(2,i),s=0));i>=8;e[r+g]=255&a,g+=d,a/=256,i-=8);for(s=s<0;e[r+g]=255&s,g+=d,s/=256,c-=8);e[r+g-d]|=128*p}},function(e,t){var r={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==r.call(e)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=e.jws,r=e.KeyUtil,i=e.X509,o=e.crypto,s=e.hextob64u,a=e.b64tohex,u=e.AllowedSigningAlgs;return function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e)}return e.parseJwt=function e(r){n.Log.debug("JoseUtil.parseJwt");try{var i=t.JWS.parse(r);return{header:i.headerObj,payload:i.payloadObj}}catch(e){n.Log.error(e)}},e.validateJwt=function(t,o,s,u,c,h,l){n.Log.debug("JoseUtil.validateJwt");try{if("RSA"===o.kty)if(o.e&&o.n)o=r.getKey(o);else{if(!o.x5c||!o.x5c.length)return n.Log.error("JoseUtil.validateJwt: RSA key missing key material",o),Promise.reject(new Error("RSA key missing key material"));var f=a(o.x5c[0]);o=i.getPublicKeyFromCertHex(f)}else{if("EC"!==o.kty)return n.Log.error("JoseUtil.validateJwt: Unsupported key type",o&&o.kty),Promise.reject(new Error(o.kty));if(!(o.crv&&o.x&&o.y))return n.Log.error("JoseUtil.validateJwt: EC key missing key material",o),Promise.reject(new Error("EC key missing key material"));o=r.getKey(o)}return e._validateJwt(t,o,s,u,c,h,l)}catch(e){return n.Log.error(e&&e.message||e),Promise.reject("JWT validation failed")}},e.validateJwtAttributes=function(t,r,i,o,s,a){o||(o=0),s||(s=parseInt(Date.now()/1e3));var u=e.parseJwt(t).payload;if(!u.iss)return n.Log.error("JoseUtil._validateJwt: issuer was not provided"),Promise.reject(new Error("issuer was not provided"));if(u.iss!==r)return n.Log.error("JoseUtil._validateJwt: Invalid issuer in token",u.iss),Promise.reject(new Error("Invalid issuer in token: "+u.iss));if(!u.aud)return n.Log.error("JoseUtil._validateJwt: aud was not provided"),Promise.reject(new Error("aud was not provided"));if(!(u.aud===i||Array.isArray(u.aud)&&u.aud.indexOf(i)>=0))return n.Log.error("JoseUtil._validateJwt: Invalid audience in token",u.aud),Promise.reject(new Error("Invalid audience in token: "+u.aud));if(u.azp&&u.azp!==i)return n.Log.error("JoseUtil._validateJwt: Invalid azp in token",u.azp),Promise.reject(new Error("Invalid azp in token: "+u.azp));if(!a){var c=s+o,h=s-o;if(!u.iat)return n.Log.error("JoseUtil._validateJwt: iat was not provided"),Promise.reject(new Error("iat was not provided"));if(c>>((3&t)<<3)&255;return i}}},function(e,t){for(var r=[],n=0;n<256;++n)r[n]=(n+256).toString(16).substr(1);e.exports=function(e,t){var n=t||0,i=r;return[i[e[n++]],i[e[n++]],i[e[n++]],i[e[n++]],"-",i[e[n++]],i[e[n++]],"-",i[e[n++]],i[e[n++]],"-",i[e[n++]],i[e[n++]],"-",i[e[n++]],i[e[n++]],i[e[n++]],i[e[n++]],i[e[n++]],i[e[n++]]].join("")}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SigninResponse=void 0;var n=function(){function e(e,t){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:"#";!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e);var n=i.UrlUtility.parseUrlFragment(t,r);this.error=n.error,this.error_description=n.error_description,this.error_uri=n.error_uri,this.code=n.code,this.state=n.state,this.id_token=n.id_token,this.session_state=n.session_state,this.access_token=n.access_token,this.token_type=n.token_type,this.scope=n.scope,this.profile=void 0,this.expires_in=n.expires_in}return n(e,[{key:"expires_in",get:function(){if(this.expires_at){var e=parseInt(Date.now()/1e3);return this.expires_at-e}},set:function(e){var t=parseInt(e);if("number"==typeof t&&t>0){var r=parseInt(Date.now()/1e3);this.expires_at=r+t}}},{key:"expired",get:function(){var e=this.expires_in;if(void 0!==e)return e<=0}},{key:"scopes",get:function(){return(this.scope||"").split(" ")}},{key:"isOpenIdConnect",get:function(){return this.scopes.indexOf("openid")>=0||!!this.id_token}}]),e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SignoutRequest=void 0;var n=r(0),i=r(3),o=r(8);t.SignoutRequest=function e(t){var r=t.url,s=t.id_token_hint,a=t.post_logout_redirect_uri,u=t.data,c=t.extraQueryParams,h=t.request_type;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!r)throw n.Log.error("SignoutRequest.ctor: No url passed"),new Error("url");for(var l in s&&(r=i.UrlUtility.addQueryParam(r,"id_token_hint",s)),a&&(r=i.UrlUtility.addQueryParam(r,"post_logout_redirect_uri",a),u&&(this.state=new o.State({data:u,request_type:h}),r=i.UrlUtility.addQueryParam(r,"state",this.state.id))),c)r=i.UrlUtility.addQueryParam(r,l,c[l]);this.url=r}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SignoutResponse=void 0;var n=r(3);t.SignoutResponse=function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e);var r=n.UrlUtility.parseUrlFragment(t,"?");this.error=r.error,this.error_description=r.error_description,this.error_uri=r.error_uri,this.state=r.state}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.InMemoryWebStorage=void 0;var n=function(){function e(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:c.SilentRenewService,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:h.SessionMonitor,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:l.TokenRevocationClient,d=arguments.length>4&&void 0!==arguments[4]?arguments[4]:f.TokenClient,p=arguments.length>5&&void 0!==arguments[5]?arguments[5]:g.JoseUtil;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),r instanceof s.UserManagerSettings||(r=new s.UserManagerSettings(r));var v=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,e.call(this,r));return v._events=new u.UserManagerEvents(r),v._silentRenewService=new n(v),v.settings.automaticSilentRenew&&(i.Log.debug("UserManager.ctor: automaticSilentRenew is configured, setting up silent renew"),v.startSilentRenew()),v.settings.monitorSession&&(i.Log.debug("UserManager.ctor: monitorSession is configured, setting up session monitor"),v._sessionMonitor=new o(v)),v._tokenRevocationClient=new a(v._settings),v._tokenClient=new d(v._settings),v._joseUtil=p,v}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.getUser=function(){var e=this;return this._loadUser().then((function(t){return t?(i.Log.info("UserManager.getUser: user loaded"),e._events.load(t,!1),t):(i.Log.info("UserManager.getUser: user not found in storage"),null)}))},t.prototype.removeUser=function(){var e=this;return this.storeUser(null).then((function(){i.Log.info("UserManager.removeUser: user removed from storage"),e._events.unload()}))},t.prototype.signinRedirect=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="si:r";var t={useReplaceToNavigate:e.useReplaceToNavigate};return this._signinStart(e,this._redirectNavigator,t).then((function(){i.Log.info("UserManager.signinRedirect: successful")}))},t.prototype.signinRedirectCallback=function(e){return this._signinEnd(e||this._redirectNavigator.url).then((function(e){return e.profile&&e.profile.sub?i.Log.info("UserManager.signinRedirectCallback: successful, signed in sub: ",e.profile.sub):i.Log.info("UserManager.signinRedirectCallback: no sub"),e}))},t.prototype.signinPopup=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="si:p";var t=e.redirect_uri||this.settings.popup_redirect_uri||this.settings.redirect_uri;return t?(e.redirect_uri=t,e.display="popup",this._signin(e,this._popupNavigator,{startUrl:t,popupWindowFeatures:e.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:e.popupWindowTarget||this.settings.popupWindowTarget}).then((function(e){return e&&(e.profile&&e.profile.sub?i.Log.info("UserManager.signinPopup: signinPopup successful, signed in sub: ",e.profile.sub):i.Log.info("UserManager.signinPopup: no sub")),e}))):(i.Log.error("UserManager.signinPopup: No popup_redirect_uri or redirect_uri configured"),Promise.reject(new Error("No popup_redirect_uri or redirect_uri configured")))},t.prototype.signinPopupCallback=function(e){return this._signinCallback(e,this._popupNavigator).then((function(e){return e&&(e.profile&&e.profile.sub?i.Log.info("UserManager.signinPopupCallback: successful, signed in sub: ",e.profile.sub):i.Log.info("UserManager.signinPopupCallback: no sub")),e})).catch((function(e){i.Log.error(e.message)}))},t.prototype.signinSilent=function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(t=Object.assign({},t)).request_type="si:s",this._loadUser().then((function(r){return r&&r.refresh_token?(t.refresh_token=r.refresh_token,e._useRefreshToken(t)):(t.id_token_hint=t.id_token_hint||e.settings.includeIdTokenInSilentRenew&&r&&r.id_token,r&&e._settings.validateSubOnSilentRenew&&(i.Log.debug("UserManager.signinSilent, subject prior to silent renew: ",r.profile.sub),t.current_sub=r.profile.sub),e._signinSilentIframe(t))}))},t.prototype._useRefreshToken=function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this._tokenClient.exchangeRefreshToken(t).then((function(t){return t?t.access_token?e._loadUser().then((function(r){if(r){var n=Promise.resolve();return t.id_token&&(n=e._validateIdTokenFromTokenRefreshToken(r.profile,t.id_token)),n.then((function(){return i.Log.debug("UserManager._useRefreshToken: refresh token response success"),r.id_token=t.id_token,r.access_token=t.access_token,r.refresh_token=t.refresh_token||r.refresh_token,r.expires_in=t.expires_in,e.storeUser(r).then((function(){return e._events.load(r),r}))}))}return null})):(i.Log.error("UserManager._useRefreshToken: No access token returned from token endpoint"),Promise.reject("No access token returned from token endpoint")):(i.Log.error("UserManager._useRefreshToken: No response returned from token endpoint"),Promise.reject("No response returned from token endpoint"))}))},t.prototype._validateIdTokenFromTokenRefreshToken=function(e,t){var r=this;return this._metadataService.getIssuer().then((function(n){return r._joseUtil.validateJwtAttributes(t,n,r._settings.client_id,r._settings.clockSkew).then((function(t){return t?t.sub!==e.sub?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: sub in id_token does not match current sub"),Promise.reject(new Error("sub in id_token does not match current sub"))):t.auth_time&&t.auth_time!==e.auth_time?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: auth_time in id_token does not match original auth_time"),Promise.reject(new Error("auth_time in id_token does not match original auth_time"))):t.azp&&t.azp!==e.azp?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp in id_token does not match original azp"),Promise.reject(new Error("azp in id_token does not match original azp"))):!t.azp&&e.azp?(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: azp not in id_token, but present in original id_token"),Promise.reject(new Error("azp not in id_token, but present in original id_token"))):void 0:(i.Log.error("UserManager._validateIdTokenFromTokenRefreshToken: Failed to validate id_token"),Promise.reject(new Error("Failed to validate id_token")))}))}))},t.prototype._signinSilentIframe=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return t?(e.redirect_uri=t,e.prompt=e.prompt||"none",this._signin(e,this._iframeNavigator,{startUrl:t,silentRequestTimeout:e.silentRequestTimeout||this.settings.silentRequestTimeout}).then((function(e){return e&&(e.profile&&e.profile.sub?i.Log.info("UserManager.signinSilent: successful, signed in sub: ",e.profile.sub):i.Log.info("UserManager.signinSilent: no sub")),e}))):(i.Log.error("UserManager.signinSilent: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},t.prototype.signinSilentCallback=function(e){return this._signinCallback(e,this._iframeNavigator).then((function(e){return e&&(e.profile&&e.profile.sub?i.Log.info("UserManager.signinSilentCallback: successful, signed in sub: ",e.profile.sub):i.Log.info("UserManager.signinSilentCallback: no sub")),e}))},t.prototype.signinCallback=function(e){var t=this;return this.readSigninResponseState(e).then((function(r){var n=r.state;return r.response,"si:r"===n.request_type?t.signinRedirectCallback(e):"si:p"===n.request_type?t.signinPopupCallback(e):"si:s"===n.request_type?t.signinSilentCallback(e):Promise.reject(new Error("invalid response_type in state"))}))},t.prototype.signoutCallback=function(e,t){var r=this;return this.readSignoutResponseState(e).then((function(n){var i=n.state,o=n.response;return i?"so:r"===i.request_type?r.signoutRedirectCallback(e):"so:p"===i.request_type?r.signoutPopupCallback(e,t):Promise.reject(new Error("invalid response_type in state")):o}))},t.prototype.querySessionStatus=function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(t=Object.assign({},t)).request_type="si:s";var r=t.redirect_uri||this.settings.silent_redirect_uri||this.settings.redirect_uri;return r?(t.redirect_uri=r,t.prompt="none",t.response_type=t.response_type||this.settings.query_status_response_type,t.scope=t.scope||"openid",t.skipUserInfo=!0,this._signinStart(t,this._iframeNavigator,{startUrl:r,silentRequestTimeout:t.silentRequestTimeout||this.settings.silentRequestTimeout}).then((function(t){return e.processSigninResponse(t.url).then((function(e){if(i.Log.debug("UserManager.querySessionStatus: got signin response"),e.session_state&&e.profile.sub)return i.Log.info("UserManager.querySessionStatus: querySessionStatus success for sub: ",e.profile.sub),{session_state:e.session_state,sub:e.profile.sub,sid:e.profile.sid};i.Log.info("querySessionStatus successful, user not authenticated")})).catch((function(t){if(t.session_state&&e.settings.monitorAnonymousSession&&("login_required"==t.message||"consent_required"==t.message||"interaction_required"==t.message||"account_selection_required"==t.message))return i.Log.info("UserManager.querySessionStatus: querySessionStatus success for anonymous user"),{session_state:t.session_state};throw t}))}))):(i.Log.error("UserManager.querySessionStatus: No silent_redirect_uri configured"),Promise.reject(new Error("No silent_redirect_uri configured")))},t.prototype._signin=function(e,t){var r=this,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signinStart(e,t,n).then((function(t){return r._signinEnd(t.url,e)}))},t.prototype._signinStart=function(e,t){var r=this,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return t.prepare(n).then((function(t){return i.Log.debug("UserManager._signinStart: got navigator window handle"),r.createSigninRequest(e).then((function(e){return i.Log.debug("UserManager._signinStart: got signin request"),n.url=e.url,n.id=e.state.id,t.navigate(n)})).catch((function(e){throw t.close&&(i.Log.debug("UserManager._signinStart: Error after preparing navigator, closing navigator window"),t.close()),e}))}))},t.prototype._signinEnd=function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.processSigninResponse(e).then((function(e){i.Log.debug("UserManager._signinEnd: got signin response");var n=new a.User(e);if(r.current_sub){if(r.current_sub!==n.profile.sub)return i.Log.debug("UserManager._signinEnd: current user does not match user returned from signin. sub from signin: ",n.profile.sub),Promise.reject(new Error("login_required"));i.Log.debug("UserManager._signinEnd: current user matches user returned from signin")}return t.storeUser(n).then((function(){return i.Log.debug("UserManager._signinEnd: user stored"),t._events.load(n),n}))}))},t.prototype._signinCallback=function(e,t){return i.Log.debug("UserManager._signinCallback"),t.callback(e)},t.prototype.signoutRedirect=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="so:r";var t=e.post_logout_redirect_uri||this.settings.post_logout_redirect_uri;t&&(e.post_logout_redirect_uri=t);var r={useReplaceToNavigate:e.useReplaceToNavigate};return this._signoutStart(e,this._redirectNavigator,r).then((function(){i.Log.info("UserManager.signoutRedirect: successful")}))},t.prototype.signoutRedirectCallback=function(e){return this._signoutEnd(e||this._redirectNavigator.url).then((function(e){return i.Log.info("UserManager.signoutRedirectCallback: successful"),e}))},t.prototype.signoutPopup=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(e=Object.assign({},e)).request_type="so:p";var t=e.post_logout_redirect_uri||this.settings.popup_post_logout_redirect_uri||this.settings.post_logout_redirect_uri;return e.post_logout_redirect_uri=t,e.display="popup",e.post_logout_redirect_uri&&(e.state=e.state||{}),this._signout(e,this._popupNavigator,{startUrl:t,popupWindowFeatures:e.popupWindowFeatures||this.settings.popupWindowFeatures,popupWindowTarget:e.popupWindowTarget||this.settings.popupWindowTarget}).then((function(){i.Log.info("UserManager.signoutPopup: successful")}))},t.prototype.signoutPopupCallback=function(e,t){return void 0===t&&"boolean"==typeof e&&(t=e,e=null),this._popupNavigator.callback(e,t,"?").then((function(){i.Log.info("UserManager.signoutPopupCallback: successful")}))},t.prototype._signout=function(e,t){var r=this,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._signoutStart(e,t,n).then((function(e){return r._signoutEnd(e.url)}))},t.prototype._signoutStart=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=this,r=arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r.prepare(n).then((function(r){return i.Log.debug("UserManager._signoutStart: got navigator window handle"),t._loadUser().then((function(o){return i.Log.debug("UserManager._signoutStart: loaded current user from storage"),(t._settings.revokeAccessTokenOnSignout?t._revokeInternal(o):Promise.resolve()).then((function(){var s=e.id_token_hint||o&&o.id_token;return s&&(i.Log.debug("UserManager._signoutStart: Setting id_token into signout request"),e.id_token_hint=s),t.removeUser().then((function(){return i.Log.debug("UserManager._signoutStart: user removed, creating signout request"),t.createSignoutRequest(e).then((function(e){return i.Log.debug("UserManager._signoutStart: got signout request"),n.url=e.url,e.state&&(n.id=e.state.id),r.navigate(n)}))}))}))})).catch((function(e){throw r.close&&(i.Log.debug("UserManager._signoutStart: Error after preparing navigator, closing navigator window"),r.close()),e}))}))},t.prototype._signoutEnd=function(e){return this.processSignoutResponse(e).then((function(e){return i.Log.debug("UserManager._signoutEnd: got signout response"),e}))},t.prototype.revokeAccessToken=function(){var e=this;return this._loadUser().then((function(t){return e._revokeInternal(t,!0).then((function(r){if(r)return i.Log.debug("UserManager.revokeAccessToken: removing token properties from user and re-storing"),t.access_token=null,t.refresh_token=null,t.expires_at=null,t.token_type=null,e.storeUser(t).then((function(){i.Log.debug("UserManager.revokeAccessToken: user stored"),e._events.load(t)}))}))})).then((function(){i.Log.info("UserManager.revokeAccessToken: access token revoked successfully")}))},t.prototype._revokeInternal=function(e,t){var r=this;if(e){var n=e.access_token,o=e.refresh_token;return this._revokeAccessTokenInternal(n,t).then((function(e){return r._revokeRefreshTokenInternal(o,t).then((function(t){return e||t||i.Log.debug("UserManager.revokeAccessToken: no need to revoke due to no token(s), or JWT format"),e||t}))}))}return Promise.resolve(!1)},t.prototype._revokeAccessTokenInternal=function(e,t){return!e||e.indexOf(".")>=0?Promise.resolve(!1):this._tokenRevocationClient.revoke(e,t).then((function(){return!0}))},t.prototype._revokeRefreshTokenInternal=function(e,t){return e?this._tokenRevocationClient.revoke(e,t,"refresh_token").then((function(){return!0})):Promise.resolve(!1)},t.prototype.startSilentRenew=function(){this._silentRenewService.start()},t.prototype.stopSilentRenew=function(){this._silentRenewService.stop()},t.prototype._loadUser=function(){return this._userStore.get(this._userStoreKey).then((function(e){return e?(i.Log.debug("UserManager._loadUser: user storageString loaded"),a.User.fromStorageString(e)):(i.Log.debug("UserManager._loadUser: no user storageString"),null)}))},t.prototype.storeUser=function(e){if(e){i.Log.debug("UserManager.storeUser: storing user");var t=e.toStorageString();return this._userStore.set(this._userStoreKey,t)}return i.Log.debug("storeUser.storeUser: removing user"),this._userStore.remove(this._userStoreKey)},n(t,[{key:"_redirectNavigator",get:function(){return this.settings.redirectNavigator}},{key:"_popupNavigator",get:function(){return this.settings.popupNavigator}},{key:"_iframeNavigator",get:function(){return this.settings.iframeNavigator}},{key:"_userStore",get:function(){return this.settings.userStore}},{key:"events",get:function(){return this._events}},{key:"_userStoreKey",get:function(){return"user:"+this.settings.authority+":"+this.settings.client_id}}]),t}(o.OidcClient)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.UserManagerSettings=void 0;var n=function(){function e(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},n=r.popup_redirect_uri,i=r.popup_post_logout_redirect_uri,l=r.popupWindowFeatures,f=r.popupWindowTarget,g=r.silent_redirect_uri,d=r.silentRequestTimeout,p=r.automaticSilentRenew,v=void 0!==p&&p,y=r.validateSubOnSilentRenew,m=void 0!==y&&y,_=r.includeIdTokenInSilentRenew,S=void 0===_||_,w=r.monitorSession,F=void 0===w||w,b=r.monitorAnonymousSession,E=void 0!==b&&b,x=r.checkSessionInterval,k=void 0===x?2e3:x,A=r.stopCheckSessionOnError,P=void 0===A||A,C=r.query_status_response_type,T=r.revokeAccessTokenOnSignout,R=void 0!==T&&T,I=r.accessTokenExpiringNotificationTime,D=void 0===I?60:I,U=r.redirectNavigator,L=void 0===U?new o.RedirectNavigator:U,N=r.popupNavigator,O=void 0===N?new s.PopupNavigator:N,B=r.iframeNavigator,M=void 0===B?new a.IFrameNavigator:B,j=r.userStore,H=void 0===j?new u.WebStorageStateStore({store:c.Global.sessionStorage}):j;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var K=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,e.call(this,arguments[0]));return K._popup_redirect_uri=n,K._popup_post_logout_redirect_uri=i,K._popupWindowFeatures=l,K._popupWindowTarget=f,K._silent_redirect_uri=g,K._silentRequestTimeout=d,K._automaticSilentRenew=v,K._validateSubOnSilentRenew=m,K._includeIdTokenInSilentRenew=S,K._accessTokenExpiringNotificationTime=D,K._monitorSession=F,K._monitorAnonymousSession=E,K._checkSessionInterval=k,K._stopCheckSessionOnError=P,C?K._query_status_response_type=C:arguments[0]&&arguments[0].response_type?K._query_status_response_type=h.SigninRequest.isOidc(arguments[0].response_type)?"id_token":"code":K._query_status_response_type="id_token",K._revokeAccessTokenOnSignout=R,K._redirectNavigator=L,K._popupNavigator=O,K._iframeNavigator=M,K._userStore=H,K}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),n(t,[{key:"popup_redirect_uri",get:function(){return this._popup_redirect_uri}},{key:"popup_post_logout_redirect_uri",get:function(){return this._popup_post_logout_redirect_uri}},{key:"popupWindowFeatures",get:function(){return this._popupWindowFeatures}},{key:"popupWindowTarget",get:function(){return this._popupWindowTarget}},{key:"silent_redirect_uri",get:function(){return this._silent_redirect_uri}},{key:"silentRequestTimeout",get:function(){return this._silentRequestTimeout}},{key:"automaticSilentRenew",get:function(){return this._automaticSilentRenew}},{key:"validateSubOnSilentRenew",get:function(){return this._validateSubOnSilentRenew}},{key:"includeIdTokenInSilentRenew",get:function(){return this._includeIdTokenInSilentRenew}},{key:"accessTokenExpiringNotificationTime",get:function(){return this._accessTokenExpiringNotificationTime}},{key:"monitorSession",get:function(){return this._monitorSession}},{key:"monitorAnonymousSession",get:function(){return this._monitorAnonymousSession}},{key:"checkSessionInterval",get:function(){return this._checkSessionInterval}},{key:"stopCheckSessionOnError",get:function(){return this._stopCheckSessionOnError}},{key:"query_status_response_type",get:function(){return this._query_status_response_type}},{key:"revokeAccessTokenOnSignout",get:function(){return this._revokeAccessTokenOnSignout}},{key:"redirectNavigator",get:function(){return this._redirectNavigator}},{key:"popupNavigator",get:function(){return this._popupNavigator}},{key:"iframeNavigator",get:function(){return this._iframeNavigator}},{key:"userStore",get:function(){return this._userStore}}]),t}(i.OidcClientSettings)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.RedirectNavigator=void 0;var n=function(){function e(e,t){for(var r=0;r1&&void 0!==arguments[1])||arguments[1];n.Log.debug("UserManagerEvents.load"),e.prototype.load.call(this,t),r&&this._userLoaded.raise(t)},t.prototype.unload=function(){n.Log.debug("UserManagerEvents.unload"),e.prototype.unload.call(this),this._userUnloaded.raise()},t.prototype.addUserLoaded=function(e){this._userLoaded.addHandler(e)},t.prototype.removeUserLoaded=function(e){this._userLoaded.removeHandler(e)},t.prototype.addUserUnloaded=function(e){this._userUnloaded.addHandler(e)},t.prototype.removeUserUnloaded=function(e){this._userUnloaded.removeHandler(e)},t.prototype.addSilentRenewError=function(e){this._silentRenewError.addHandler(e)},t.prototype.removeSilentRenewError=function(e){this._silentRenewError.removeHandler(e)},t.prototype._raiseSilentRenewError=function(e){n.Log.debug("UserManagerEvents._raiseSilentRenewError",e.message),this._silentRenewError.raise(e)},t.prototype.addUserSignedIn=function(e){this._userSignedIn.addHandler(e)},t.prototype.removeUserSignedIn=function(e){this._userSignedIn.removeHandler(e)},t.prototype._raiseUserSignedIn=function(){n.Log.debug("UserManagerEvents._raiseUserSignedIn"),this._userSignedIn.raise()},t.prototype.addUserSignedOut=function(e){this._userSignedOut.addHandler(e)},t.prototype.removeUserSignedOut=function(e){this._userSignedOut.removeHandler(e)},t.prototype._raiseUserSignedOut=function(){n.Log.debug("UserManagerEvents._raiseUserSignedOut"),this._userSignedOut.raise()},t.prototype.addUserSessionChanged=function(e){this._userSessionChanged.addHandler(e)},t.prototype.removeUserSessionChanged=function(e){this._userSessionChanged.removeHandler(e)},t.prototype._raiseUserSessionChanged=function(){n.Log.debug("UserManagerEvents._raiseUserSessionChanged"),this._userSessionChanged.raise()},t}(i.AccessTokenEvents)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Timer=void 0;var n=function(){function e(e,t){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:o.Global.timer,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var s=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,e.call(this,r));return s._timer=n,s._nowFunc=i||function(){return Date.now()/1e3},s}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.init=function(e){e<=0&&(e=1),e=parseInt(e);var t=this.now+e;if(this.expiration===t&&this._timerHandle)i.Log.debug("Timer.init timer "+this._name+" skipping initialization since already initialized for expiration:",this.expiration);else{this.cancel(),i.Log.debug("Timer.init timer "+this._name+" for duration:",e),this._expiration=t;var r=5;e0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&!t)throw new Error("New logical elements must start empty, or allowExistingContents must be true");return r in e||(e[r]=[]),e}function s(e,t,n){var i=e;if(e instanceof Comment&&(c(i)&&c(i).length>0))throw new Error("Not implemented: inserting non-empty logical container");if(u(i))throw new Error("Not implemented: moving existing logical children");var a=c(t);if(n0;)e(r,0)}var i=r;i.parentNode.removeChild(i)},t.getLogicalParent=u,t.getLogicalSiblingEnd=function(e){return e[i]||null},t.getLogicalChild=function(e,t){return c(e)[t]},t.isSvgElement=function(e){return"http://www.w3.org/2000/svg"===l(e).namespaceURI},t.getLogicalChildrenArray=c,t.permuteLogicalChildren=function(e,t){var n=c(e);t.forEach((function(e){e.moveRangeStart=n[e.fromSiblingIndex],e.moveRangeEnd=function e(t){if(t instanceof Element)return t;var n=f(t);if(n)return n.previousSibling;var r=u(t);return r instanceof Element?r.lastChild:e(r)}(e.moveRangeStart)})),t.forEach((function(t){var r=t.moveToBeforeMarker=document.createComment("marker"),o=n[t.toSiblingIndex+1];o?o.parentNode.insertBefore(r,o):d(r,e)})),t.forEach((function(e){for(var t=e.moveToBeforeMarker,n=t.parentNode,r=e.moveRangeStart,o=e.moveRangeEnd,i=r;i;){var a=i.nextSibling;if(n.insertBefore(i,t),i===o)break;i=a}n.removeChild(t)})),t.forEach((function(e){n[e.toSiblingIndex]=e.moveRangeStart}))},t.getClosestDomElement=l},,,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n(26),n(17);var r=n(27),o=n(7),i={},a=!1;function s(e,t,n){var o=i[e];o||(o=i[e]=new r.BrowserRenderer(e)),o.attachRootComponentToLogicalElement(n,t)}t.attachRootComponentToLogicalElement=s,t.attachRootComponentToElement=function(e,t,n){var r=document.querySelector(e);if(!r)throw new Error("Could not find any element matching selector '"+e+"'.");s(n||0,o.toLogicalElement(r,!0),t)},t.getRendererer=function(e){return i[e]},t.renderBatch=function(e,t){var n=i[e];if(!n)throw new Error("There is no browser renderer with ID "+e+".");for(var r=t.arrayRangeReader,o=t.updatedComponents(),s=r.values(o),u=r.count(o),c=t.referenceFrames(),l=r.values(c),f=t.diffReader,d=0;d0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]>2]}t.monoPlatform={start:function(e){return new Promise((function(t,n){var l,f;s.attachDebuggerHotkey(e),window.Browser={init:function(){}},l=function(){window.Module=function(e,t,n){var l=this,f=e.bootConfig.resources,d=window.Module||{},p=["DEBUGGING ENABLED"];d.print=function(e){return p.indexOf(e)<0&&console.log(e)},d.printErr=function(e){console.error(e),u.showErrorNotification()},d.preRun=d.preRun||[],d.postRun=d.postRun||[],d.preloadPlugins=[];var m,w,_=e.loadResources(f.assembly,(function(e){return"_framework/"+e}),"assembly"),E=e.loadResources(f.pdb||{},(function(e){return"_framework/"+e}),"pdb"),I=e.loadResource("dotnet.wasm","_framework/dotnet.wasm",e.bootConfig.resources.runtime["dotnet.wasm"],"dotnetwasm");if(e.bootConfig.resources.runtime.hasOwnProperty("dotnet.timezones.blat")&&(m=e.loadResource("dotnet.timezones.blat","_framework/dotnet.timezones.blat",e.bootConfig.resources.runtime["dotnet.timezones.blat"],"globalization")),e.bootConfig.icuDataMode!=c.ICUDataMode.Invariant){var C=e.startOptions.applicationCulture||navigator.languages&&navigator.languages[0],N=function(e,t){if(!t||e.icuDataMode===c.ICUDataMode.All)return"icudt.dat";var n=t.split("-")[0];return["en","fr","it","de","es"].includes(n)?"icudt_EFIGS.dat":["zh","ko","ja"].includes(n)?"icudt_CJK.dat":"icudt_no_CJK.dat"}(e.bootConfig,C);w=e.loadResource(N,"_framework/"+N,e.bootConfig.resources.runtime[N],"globalization")}return d.instantiateWasm=function(e,t){return r(l,void 0,void 0,(function(){var n,r;return o(this,(function(o){switch(o.label){case 0:return o.trys.push([0,3,,4]),[4,I];case 1:return[4,y(o.sent(),e)];case 2:return n=o.sent(),[3,4];case 3:throw r=o.sent(),d.printErr(r),r;case 4:return t(n),[2]}}))})),[]},d.preRun.push((function(){i=cwrap("mono_wasm_add_assembly",null,["string","number","number"]),MONO.loaded_files=[],m&&function(e){r(this,void 0,void 0,(function(){var t,n;return o(this,(function(r){switch(r.label){case 0:return t="blazor:timezonedata",addRunDependency(t),[4,e.response];case 1:return[4,r.sent().arrayBuffer()];case 2:return n=r.sent(),Module.FS_createPath("/","usr",!0,!0),Module.FS_createPath("/usr/","share",!0,!0),Module.FS_createPath("/usr/share/","zoneinfo",!0,!0),MONO.mono_wasm_load_data_archive(new Uint8Array(n),"/usr/share/zoneinfo/"),removeRunDependency(t),[2]}}))}))}(m),w?function(e){r(this,void 0,void 0,(function(){var t,n,r,i,a;return o(this,(function(o){switch(o.label){case 0:return t="blazor:icudata",addRunDependency(t),[4,e.response];case 1:return n=o.sent(),i=Uint8Array.bind,[4,n.arrayBuffer()];case 2:if(r=new(i.apply(Uint8Array,[void 0,o.sent()])),a=MONO.mono_wasm_load_bytes_into_heap(r),!MONO.mono_wasm_load_icu_data(a))throw new Error("Error loading ICU asset.");return removeRunDependency(t),[2]}}))}))}(w):MONO.mono_wasm_setenv("DOTNET_SYSTEM_GLOBALIZATION_INVARIANT","1"),_.forEach((function(e){return A(e,b(e.name,".dll"))})),E.forEach((function(e){return A(e,e.name)})),window.Blazor._internal.dotNetCriticalError=function(e){d.printErr(BINDING.conv_string(e)||"(null)")},window.Blazor._internal.getSatelliteAssemblies=function(t){var n=BINDING.mono_array_to_js_array(t),i=e.bootConfig.resources.satelliteResources;if(e.startOptions.applicationCulture||navigator.languages&&navigator.languages[0],i){var a=Promise.all(n.filter((function(e){return i.hasOwnProperty(e)})).map((function(t){return e.loadResources(i[t],(function(e){return"_framework/"+e}),"assembly")})).reduce((function(e,t){return e.concat(t)}),new Array).map((function(e){return r(l,void 0,void 0,(function(){return o(this,(function(t){switch(t.label){case 0:return[4,e.response];case 1:return[2,t.sent().arrayBuffer()]}}))}))})));return BINDING.js_to_mono_obj(a.then((function(e){return e.length&&(window.Blazor._internal.readSatelliteAssemblies=function(){for(var t=BINDING.mono_obj_array_new(e.length),n=0;n>1];var n},readInt32Field:function(e,t){return p(e+(t||0))},readUint64Field:function(e,t){return function(e){var t=e>>2,n=Module.HEAPU32[t+1];if(n>f)throw new Error("Cannot read uint64 with high order part "+n+", because the result would exceed Number.MAX_SAFE_INTEGER.");return n*l+Module.HEAPU32[t]}(e+(t||0))},readFloatField:function(e,t){return n=e+(t||0),Module.HEAPF32[n>>2];var n},readObjectField:function(e,t){return p(e+(t||0))},readStringField:function(e,t,n){var r,o=p(e+(t||0));if(0===o)return null;if(n){var i=BINDING.unbox_mono_obj(o);return"boolean"==typeof i?i?"":null:i}return d?void 0===(r=d.stringCache.get(o))&&(r=BINDING.conv_string(o),d.stringCache.set(o,r)):r=BINDING.conv_string(o),r},readStructField:function(e,t){return e+(t||0)},beginHeapLock:function(){return g(),d=new w},invokeWhenHeapUnlocked:function(e){d?d.enqueuePostReleaseAction(e):e()}};var h=document.createElement("a");function m(e){return e+12}function v(e,t,n){var r="["+e+"] "+t+":"+n;return BINDING.bind_static_method(r)}function y(e,t){return r(this,void 0,void 0,(function(){var n,r;return o(this,(function(o){switch(o.label){case 0:if("function"!=typeof WebAssembly.instantiateStreaming)return[3,4];o.label=1;case 1:return o.trys.push([1,3,,4]),[4,WebAssembly.instantiateStreaming(e.response,t)];case 2:return[2,o.sent().instance];case 3:return n=o.sent(),console.info("Streaming compilation failed. Falling back to ArrayBuffer instantiation. ",n),[3,4];case 4:return[4,e.response.then((function(e){return e.arrayBuffer()}))];case 5:return r=o.sent(),[4,WebAssembly.instantiate(r,t)];case 6:return[2,o.sent().instance]}}))}))}function b(e,t){var n=e.lastIndexOf(".");if(n<0)throw new Error("No extension to replace in '"+e+"'");return e.substr(0,n)+t}function g(){if(d)throw new Error("Assertion failed - heap is currently locked")}var w=function(){function e(){this.stringCache=new Map}return e.prototype.enqueuePostReleaseAction=function(e){this.postReleaseActions||(this.postReleaseActions=[]),this.postReleaseActions.push(e)},e.prototype.release=function(){var e;if(d!==this)throw new Error("Trying to release a lock which isn't current");for(d=null;null===(e=this.postReleaseActions)||void 0===e?void 0:e.length;){this.postReleaseActions.shift()(),g()}},e}()},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&e.invokeMethodAsync("OnSpacerAfterVisible",r.boundingClientRect.bottom-r.intersectionRect.bottom,a,s)}}))}),{root:i,rootMargin:o+"px"});a.observe(t),a.observe(n);var s=c(t),u=c(n);function c(e){var t=new MutationObserver((function(){a.unobserve(e),a.observe(e)}));return t.observe(e,{attributes:!0}),t}r[e._id]={intersectionObserver:a,mutationObserverBefore:s,mutationObserverAfter:u}},dispose:function(e){var t=r[e._id];t&&(t.intersectionObserver.disconnect(),t.mutationObserverBefore.disconnect(),t.mutationObserverAfter.disconnect(),e.dispose(),delete r[e._id])}};var r={}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1].*)$/;function i(e,t){var n=e.currentElement;if(n&&n.nodeType===Node.COMMENT_NODE&&n.textContent){var r=new RegExp(o).exec(n.textContent),i=r&&r.groups&&r.groups.descriptor;if(!i)return;try{var s=function(e){var t=JSON.parse(e),n=t.type;if("server"!==n&&"webassembly"!==n)throw new Error("Invalid component type '"+n+"'.");return t}(i);switch(t){case"webassembly":return function(e,t,n){var r=e.type,o=e.assembly,i=e.typeName,s=e.parameterDefinitions,u=e.parameterValues,c=e.prerenderId;if("webassembly"!==r)return;if(!o)throw new Error("assembly must be defined when using a descriptor.");if(!i)throw new Error("typeName must be defined when using a descriptor.");if(c){var l=a(c,n);if(!l)throw new Error("Could not find an end component comment for '"+t+"'");return{type:r,assembly:o,typeName:i,parameterDefinitions:s&&atob(s),parameterValues:u&&atob(u),start:t,prerenderId:c,end:l}}return{type:r,assembly:o,typeName:i,parameterDefinitions:s&&atob(s),parameterValues:u&&atob(u),start:t}}(s,n,e);case"server":return function(e,t,n){var r=e.type,o=e.descriptor,i=e.sequence,s=e.prerenderId;if("server"!==r)return;if(!o)throw new Error("descriptor must be defined when using a descriptor.");if(void 0===i)throw new Error("sequence must be defined when using a descriptor.");if(!Number.isInteger(i))throw new Error("Error parsing the sequence '"+i+"' for component '"+JSON.stringify(e)+"'");if(s){var u=a(s,n);if(!u)throw new Error("Could not find an end component comment for '"+t+"'");return{type:r,sequence:i,descriptor:o,start:t,prerenderId:s,end:u}}return{type:r,sequence:i,descriptor:o,start:t}}(s,n,e)}}catch(e){throw new Error("Found malformed component comment at "+n.textContent)}}}function a(e,t){for(;t.next()&&t.currentElement;){var n=t.currentElement;if(n.nodeType===Node.COMMENT_NODE&&n.textContent){var r=new RegExp(o).exec(n.textContent),i=r&&r[1];if(i)return s(i,e),n}}}function s(e,t){var n=JSON.parse(e);if(1!==Object.keys(n).length)throw new Error("Invalid end of component comment: '"+e+"'");var r=n.prerenderId;if(!r)throw new Error("End of component comment must have a value for the prerendered property: '"+e+"'");if(r!==t)throw new Error("End of component comment prerendered property must match the start comment prerender id: '"+t+"', '"+r+"'")}var u=function(){function e(e){this.childNodes=e,this.currentIndex=-1,this.length=e.length}return e.prototype.next=function(){return this.currentIndex++,this.currentIndex0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(t,"__esModule",{value:!0});var a=n(3);n(25);var s=n(17),u=n(20),c=n(12),l=n(49),f=n(37),d=n(18),p=n(50),h=n(51),m=n(22),v=n(52),y=n(38),b=!1;function g(e){return r(this,void 0,void 0,(function(){var t,n,f,g,_,E,I,C,N,A,S,O=this;return o(this,(function(D){switch(D.label){case 0:if(b)throw new Error("Blazor has already started.");return b=!0,d.setEventDispatcher((function(e,t){c.getRendererer(e.browserRendererId).eventDelegator.getHandler(e.eventHandlerId)&&u.monoPlatform.invokeWhenHeapUnlocked((function(){return a.DotNet.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","DispatchEvent",e,JSON.stringify(t))}))})),window.Blazor._internal.invokeJSFromDotNet=w,t=s.setPlatform(u.monoPlatform),window.Blazor.platform=t,window.Blazor._internal.renderBatch=function(e,t){var n=u.monoPlatform.beginHeapLock();try{c.renderBatch(e,new l.SharedMemoryRenderBatch(t))}finally{n.release()}},n=window.Blazor._internal.navigationManager.getBaseURI,f=window.Blazor._internal.navigationManager.getLocationHref,window.Blazor._internal.navigationManager.getUnmarshalledBaseURI=function(){return BINDING.js_string_to_mono_string(n())},window.Blazor._internal.navigationManager.getUnmarshalledLocationHref=function(){return BINDING.js_string_to_mono_string(f())},window.Blazor._internal.navigationManager.listenForNavigationEvents((function(e,t){return r(O,void 0,void 0,(function(){return o(this,(function(n){switch(n.label){case 0:return[4,a.DotNet.invokeMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","NotifyLocationChanged",e,t)];case 1:return n.sent(),[2]}}))}))})),g=null==e?void 0:e.environment,_=m.BootConfigResult.initAsync(g),E=y.discoverComponents(document,"webassembly"),I=new v.WebAssemblyComponentAttacher(E),window.Blazor._internal.registeredComponents={getRegisteredComponentsCount:function(){return I.getCount()},getId:function(e){return I.getId(e)},getAssembly:function(e){return BINDING.js_string_to_mono_string(I.getAssembly(e))},getTypeName:function(e){return BINDING.js_string_to_mono_string(I.getTypeName(e))},getParameterDefinitions:function(e){return BINDING.js_string_to_mono_string(I.getParameterDefinitions(e)||"")},getParameterValues:function(e){return BINDING.js_string_to_mono_string(I.getParameterValues(e)||"")}},window.Blazor._internal.attachRootComponentToElement=function(e,t,n){var r=I.resolveRegisteredElement(e);r?c.attachRootComponentToLogicalElement(n,r,t):c.attachRootComponentToElement(e,t,n)},[4,_];case 1:return C=D.sent(),[4,Promise.all([p.WebAssemblyResourceLoader.initAsync(C.bootConfig,e||{}),h.WebAssemblyConfigLoader.initAsync(C)])];case 2:N=i.apply(void 0,[D.sent(),1]),A=N[0],D.label=3;case 3:return D.trys.push([3,5,,6]),[4,t.start(A)];case 4:return D.sent(),[3,6];case 5:throw S=D.sent(),new Error("Failed to start platform. Reason: "+S);case 6:return t.callEntryPoint(A.bootConfig.entryAssembly),[2]}}))}))}function w(e,t,n,r){var o=u.monoPlatform.readStringField(e,0),i=u.monoPlatform.readInt32Field(e,4),s=u.monoPlatform.readStringField(e,8),c=u.monoPlatform.readUint64Field(e,20);if(null!==s){var l=u.monoPlatform.readUint64Field(e,12);if(0!==l)return a.DotNet.jsCallDispatcher.beginInvokeJSFromDotNet(l,o,s,i,c),0;var f=a.DotNet.jsCallDispatcher.invokeJSFromDotNet(o,s,i,c);return null===f?0:BINDING.js_string_to_mono_string(f)}var d=a.DotNet.jsCallDispatcher.findJSFunction(o,c).call(null,t,n,r);switch(i){case a.DotNet.JSCallResultType.Default:return d;case a.DotNet.JSCallResultType.JSObjectReference:return a.DotNet.createJSObjectReference(d).__jsObjectId;default:throw new Error("Invalid JS call result type '"+i+"'.")}}window.Blazor.start=g,f.shouldAutoStart()&&g().catch((function(e){"undefined"!=typeof Module&&Module.printErr?Module.printErr(e):console.error(e)}))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(17),o=function(){function e(e){this.batchAddress=e,this.arrayRangeReader=i,this.arrayBuilderSegmentReader=a,this.diffReader=s,this.editReader=u,this.frameReader=c}return e.prototype.updatedComponents=function(){return r.platform.readStructField(this.batchAddress,0)},e.prototype.referenceFrames=function(){return r.platform.readStructField(this.batchAddress,i.structLength)},e.prototype.disposedComponentIds=function(){return r.platform.readStructField(this.batchAddress,2*i.structLength)},e.prototype.disposedEventHandlerIds=function(){return r.platform.readStructField(this.batchAddress,3*i.structLength)},e.prototype.updatedComponentsEntry=function(e,t){return l(e,t,s.structLength)},e.prototype.referenceFramesEntry=function(e,t){return l(e,t,c.structLength)},e.prototype.disposedComponentIdsEntry=function(e,t){var n=l(e,t,4);return r.platform.readInt32Field(n)},e.prototype.disposedEventHandlerIdsEntry=function(e,t){var n=l(e,t,8);return r.platform.readUint64Field(n)},e}();t.SharedMemoryRenderBatch=o;var i={structLength:8,values:function(e){return r.platform.readObjectField(e,0)},count:function(e){return r.platform.readInt32Field(e,4)}},a={structLength:12,values:function(e){var t=r.platform.readObjectField(e,0),n=r.platform.getObjectFieldsBaseAddress(t);return r.platform.readObjectField(n,0)},offset:function(e){return r.platform.readInt32Field(e,4)},count:function(e){return r.platform.readInt32Field(e,8)}},s={structLength:4+a.structLength,componentId:function(e){return r.platform.readInt32Field(e,0)},edits:function(e){return r.platform.readStructField(e,4)},editsEntry:function(e,t){return l(e,t,u.structLength)}},u={structLength:20,editType:function(e){return r.platform.readInt32Field(e,0)},siblingIndex:function(e){return r.platform.readInt32Field(e,4)},newTreeIndex:function(e){return r.platform.readInt32Field(e,8)},moveToSiblingIndex:function(e){return r.platform.readInt32Field(e,8)},removedAttributeName:function(e){return r.platform.readStringField(e,16)}},c={structLength:36,frameType:function(e){return r.platform.readInt16Field(e,4)},subtreeLength:function(e){return r.platform.readInt32Field(e,8)},elementReferenceCaptureId:function(e){return r.platform.readStringField(e,16)},componentId:function(e){return r.platform.readInt32Field(e,12)},elementName:function(e){return r.platform.readStringField(e,16)},textContent:function(e){return r.platform.readStringField(e,16)},markupContent:function(e){return r.platform.readStringField(e,16)},attributeName:function(e){return r.platform.readStringField(e,16)},attributeValue:function(e){return r.platform.readStringField(e,24,!0)},attributeEventHandlerId:function(e){return r.platform.readUint64Field(e,8)}};function l(e,t,n){return r.platform.getArrayEntryPtr(e,t,n)}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1] - - - - - - - + @@ -28,11 +22,7 @@ - - - - - + From a8c5186bde1ca44f00638491b3f2639e17c05b34 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 5 Jan 2021 10:15:32 +0800 Subject: [PATCH 187/217] Update the entity after changing its properties. Resolve #7000 --- .../Volo/Abp/Identity/IdentityUserAppService.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs index 31c9de0e18..9d3b7f5c12 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs +++ b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs @@ -84,7 +84,9 @@ namespace Volo.Abp.Identity input.MapExtraPropertiesTo(user); (await UserManager.CreateAsync(user, input.Password)).CheckErrors(); + await UpdateUserByInput(user, input); + (await UserManager.UpdateAsync(user)).CheckErrors(); await CurrentUnitOfWork.SaveChangesAsync(); @@ -174,6 +176,7 @@ namespace Volo.Abp.Identity user.Name = input.Name; user.Surname = input.Surname; + (await UserManager.UpdateAsync(user)).CheckErrors(); if (input.RoleNames != null) { From cb3ea0e5acdfaf1f4689660430ad310b821b828f Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 5 Jan 2021 10:20:15 +0800 Subject: [PATCH 188/217] Remove blank line. --- .../Volo/Abp/Identity/IdentityUserAppService.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs index 9d3b7f5c12..69fae63d71 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs +++ b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs @@ -84,7 +84,6 @@ namespace Volo.Abp.Identity input.MapExtraPropertiesTo(user); (await UserManager.CreateAsync(user, input.Password)).CheckErrors(); - await UpdateUserByInput(user, input); (await UserManager.UpdateAsync(user)).CheckErrors(); From f67c72d957ac3499a824d932ff05f48efee293fd Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 5 Jan 2021 09:01:12 +0300 Subject: [PATCH 189/217] define VALIDATION_INVALID_CLASSES as a provider --- .../packages/theme-basic/src/lib/theme-basic.module.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts b/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts index be08f78e5b..70adcf764e 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts @@ -5,6 +5,7 @@ import { NgbCollapseModule, NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap import { NgxValidateCoreModule, VALIDATION_ERROR_TEMPLATE, + VALIDATION_INVALID_CLASSES, VALIDATION_TARGET_SELECTOR, } from '@ngx-validate/core'; import { AccountLayoutComponent } from './components/account-layout/account-layout.component'; @@ -70,6 +71,10 @@ export class ThemeBasicModule { provide: VALIDATION_TARGET_SELECTOR, useValue: '.form-group', }, + { + provide: VALIDATION_INVALID_CLASSES, + useValue: 'is-invalid', + }, ], }; } From c18225a8de15e756dcda330580612afc2c98798e Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 5 Jan 2021 09:01:25 +0300 Subject: [PATCH 190/217] update the yarn.lock file --- npm/ng-packs/yarn.lock | 626 +++++++++++++++++++++++------------------ 1 file changed, 346 insertions(+), 280 deletions(-) diff --git a/npm/ng-packs/yarn.lock b/npm/ng-packs/yarn.lock index a3f300d1c8..bc2c1e46f5 100644 --- a/npm/ng-packs/yarn.lock +++ b/npm/ng-packs/yarn.lock @@ -92,14 +92,7 @@ chart.js "^2.9.3" tslib "^2.0.0" -"@abp/utils@^4.1.0-rc.1": - version "4.1.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.1.0-rc.1.tgz#2863867985db9d178a5ce4347309f060f1ce6142" - integrity sha512-C8e+x5/IdkJWQ8gLtO7ygsth5sd1iXKn0ARu/5u0g11nMjHsMY9Qkwg5QrnpHp2ws1+FL1Dg67omrQp9+KK5SA== - dependencies: - just-compare "^1.3.0" - -"@abp/utils@^4.1.0-rc.2": +"@abp/utils@^4.1.0-rc.1", "@abp/utils@^4.1.0-rc.2": version "4.1.0-rc.2" resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.1.0-rc.2.tgz#eb6dbf0ee493d0f050b37347d2d6d283098aedae" integrity sha512-V2k5I89lVBoeGIKgg4p2H9GlMAcDWbctwKZPVwBEMVEVm1uTR2xQAWdTdSFd5Q8I8Xsf/aIG8ELM7l5j2h7/zQ== @@ -124,31 +117,31 @@ "@angular-devkit/core" "10.1.7" rxjs "6.6.2" -"@angular-devkit/architect@0.1100.4": - version "0.1100.4" - resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1100.4.tgz#68c2b0333daa0291ad99205862111c04e7a63020" - integrity sha512-hzTfcSUwM0jsSt9HvvSFyaoAhX9k73L7y4kmkghzIFhKhIKOp/7o3n7hAFwN/jWKKmVQpPKnYmqzm9H9OveaCQ== +"@angular-devkit/architect@0.1100.5": + version "0.1100.5" + resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1100.5.tgz#3cf9b25464d484160b10417668efbdbd15c9e492" + integrity sha512-yOYfucNouc1doTbcGbCNMXGMSc36+j97XpdNoeGyzFQ7GwezLAro0a9gxc5PdOxndfelkND7J1JuOjxdW5O17A== dependencies: - "@angular-devkit/core" "11.0.4" + "@angular-devkit/core" "11.0.5" rxjs "6.6.3" "@angular-devkit/architect@>=0.1000.0 < 0.1100.0": - version "0.1002.0" - resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1002.0.tgz#470b78aaf79308a23da6a0d3935f2d1f85dcb212" - integrity sha512-twM8V03ujBIGVpgV1PBlSDodUdxtUb7WakutfWafAvEHUsgwzfvQz2VtKWvjNZ9AiYjnCuwkQaclqVv0VHNo9w== + version "0.1002.1" + resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1002.1.tgz#bd33dda1361b5d7c23e07b41a603b48ac9c3c744" + integrity sha512-vP27xCe++p3zm+zwSDXDm9/rsM71Q4MYidLLi0MQfo8wxsWS/4mWXycCBoMwDkvW44SPJ4Ds1/F46bb3/xRDvA== dependencies: - "@angular-devkit/core" "10.2.0" + "@angular-devkit/core" "10.2.1" rxjs "6.6.2" "@angular-devkit/build-angular@~0.1100.0": - version "0.1100.4" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-0.1100.4.tgz#22596475d38b13735876a4c7e1afc199654bb9ed" - integrity sha512-qVkMbtOwlo+k8fvOBOwwfKWMx06k4I1qrdjpRYAoZCt3cdje4EBepSciLrHnTB+ouIqWxpEDfEXTYBS98tXbBg== - dependencies: - "@angular-devkit/architect" "0.1100.4" - "@angular-devkit/build-optimizer" "0.1100.4" - "@angular-devkit/build-webpack" "0.1100.4" - "@angular-devkit/core" "11.0.4" + version "0.1100.5" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-0.1100.5.tgz#36a609a334369d9597ac50731f458440ffdbb2d1" + integrity sha512-lJYsnBImBAqUAIVC2qGY64UaC2uWOPZEpSWjYUxkRZA/c4IVCJj3M12CgONBjtcKYzFVXc1eojhrScukGIJJcg== + dependencies: + "@angular-devkit/architect" "0.1100.5" + "@angular-devkit/build-optimizer" "0.1100.5" + "@angular-devkit/build-webpack" "0.1100.5" + "@angular-devkit/core" "11.0.5" "@babel/core" "7.12.3" "@babel/generator" "7.12.1" "@babel/plugin-transform-runtime" "7.12.1" @@ -156,7 +149,7 @@ "@babel/runtime" "7.12.1" "@babel/template" "7.10.4" "@jsdevtools/coverage-istanbul-loader" "3.0.5" - "@ngtools/webpack" "11.0.4" + "@ngtools/webpack" "11.0.5" ansi-colors "4.1.1" autoprefixer "9.8.6" babel-loader "8.1.0" @@ -223,10 +216,10 @@ "@angular-devkit/architect" "0.1001.7" rxjs "6.6.2" -"@angular-devkit/build-optimizer@0.1100.4": - version "0.1100.4" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.1100.4.tgz#dbe44ad1d4a6e95436e3bae297dafc09a8ab9190" - integrity sha512-C05y4qMb05PWR7l1gZwRQKiB6KIDq+p72r8Yr6jm0UO6raOtMM72R8nHnioMnGJcFtZDEAYXEF+X7soI3MMlfw== +"@angular-devkit/build-optimizer@0.1100.5": + version "0.1100.5" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.1100.5.tgz#25de00e9cbea1444f911aa0a7a53a05800c90d62" + integrity sha512-aKITFuiydR681eS1z84EIdOtqdxP/V5xGZuF3xjGmg5Ddwv36PweAHaCVJEB4btHSWH6uxMvW2hLXg2RTWbRNg== dependencies: loader-utils "2.0.0" source-map "0.7.3" @@ -234,13 +227,13 @@ typescript "4.0.5" webpack-sources "2.0.1" -"@angular-devkit/build-webpack@0.1100.4": - version "0.1100.4" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1100.4.tgz#8ca4b10ce8fc739b128137c6c7c0d24377d27a76" - integrity sha512-uxe8gNSej3KF1FgqNtJmuRDbbINh3yLtXanXhRxFQLUj8IiNR8IciIVvy6RfXC5gqxcWwy1cOefJLLnuN9AOxQ== +"@angular-devkit/build-webpack@0.1100.5": + version "0.1100.5" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1100.5.tgz#81be4b35dc90ea66be205ad1cb9dc44dc31bf9e0" + integrity sha512-oD5t2oCfyiCyyeZckrqBnQco94zIMkRnRGzy3lFDH7KMiL0DG9l7x3nxn9H0YunYWr55LsGWwXGoR7l03Kl+jw== dependencies: - "@angular-devkit/architect" "0.1100.4" - "@angular-devkit/core" "11.0.4" + "@angular-devkit/architect" "0.1100.5" + "@angular-devkit/core" "11.0.5" rxjs "6.6.3" "@angular-devkit/core@10.0.8": @@ -265,10 +258,10 @@ rxjs "6.6.2" source-map "0.7.3" -"@angular-devkit/core@10.2.0", "@angular-devkit/core@^10.0.0": - version "10.2.0" - resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-10.2.0.tgz#fcde160afc2786d2da0166526f065c6cf98684c0" - integrity sha512-XAszFhSF3mZw1VjoOsYGbArr5NJLcStjOvcCGjBPl1UBM2AKpuCQXHxI9XJGYKL3B93Vp5G58d8qkHvamT53OA== +"@angular-devkit/core@10.2.1", "@angular-devkit/core@^10.0.0": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-10.2.1.tgz#3ae38be4ca56c745788481b3577173ac2007e9e0" + integrity sha512-dzlF9Gl7KNt9sPYT2HYq6ySZYwKzkyYR5mrBj3DZOD0OQsoc21LvLkWAHNSL2iYGdHJQS1oJDNs8iRYxYIOY3w== dependencies: ajv "6.12.4" fast-json-stable-stringify "2.1.0" @@ -276,10 +269,10 @@ rxjs "6.6.2" source-map "0.7.3" -"@angular-devkit/core@11.0.4", "@angular-devkit/core@~11.0.2": - version "11.0.4" - resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-11.0.4.tgz#4128b90bdb4d1803bb246d177b7cc6df64a0fec1" - integrity sha512-LgTvhZ3Ycz0QvNAH/zO1rpQQDn2JN8u9/Awy1gW/XeCC3FYmxeOj/2JCFzlKah3wJv16nMqro5WTppHt8Y++PA== +"@angular-devkit/core@11.0.5", "@angular-devkit/core@~11.0.2": + version "11.0.5" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-11.0.5.tgz#8239486d2de6c08fc55d2a64f12a7f5d518c8beb" + integrity sha512-hwV8fjF8JNPJkiVWw8MNzeIfDo01aD/OAOlC4L5rQnVHn+i2EiU3brSDmFqyeHPPV3h/QjuBkS3tkN7gSnVWaQ== dependencies: ajv "6.12.6" fast-json-stable-stringify "2.1.0" @@ -329,12 +322,12 @@ ora "5.0.0" rxjs "6.6.2" -"@angular-devkit/schematics@11.0.4", "@angular-devkit/schematics@~11.0.2": - version "11.0.4" - resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-11.0.4.tgz#0680fe038c66f2ecc3c69a293505fb02b694ce80" - integrity sha512-fFC7qW9A1bFAZgpCfkezBA4WCRzfVFgOzwPpyt65rgSrzw0+EeHjcrUIcXlhyOXAFrTHtA9oLCfEeSjSx5HBEA== +"@angular-devkit/schematics@11.0.5", "@angular-devkit/schematics@~11.0.2": + version "11.0.5" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-11.0.5.tgz#e5d89451daa644eccce93970709f7cdf44c11982" + integrity sha512-0NKGC8Nf/4vvDpWKB7bwxIazvNnNHnZBX6XlyBXNl+fW8tpTef3PNMJMSErTz9LFnuv61vsKbc36u/Ek2YChWg== dependencies: - "@angular-devkit/core" "11.0.4" + "@angular-devkit/core" "11.0.5" ora "5.1.0" rxjs "6.6.3" @@ -347,9 +340,9 @@ rxjs "6.4.0" "@angular/animations@~11.0.0": - version "11.0.4" - resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-11.0.4.tgz#fa669490d039455e63413a6b8cd1ff6b7a966bec" - integrity sha512-NI7UdLNdzTfLCDu0zVqwhdKq2z1flRsM2GCD9RHG/NRjlohh73uRTBW+BcYpfh+o+Wq4giiq8UkTIgS2ReqDGg== + version "11.0.5" + resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-11.0.5.tgz#44157c8bbb3f20ce1d3d6386eae956659cefd9d7" + integrity sha512-ghE/xDTYuEWkKNZtioH9JBrSlux0MLHzWoE7tNP+XMaplt80lCm979vWsEBO3/xpQLRmRlGPul6RacCAoeqogg== dependencies: tslib "^2.0.0" @@ -363,19 +356,19 @@ parse5 "^5.0.0" "@angular/cli@~11.0.0": - version "11.0.4" - resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-11.0.4.tgz#a04724f7ffb27417df59c2359e47ec54e1f61fab" - integrity sha512-VkE/gx6P80EJHg13fG+gkZfd2DJmRaDAtnamcCGM4AThzoUN9XBdxc24uMLEzBb0/mJ4vpMK9+WTNIdMmzl+Tg== - dependencies: - "@angular-devkit/architect" "0.1100.4" - "@angular-devkit/core" "11.0.4" - "@angular-devkit/schematics" "11.0.4" - "@schematics/angular" "11.0.4" - "@schematics/update" "0.1100.4" + version "11.0.5" + resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-11.0.5.tgz#1066d290fc91460f98cedcfbc9a5736340661467" + integrity sha512-k4j/2z7qkuigJ1shH0McW1wW63clhrbrg98FK4/KWhU/sce5AgVjuHDQFycAclTwHesf7Vs6Gzt7zGlqUmeKIg== + dependencies: + "@angular-devkit/architect" "0.1100.5" + "@angular-devkit/core" "11.0.5" + "@angular-devkit/schematics" "11.0.5" + "@schematics/angular" "11.0.5" + "@schematics/update" "0.1100.5" "@yarnpkg/lockfile" "1.1.0" ansi-colors "4.1.1" debug "4.2.0" - ini "1.3.5" + ini "1.3.6" inquirer "7.3.3" npm-package-arg "8.1.0" npm-pick-manifest "6.1.0" @@ -389,9 +382,9 @@ uuid "8.3.1" "@angular/common@~11.0.0": - version "11.0.4" - resolved "https://registry.yarnpkg.com/@angular/common/-/common-11.0.4.tgz#39cd88bfcecd895419c059c366eac2df2ca6a2e9" - integrity sha512-4R2ALj71J6EAHVCKNnHHCKL7wcosMsv3gcMXbMTE+Wpzo3khEhM0Tej+I1qmMbVmGXVlRb//4+rjE4gff6FvQw== + version "11.0.5" + resolved "https://registry.yarnpkg.com/@angular/common/-/common-11.0.5.tgz#7ec508cb7e14cf38640fe4e1c0fa3dd322a52505" + integrity sha512-aoXdTkoni65LWhrPKNsAiOnO70XFaTaisO+K8ZYMpciMTTAxHx3hFCF9sj4a+Bo3M1a5UDjpsFDYMeGgJOkmFA== dependencies: tslib "^2.0.0" @@ -434,23 +427,23 @@ integrity sha512-6Pxgsrf0qF9iFFqmIcWmjJGkkCaCm6V5QNnxMy2KloO3SDq6QuMVRbN9RtC8Urmo25LP+eZ6ZgYqFYpdD8Hd9w== "@angular/core@~11.0.0": - version "11.0.4" - resolved "https://registry.yarnpkg.com/@angular/core/-/core-11.0.4.tgz#8eebb6a550dc24e4d53f642c8a78a0da2830cd5b" - integrity sha512-860cTMjdCHcvEsHOsTzpg5rThxwVgtnY4yT0SgboWiphrlzX+aNoyN/cCJHxWhmOTRlrl6/+hkeRq95E2BZkKw== + version "11.0.5" + resolved "https://registry.yarnpkg.com/@angular/core/-/core-11.0.5.tgz#b8c448c3cd4f6dae7327cc1ba4ee2aa29c8dbc26" + integrity sha512-XAXWQi7R3ucZXQwx9QK5jSKJeQyRJ53u2dQDpr7R5stzeCy1a5hrNOkZLg9zOTTPcth/6+FrOrRZP9SMdxtw3w== dependencies: tslib "^2.0.0" "@angular/forms@~11.0.0": - version "11.0.4" - resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-11.0.4.tgz#6d77f01ecdf027a78df18d4e6cd3ad8fc8dd49e4" - integrity sha512-Fhfc4buwMZk0WumDvl/X7XBnOKFeTRTJrwKdi8LlhY6o1Og8H4e/f69u9iDJCF3YjU4qC6yGtPp9YpSVCPP7Ew== + version "11.0.5" + resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-11.0.5.tgz#1be90f86b45a3d672eecea249b1d8e5e9f8f0bc3" + integrity sha512-2zB1IuqYNJrjh7Og9J8f/AtjX3NHc3VVbt0rPw35ghqIU3aQLpOichdQ1y5QvMWic1UzZ7SjWXDU7RpKbm4iUA== dependencies: tslib "^2.0.0" "@angular/language-service@~11.0.0": - version "11.0.4" - resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-11.0.4.tgz#0a9c01170be92378f217dea3263c4eb2f8411aaa" - integrity sha512-KtQxVSlZi3SwZEN4E56KHkNTFEYa3FPZfLJFm6WD1dSobFyMwJgvztO08GWSaT4S0ht0NNRD2IRt0XzBYuZkag== + version "11.0.5" + resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-11.0.5.tgz#92499b5f29509142f29ae7af64b049765a7f7050" + integrity sha512-EzGycD9ztTKAZB+kR+masNqCfGmU0vnKd/z33VLmeo9fo41t/YNCEQEEFz/pEl2dEwX/Wjou+3oyTYZIZz2uSA== "@angular/localize@~10.0.10": version "10.0.14" @@ -462,32 +455,32 @@ yargs "15.3.0" "@angular/localize@~11.0.0": - version "11.0.4" - resolved "https://registry.yarnpkg.com/@angular/localize/-/localize-11.0.4.tgz#8f7a36685d97f26d52e3f19d9218e1e2e05a2bb2" - integrity sha512-r0dWvwFvEqQJ/H94rr548S092Hq53RqyMANuFD09CpkWXS6yAWBfArB6mW77PARnicEC0zkbi5qMGACjtSyNtA== + version "11.0.5" + resolved "https://registry.yarnpkg.com/@angular/localize/-/localize-11.0.5.tgz#e770d4ec1b2094822fdb0524516dca6bf39dfd05" + integrity sha512-tvzgRa/t0xCouCPFMurqZImLeWIISUjVEzkcny9P7xaaz0Cw7kSyulc0e8HXf+8oijSJ624YOYUzr7mkPoIfew== dependencies: "@babel/core" "7.8.3" glob "7.1.2" yargs "^16.1.1" "@angular/platform-browser-dynamic@~11.0.0": - version "11.0.4" - resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-11.0.4.tgz#d775f12954db689507ef98a51d8d7ed5763becd4" - integrity sha512-ZOWTZaFfZSHhMy7a0RIxipiZoiobHWrGlq8/YaMrIgzUb9Fv518FeFCCI68BP0/GuyxX74MJmzv4ZgQctKKxXw== + version "11.0.5" + resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-11.0.5.tgz#1e1de1ca429d85eb43b14cd5da90eba4ac95bd76" + integrity sha512-MFjpQcqkHOu8iTUMKVG6vfuOHwrRlgPBvkNucEbtXhTTYNlsw2mprxfUODYEu26EBUAh+FGttu8ZjclUGw4bVg== dependencies: tslib "^2.0.0" "@angular/platform-browser@~11.0.0": - version "11.0.4" - resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-11.0.4.tgz#131db1115943eb9c0191080e200c1e9dbd214d4c" - integrity sha512-+uUCKJgspSghJ3R6Fk0XHA0tolbaRBi8JFS2cY+hi9s27WKB88peGvtsK6RCOPJONY6JdOuhpcZqRN8dKfPi7w== + version "11.0.5" + resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-11.0.5.tgz#b695d2533491f85721612a41d6d3708791bca96c" + integrity sha512-173JZHF3QS78hEscBxFZ/kX8KLjdaDhfAYi4Sh8daIKNUcDcyhqEy7wpAjWmCwdspL1QUtWKCrhZqrEVNGTpvA== dependencies: tslib "^2.0.0" "@angular/router@~11.0.0": - version "11.0.4" - resolved "https://registry.yarnpkg.com/@angular/router/-/router-11.0.4.tgz#324507346c508649135f56e5f2b57c60e0ba7b16" - integrity sha512-B0sqv8zMM6j88+udEZzO8wKBw61pHgWZmLopnAqA65rRPrAvMsvAHUnYqX6w5pYqhJQxCVLVeKM+0QlQh1+WnA== + version "11.0.5" + resolved "https://registry.yarnpkg.com/@angular/router/-/router-11.0.5.tgz#95d47b3b510f6a49597db64cfd7ef936bb24c402" + integrity sha512-mSD4tbzuFH4uBb9vxPQHBUbkIMoWAfVUb7r9gtn3/deOxQbVh08f2gk2iWDN3OQLAa5mNHswuLByAYSw2rPbMA== dependencies: tslib "^2.0.0" @@ -506,10 +499,10 @@ "@ant-design/colors" "^5.0.0" tslib "^2.0.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" - integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.11", "@babel/code-frame@^7.8.3": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== dependencies: "@babel/highlight" "^7.10.4" @@ -591,12 +584,12 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.12.1", "@babel/generator@^7.12.10", "@babel/generator@^7.8.3": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.10.tgz#2b188fc329fb8e4f762181703beffc0fe6df3460" - integrity sha512-6mCdfhWgmqLdtTkhXjnIz0LcdVCd26wS2JXRtj2XY0u5klDsXBREA/pG5NVOuVnF2LUrBGNFtQkIqqTbblg0ww== +"@babel/generator@^7.12.1", "@babel/generator@^7.12.10", "@babel/generator@^7.12.11", "@babel/generator@^7.8.3": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.11.tgz#98a7df7b8c358c9a37ab07a24056853016aba3af" + integrity sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA== dependencies: - "@babel/types" "^7.12.10" + "@babel/types" "^7.12.11" jsesc "^2.5.1" source-map "^0.5.0" @@ -660,16 +653,16 @@ dependencies: "@babel/types" "^7.12.1" -"@babel/helper-function-name@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" - integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== +"@babel/helper-function-name@^7.10.4", "@babel/helper-function-name@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz#1fd7738aee5dcf53c3ecff24f1da9c511ec47b42" + integrity sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA== dependencies: - "@babel/helper-get-function-arity" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" + "@babel/helper-get-function-arity" "^7.12.10" + "@babel/template" "^7.12.7" + "@babel/types" "^7.12.11" -"@babel/helper-get-function-arity@^7.10.4": +"@babel/helper-get-function-arity@^7.12.10": version "7.12.10" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz#b158817a3165b5faa2047825dfa61970ddcc16cf" integrity sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag== @@ -683,7 +676,7 @@ dependencies: "@babel/types" "^7.10.4" -"@babel/helper-member-expression-to-functions@^7.12.1": +"@babel/helper-member-expression-to-functions@^7.12.1", "@babel/helper-member-expression-to-functions@^7.12.7": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz#aa77bd0396ec8114e5e30787efa78599d874a855" integrity sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw== @@ -712,7 +705,7 @@ "@babel/types" "^7.12.1" lodash "^4.17.19" -"@babel/helper-optimise-call-expression@^7.10.4": +"@babel/helper-optimise-call-expression@^7.10.4", "@babel/helper-optimise-call-expression@^7.12.10": version "7.12.10" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz#94ca4e306ee11a7dd6e9f42823e2ac6b49881e2d" integrity sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ== @@ -734,14 +727,14 @@ "@babel/types" "^7.12.1" "@babel/helper-replace-supers@^7.12.1": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz#f009a17543bbbbce16b06206ae73b63d3fca68d9" - integrity sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA== + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz#ea511658fc66c7908f923106dd88e08d1997d60d" + integrity sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA== dependencies: - "@babel/helper-member-expression-to-functions" "^7.12.1" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/traverse" "^7.12.5" - "@babel/types" "^7.12.5" + "@babel/helper-member-expression-to-functions" "^7.12.7" + "@babel/helper-optimise-call-expression" "^7.12.10" + "@babel/traverse" "^7.12.10" + "@babel/types" "^7.12.11" "@babel/helper-simple-access@^7.12.1": version "7.12.1" @@ -757,22 +750,22 @@ dependencies: "@babel/types" "^7.12.1" -"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" - integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== +"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0", "@babel/helper-split-export-declaration@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz#1b4cc424458643c47d37022223da33d76ea4603a" + integrity sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g== dependencies: - "@babel/types" "^7.11.0" + "@babel/types" "^7.12.11" -"@babel/helper-validator-identifier@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" - integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== +"@babel/helper-validator-identifier@^7.10.4", "@babel/helper-validator-identifier@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" + integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== "@babel/helper-validator-option@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz#175567380c3e77d60ff98a54bb015fe78f2178d9" - integrity sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A== + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz#d66cb8b7a3e7fe4c6962b32020a131ecf0847f4f" + integrity sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw== "@babel/helper-wrap-function@^7.10.4": version "7.12.3" @@ -802,15 +795,15 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.12.10", "@babel/parser@^7.12.3", "@babel/parser@^7.12.7", "@babel/parser@^7.8.3": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.10.tgz#824600d59e96aea26a5a2af5a9d812af05c3ae81" - integrity sha512-PJdRPwyoOqFAWfLytxrWwGrAxghCgh/yTNCYciOz8QgjflA7aZhECPZAa2VUedKg2+QMWkI0L9lynh2SNmNEgA== +"@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.12.10", "@babel/parser@^7.12.11", "@babel/parser@^7.12.3", "@babel/parser@^7.12.7", "@babel/parser@^7.8.3": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.11.tgz#9ce3595bcd74bc5c466905e86c535b8b25011e79" + integrity sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg== "@babel/plugin-proposal-async-generator-functions@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz#dc6c1170e27d8aca99ff65f4925bd06b1c90550e" - integrity sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A== + version "7.12.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.12.tgz#04b8f24fd4532008ab4e79f788468fd5a8476566" + integrity sha512-nrz9y0a4xmUrRq51bYkWJIO5SBZyG2ys2qinHsN0zHDHVsUaModrkpyWWWXfGqYQmOL3x9sQIcTNN/pBGpo09A== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-remap-async-to-generator" "^7.12.1" @@ -1036,9 +1029,9 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-block-scoping@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz#f0ee727874b42a208a48a586b84c3d222c2bbef1" - integrity sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w== + version "7.12.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.12.tgz#d93a567a152c22aea3b1929bb118d1d0a175cdca" + integrity sha512-VOEPQ/ExOVqbukuP7BYJtI5ZxxsmegTwzZ04j1aF0dkSypGo9XpDHuOrABsJu+ie+penpSJheDJ11x1BEZNiyQ== dependencies: "@babel/helper-plugin-utils" "^7.10.4" @@ -1387,26 +1380,26 @@ "@babel/types" "^7.12.7" "@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.10", "@babel/traverse@^7.12.5", "@babel/traverse@^7.8.3": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.10.tgz#2d1f4041e8bf42ea099e5b2dc48d6a594c00017a" - integrity sha512-6aEtf0IeRgbYWzta29lePeYSk+YAFIC3kyqESeft8o5CkFlYIMX+EQDDWEiAQ9LHOA3d0oHdgrSsID/CKqXJlg== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.12.10" - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/parser" "^7.12.10" - "@babel/types" "^7.12.10" + version "7.12.12" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.12.tgz#d0cd87892704edd8da002d674bc811ce64743376" + integrity sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w== + dependencies: + "@babel/code-frame" "^7.12.11" + "@babel/generator" "^7.12.11" + "@babel/helper-function-name" "^7.12.11" + "@babel/helper-split-export-declaration" "^7.12.11" + "@babel/parser" "^7.12.11" + "@babel/types" "^7.12.12" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.19" -"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.8.3", "@babel/types@^7.8.6": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.10.tgz#7965e4a7260b26f09c56bcfcb0498af1f6d9b260" - integrity sha512-sf6wboJV5mGyip2hIpDSKsr80RszPinEFjsHTalMxZAZkoQ2/2yQzxlcFN52SJqsyPfLtPmenL4g2KB3KJXPDw== +"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.11", "@babel/types@^7.12.12", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.8.3", "@babel/types@^7.8.6": + version "7.12.12" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.12.tgz#4608a6ec313abbd87afa55004d373ad04a96c299" + integrity sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ== dependencies: - "@babel/helper-validator-identifier" "^7.10.4" + "@babel/helper-validator-identifier" "^7.12.11" lodash "^4.17.19" to-fast-properties "^2.0.0" @@ -2473,12 +2466,12 @@ jquery "3.5.0" replace-in-file "^4.1.3" -"@ngtools/webpack@11.0.4": - version "11.0.4" - resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-11.0.4.tgz#fd80a8b7d648ddb8e56d73404e6b673903d2d365" - integrity sha512-MAV7inQmsMISTnDcXwyRX5oJZx8F7K/tZRLJciQwkM0DqZyq8fI9KDRwBcmYeQ+J0mSJV9LUVdExmpulpkywqw== +"@ngtools/webpack@11.0.5": + version "11.0.5" + resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-11.0.5.tgz#9d1abb9f9a5e72c014b5ed3e0c2cefe2a4175b30" + integrity sha512-hM0LdOSlC6c7ij+BvIpAFbe7dpJhL+A51L5v6YbMA6aM0Sb/y+HpE2u34AHEQvute7cLe4EyOyvJ9jSinVAJhQ== dependencies: - "@angular-devkit/core" "11.0.4" + "@angular-devkit/core" "11.0.5" enhanced-resolve "5.3.1" webpack-sources "2.0.1" @@ -2510,18 +2503,18 @@ dependencies: tslib "^1.9.0" -"@nodelib/fs.scandir@2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" - integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== +"@nodelib/fs.scandir@2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" + integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== dependencies: - "@nodelib/fs.stat" "2.0.3" + "@nodelib/fs.stat" "2.0.4" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" - integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== +"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" + integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== "@nodelib/fs.stat@^1.1.2": version "1.1.3" @@ -2529,11 +2522,11 @@ integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== "@nodelib/fs.walk@^1.2.3": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" - integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== + version "1.2.6" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" + integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== dependencies: - "@nodelib/fs.scandir" "2.1.3" + "@nodelib/fs.scandir" "2.1.4" fastq "^1.6.0" "@npmcli/move-file@^1.0.1": @@ -2559,10 +2552,10 @@ is-plain-object "^5.0.0" universal-user-agent "^6.0.0" -"@octokit/openapi-types@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-2.0.0.tgz#6d8f8ad9db3b75a39115f5def2654df8bed39f28" - integrity sha512-J4bfM7lf8oZvEAdpS71oTvC1ofKxfEZgU5vKVwzZKi4QPiL82udjpseJwxPid9Pu2FNmyRQOX4iEj6W1iOSnPw== +"@octokit/openapi-types@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-2.0.1.tgz#7453d8281ce66b8ed1607f7ac7d751c3baffd2cc" + integrity sha512-9AuC04PUnZrjoLiw3uPtwGh9FE4Q3rTqs51oNlQ0rkwgE8ftYsOC+lsrQyvCvWm85smBbSc0FNRKKumvGyb44Q== "@octokit/plugin-enterprise-rest@^6.0.1": version "6.0.1" @@ -2651,11 +2644,11 @@ "@types/node" ">= 8" "@octokit/types@^6.0.0", "@octokit/types@^6.0.3": - version "6.1.1" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.1.1.tgz#bc88b3eb5f447b025a2a1a8177a72db216e8d4ca" - integrity sha512-btm3D6S7VkRrgyYF31etUtVY/eQ1KzrNRqhFt25KSe2mKlXuLXJilglRC6eDA2P6ou94BUnk/Kz5MPEolXgoiw== + version "6.1.2" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.1.2.tgz#2b3a6ae0b8b71c27c770b4ff3e9ad8f1f538af58" + integrity sha512-LPCpcLbcky7fWfHCTuc7tMiSHFpFlrThJqVdaHgowBTMS0ijlZFfonQC/C1PrZOjD4xRCYgBqH9yttEATGE/nw== dependencies: - "@octokit/openapi-types" "^2.0.0" + "@octokit/openapi-types" "^2.0.1" "@types/node" ">= 8" "@rollup/plugin-commonjs@^15.0.0": @@ -2699,13 +2692,13 @@ estree-walker "^1.0.1" picomatch "^2.2.2" -"@schematics/angular@11.0.4": - version "11.0.4" - resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-11.0.4.tgz#36268ebda718c4f395457d2eea874fda9c469402" - integrity sha512-LwBD9TIoLy9XqqInJvlN4BHtPyJExyeorNiOp6rXb/wafuDbvZ+9kY9GWZTY1auVo5PNKqErfxr74ydA3FFb9g== +"@schematics/angular@11.0.5": + version "11.0.5" + resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-11.0.5.tgz#149f908fd600e881ff87c5192d2673d0e3c37f38" + integrity sha512-7p2wweoJYhim8YUy3ih1SrPGqRsa6+aEFbYgo9v4zt7b3tOva8SvkbC2alayK74fclzQ7umqa6xAwvWhy8ORvg== dependencies: - "@angular-devkit/core" "11.0.4" - "@angular-devkit/schematics" "11.0.4" + "@angular-devkit/core" "11.0.5" + "@angular-devkit/schematics" "11.0.5" jsonc-parser "2.3.1" "@schematics/angular@~10.0.5": @@ -2724,15 +2717,15 @@ "@angular-devkit/core" "10.1.7" "@angular-devkit/schematics" "10.1.7" -"@schematics/update@0.1100.4": - version "0.1100.4" - resolved "https://registry.yarnpkg.com/@schematics/update/-/update-0.1100.4.tgz#b67efdb39396ddcacef97de008100944af3d1556" - integrity sha512-YwFtgxCQQkYC89IC7dfshyGr0roE6bpp5HgpQLdS/AOjHeZKo7/SPdM0W4ddB+Fml1Fo6v4eFG/Ia9oR7qNv1A== +"@schematics/update@0.1100.5": + version "0.1100.5" + resolved "https://registry.yarnpkg.com/@schematics/update/-/update-0.1100.5.tgz#40b529d93db51e6f66378bd9f4ff99f2e9c278f6" + integrity sha512-BYtKKuiWsrlc4FMW3bRyl4tm6lWNMTi8oql/mtkSgH7V5eMmaLDJtM+zDl+qyC/KHPxbHTfoHDapfv1tITSWjA== dependencies: - "@angular-devkit/core" "11.0.4" - "@angular-devkit/schematics" "11.0.4" + "@angular-devkit/core" "11.0.5" + "@angular-devkit/schematics" "11.0.5" "@yarnpkg/lockfile" "1.1.0" - ini "1.3.5" + ini "1.3.6" npm-package-arg "^8.0.0" pacote "9.5.12" semver "7.3.2" @@ -2930,14 +2923,14 @@ integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== "@types/node@*", "@types/node@>= 8": - version "14.14.13" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.13.tgz#9e425079799322113ae8477297ae6ef51b8e0cdf" - integrity sha512-vbxr0VZ8exFMMAjCW8rJwaya0dMCDyYW2ZRdTyjtrCvJoENMpdUHOT/eTzvgyA5ZnqRZ/sI0NwqAxNHKYokLJQ== + version "14.14.19" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.19.tgz#5135176a8330b88ece4e9ab1fdcfc0a545b4bab4" + integrity sha512-4nhBPStMK04rruRVtVc6cDqhu7S9GZai0fpXgPXrFpcPX6Xul8xnrjSdGB4KPBVYG/R5+fXWdCM8qBoiULWGPQ== "@types/node@^12.11.1": - version "12.19.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.9.tgz#990ad687ad8b26ef6dcc34a4f69c33d40c95b679" - integrity sha512-yj0DOaQeUrk3nJ0bd3Y5PeDRJ6W0r+kilosLA+dzF3dola/o9hxhMSg2sFvVcA2UHS5JSOsZp4S0c1OEXc4m1Q== + version "12.19.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.11.tgz#9220ab4b20d91169eb78f456dbfcbabee89dfb50" + integrity sha512-bwVfNTFZOrGXyiQ6t4B9sZerMSShWNsGRw8tC5DY1qImUNczS9SjT4G6PnzjCnxsu5Ubj6xjL2lgwddkxtQl5w== "@types/node@^8.0.31": version "8.10.66" @@ -3015,9 +3008,9 @@ source-map "^0.6.1" "@types/yargs-parser@*": - version "15.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" - integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== + version "20.2.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9" + integrity sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA== "@types/yargs@^13.0.0": version "13.0.11" @@ -3027,9 +3020,9 @@ "@types/yargs-parser" "*" "@types/yargs@^15.0.0": - version "15.0.11" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.11.tgz#361d7579ecdac1527687bcebf9946621c12ab78c" - integrity sha512-jfcNBxHFYJ4nPIacsi3woz1+kvUO6s1CyeEhtnDHBjHUMNj5UlW2GynmnSgiJJEdNg9yW5C8lfoNRZrHGv5EqA== + version "15.0.12" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.12.tgz#6234ce3e3e3fa32c5db301a170f96a599c960d74" + integrity sha512-f+fD/fQAo3BCbCDlrUpznF1A5Zp9rB0noS5vnoormHSIPFKL0Z2DcUJ3Gxp5ytH4uLRNxy7AwYUC9exZzqGMAw== dependencies: "@types/yargs-parser" "*" @@ -3761,7 +3754,7 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -base64-js@^1.0.2: +base64-js@^1.0.2, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -3818,6 +3811,15 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" +bl@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489" + integrity sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + blocking-proxy@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/blocking-proxy/-/blocking-proxy-1.0.1.tgz#81d6fd1fe13a4c0d6957df7f91b75e98dac40cb2" @@ -3987,7 +3989,7 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.15.0, browserslist@^4.7.0, browserslist@^4.9.1: +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.0, browserslist@^4.7.0, browserslist@^4.9.1: version "4.16.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.0.tgz#410277627500be3cb28a1bfe037586fbedf9488b" integrity sha512-/j6k8R0p3nxOC6kx5JGAxsnhc9ixaWJfYc+TNTzxg6+ARaESAvQGV7h0uNOB4t+pLQJZWzcrMxXOxjgsCj3dqQ== @@ -4048,15 +4050,23 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= builtin-modules@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" - integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== + version "3.2.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" + integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== builtin-status-codes@^3.0.0: version "3.0.0" @@ -4264,9 +4274,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001032, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001165: - version "1.0.30001166" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001166.tgz#ca73e8747acfd16a4fd6c4b784f1b995f9698cf8" - integrity sha512-nCL4LzYK7F4mL0TjEMeYavafOGnBa98vTudH5c8lW9izUjnB99InG6pmC1ElAI1p0GlyZajv4ltUdFXvOHIl1A== + version "1.0.30001173" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001173.tgz#3c47bbe3cd6d7a9eda7f50ac016d158005569f56" + integrity sha512-R3aqmjrICdGCTAnSXtNyvWYMK3YtV5jwudbq0T7nN9k4kmE4CBuwPqyJ+KBzepSTh0huivV2gLbSMEzTTmfeYw== canonical-path@1.0.0: version "1.0.0" @@ -4447,7 +4457,7 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-spinners@^2.0.0, cli-spinners@^2.2.0, cli-spinners@^2.4.0: +cli-spinners@^2.0.0, cli-spinners@^2.2.0, cli-spinners@^2.4.0, cli-spinners@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.5.0.tgz#12763e47251bf951cb75c201dfa58ff1bcb2d047" integrity sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ== @@ -4829,16 +4839,16 @@ conventional-changelog-core@^3.1.6: through2 "^3.0.0" conventional-changelog-core@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.2.1.tgz#f811ad98ab2ff080becafc61407509420c9b447d" - integrity sha512-8cH8/DEoD3e5Q6aeogdR5oaaKs0+mG6+f+Om0ZYt3PNv7Zo0sQhu4bMDRsqAF+UTekTAtP1W/C41jH/fkm8Jtw== + version "4.2.2" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.2.2.tgz#f0897df6d53b5d63dec36b9442bd45354f8b3ce5" + integrity sha512-7pDpRUiobQDNkwHyJG7k9f6maPo9tfPzkSWbRq97GGiZqisElhnvUZSvyQH20ogfOjntB5aadvv6NNcKL1sReg== dependencies: add-stream "^1.0.0" conventional-changelog-writer "^4.0.18" conventional-commits-parser "^3.2.0" dateformat "^3.0.0" get-pkg-repo "^1.0.0" - git-raw-commits "2.0.0" + git-raw-commits "^2.0.8" git-remote-origin-url "^2.0.0" git-semver-tags "^4.1.1" lodash "^4.17.15" @@ -4891,9 +4901,9 @@ conventional-changelog-preset-loader@^2.1.1, conventional-changelog-preset-loade integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== conventional-changelog-writer@^4.0.18, conventional-changelog-writer@^4.0.6: - version "4.0.18" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.18.tgz#10b73baa59c7befc69b360562f8b9cd19e63daf8" - integrity sha512-mAQDCKyB9HsE8Ko5cCM1Jn1AWxXPYV0v8dFPabZRkvsiWUul2YyAqbIaoMKF88Zf2ffnOPSvKhboLf3fnjo5/A== + version "4.1.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.1.0.tgz#1ca7880b75aa28695ad33312a1f2366f4b12659f" + integrity sha512-WwKcUp7WyXYGQmkLsX4QmU42AZ1lqlvRW9mqoyiQzdD+rJWbTepdWoKJuwXTS+yq79XKnQNa93/roViPQrAQgw== dependencies: compare-func "^2.0.0" conventional-commits-filter "^2.0.7" @@ -4990,6 +5000,13 @@ cookie@0.4.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== +copy-anything@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-2.0.1.tgz#2afbce6da684bdfcbec93752fa762819cb480d9a" + integrity sha512-lA57e7viQHOdPQcrytv5jFeudZZOXuyk47lZym279FiDQ8jeZomXiGuVf6ffMKkJ+3TIai3J1J3yi6M+/4U35g== + dependencies: + is-what "^3.7.1" + copy-concurrently@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" @@ -5025,11 +5042,11 @@ copy-webpack-plugin@6.2.1: webpack-sources "^1.4.3" core-js-compat@^3.6.2: - version "3.8.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.1.tgz#8d1ddd341d660ba6194cbe0ce60f4c794c87a36e" - integrity sha512-a16TLmy9NVD1rkjUGbwuyWkiDoN0FDpAwrfLONvHFQx0D9k7J9y0srwMT8QP/Z6HE3MIFaVynEeYwZwPX1o5RQ== + version "3.8.2" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.2.tgz#3717f51f6c3d2ebba8cbf27619b57160029d1d4c" + integrity sha512-LO8uL9lOIyRRrQmZxHZFl1RV+ZbcsAkFWTktn5SmH40WgLtSNYN4m4W2v9ONT147PxBY/XrRhrWq8TlvObyUjQ== dependencies: - browserslist "^4.15.0" + browserslist "^4.16.0" semver "7.0.0" core-js@3.6.5: @@ -5398,6 +5415,11 @@ dargs@^4.0.1: dependencies: number-is-nan "^1.0.0" +dargs@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" + integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -5811,9 +5833,9 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.3.621: - version "1.3.626" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.626.tgz#48acdf322be07feb2c1330ba05e4bf6327f721a3" - integrity sha512-7CanEvJx74EnvjHu1X8gf93KieyxvFLnqOXAH/ddjWD4RrUZYqdg3pykrQ/7t6SLI7DTsp4tfQXEfzeK5t6oAw== + version "1.3.633" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.633.tgz#16dd5aec9de03894e8d14a1db4cda8a369b9b7fe" + integrity sha512-bsVCsONiVX1abkWdH7KtpuDAhsQ3N3bjPYhROSAXE78roJKet0Y5wznA14JE9pzbwSZmSMAW6KiKYf1RvbTJkA== elliptic@^6.5.3: version "6.5.3" @@ -5905,9 +5927,9 @@ err-code@^1.0.0: integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= errno@^0.1.1, errno@^0.1.3, errno@~0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== dependencies: prr "~1.0.1" @@ -6349,9 +6371,9 @@ fastparse@^1.1.2: integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== fastq@^1.6.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.9.0.tgz#e16a72f338eaca48e91b5c23593bcc2ef66b7947" - integrity sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w== + version "1.10.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.10.0.tgz#74dbefccade964932cdf500473ef302719c652bb" + integrity sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA== dependencies: reusify "^1.0.4" @@ -6691,9 +6713,9 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-intrinsic@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.1.tgz#94a9768fcbdd0595a1c9273aacf4c89d075631be" - integrity sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg== + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.2.tgz#6820da226e50b24894e08859469dc68361545d49" + integrity sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg== dependencies: function-bind "^1.1.1" has "^1.0.3" @@ -6762,6 +6784,17 @@ git-raw-commits@2.0.0: split2 "^2.0.0" through2 "^2.0.0" +git-raw-commits@^2.0.8: + version "2.0.9" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.9.tgz#5cbc707a615cb77b71e687f8a1ee54af46208b22" + integrity sha512-hSpNpxprVno7IOd4PZ93RQ+gNdzPAIrW0x8av6JQDJGV4k1mR9fE01dl8sEqi2P7aKmmwiGUn1BCPuf16Ae0Qw== + dependencies: + dargs "^7.0.0" + lodash.template "^4.0.2" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" + git-remote-origin-url@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" @@ -7155,9 +7188,9 @@ html-encoding-sniffer@^1.0.2: whatwg-encoding "^1.0.1" html-entities@^1.3.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.3.tgz#3dca638a43ee7de316fc23067398491152ad4736" - integrity sha512-/VulV3SYni1taM7a4RMdceqzJWR39gpZHjBwUnsCFKWV/GJkD14CJ5F7eWcZozmHJK0/f/H5U3b3SiPkuvxMgg== + version "1.4.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" + integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== html-escaper@^2.0.0: version "2.0.2" @@ -7212,9 +7245,9 @@ http-errors@~1.7.2: toidentifier "1.0.0" http-parser-js@>=0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" - integrity sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ== + version "0.5.3" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" + integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== http-proxy-agent@^2.1.0: version "2.1.0" @@ -7306,7 +7339,7 @@ icss-utils@^4.0.0, icss-utils@^4.1.1: dependencies: postcss "^7.0.14" -ieee754@^1.1.4: +ieee754@^1.1.13, ieee754@^1.1.4: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -7352,9 +7385,9 @@ import-fresh@^2.0.0: resolve-from "^3.0.0" import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.2.tgz#fc129c160c5d68235507f4331a6baad186bdbc3e" - integrity sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw== + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" @@ -7430,10 +7463,10 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== +ini@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.6.tgz#f1c46a2a93a253e7b3905115e74d527cd23061a1" + integrity sha512-IZUoxEjNjubzrmvzZU4lKP7OnYmX72XRl3sqkfJhBKweKi5rnGi5+IUdlj/H1M+Ip5JQ1WzaDMOBRY90Ajc5jg== ini@^1.3.2, ini@^1.3.4: version "1.3.8" @@ -7894,6 +7927,11 @@ is-utf8@^0.2.0, is-utf8@^0.2.1: resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= +is-what@^3.7.1: + version "3.12.0" + resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.12.0.tgz#f4405ce4bd6dd420d3ced51a026fb90e03705e55" + integrity sha512-2ilQz5/f/o9V7WRWJQmpFYNmQFZ9iM+OXRonZKcYgTkCzjb949Vi4h282PD1UfmgHk666rcWonbRJ++KI41VGw== + is-windows@^1.0.0, is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -8708,10 +8746,11 @@ less@3.12.2: source-map "~0.6.0" less@^3.10.3: - version "3.13.0" - resolved "https://registry.yarnpkg.com/less/-/less-3.13.0.tgz#6a47bb19d97edcf7a53d444b099275dd6b17c85a" - integrity sha512-uPhr9uoSGVKKYVGz0rXcYBK1zjwcIWRGcbnSgNt66XuIZYrYPaQiS+LeUOvqedBwrwdBYYaLqSff5ytGYuT7rA== + version "3.13.1" + resolved "https://registry.yarnpkg.com/less/-/less-3.13.1.tgz#0ebc91d2a0e9c0c6735b83d496b0ab0583077909" + integrity sha512-SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw== dependencies: + copy-anything "^2.0.1" tslib "^1.10.0" optionalDependencies: errno "^0.1.1" @@ -9141,9 +9180,9 @@ meow@^4.0.0: trim-newlines "^2.0.0" meow@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-8.0.0.tgz#1aa10ee61046719e334ffdc038bb5069250ec99a" - integrity sha512-nbsTRz2fwniJBFgUkcdISq8y/q9n9VbiHYbfwklFh5V4V2uAcxtKQkDc0yCLPM/kP0d+inZBewn3zJqewHE7kg== + version "8.1.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.0.tgz#0fcaa267e35e4d58584b8205923df6021ddcc7ba" + integrity sha512-fNWkgM1UVMey2kf24yLiccxLihc5W+6zVus3/N0b+VfnJgxV99E9u04X6NAiKdg6ED7DAQBX5sy36NM0QJZkWA== dependencies: "@types/minimist" "^1.2.0" camelcase-keys "^6.2.2" @@ -9224,22 +9263,17 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.44.0: - version "1.44.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" - integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== - -"mime-db@>= 1.43.0 < 2": +mime-db@1.45.0, "mime-db@>= 1.43.0 < 2": version "1.45.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.27" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" - integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + version "2.1.28" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd" + integrity sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ== dependencies: - mime-db "1.44.0" + mime-db "1.45.0" mime@1.6.0, mime@^1.4.1: version "1.6.0" @@ -9247,9 +9281,9 @@ mime@1.6.0, mime@^1.4.1: integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mime@^2.3.1, mime@^2.4.4: - version "2.4.6" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" - integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== + version "2.4.7" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.7.tgz#962aed9be0ed19c91fd7dc2ece5d7f4e89a90d74" + integrity sha512-dhNd1uA2u397uQk3Nv5LM4lm93WYDUXFn3Fu291FJerns4jyTudqhIWe4W04YLy7Uk1tm1Ore04NpjRvQp/NPA== mimic-fn@^1.0.0: version "1.2.0" @@ -9589,9 +9623,9 @@ ng-packagr@^11.0.1: terser "^5.0.0" ng-zorro-antd@^10.1.1: - version "10.2.1" - resolved "https://registry.yarnpkg.com/ng-zorro-antd/-/ng-zorro-antd-10.2.1.tgz#06d9c2db7f92bdd560c98c201114b2fc2318af23" - integrity sha512-G1w/Gs2Qgsoyf9c+t1uyQkZ07ayiOoH4waS8CP+IEvlCe0fZ02V0IFjS6NLrTpDxw7qDBIykI+qcWEY14GIF8A== + version "10.2.2" + resolved "https://registry.yarnpkg.com/ng-zorro-antd/-/ng-zorro-antd-10.2.2.tgz#5951f1fd5d1e405e7fe983756dca1eb942b255de" + integrity sha512-4Q2G6DtRJnEQXFcIEUyqgFi6JXcEF9bN0zOPNBV7LTNgjOf31QiE+3Pu2ifz8esGVwv7vmG8if8V2/Ha/Ol8Dw== dependencies: "@angular/cdk" "^10.2.4" "@ant-design/icons-angular" "^10.0.0" @@ -10085,7 +10119,7 @@ ora@5.0.0: strip-ansi "^6.0.0" wcwidth "^1.0.1" -ora@5.1.0, ora@^5.1.0: +ora@5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/ora/-/ora-5.1.0.tgz#b188cf8cd2d4d9b13fd25383bc3e5cba352c94f8" integrity sha512-9tXIMPvjZ7hPTbk8DFq1f7Kow/HU/pQYB60JbNq+QnGwcyhWVZaQ4hM9zQDEsPxw/muLpgiHSaumUZxCAmod/w== @@ -10111,6 +10145,20 @@ ora@^3.4.0: strip-ansi "^5.2.0" wcwidth "^1.0.1" +ora@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.2.0.tgz#de10bfd2d15514384af45f3fa9d9b1aaf344fda1" + integrity sha512-+wG2v8TUU8EgzPHun1k/n45pXquQ9fHnbXVetl9rRgO6kjZszGGbraF3XPTIdgeA+s1lbRjSEftAnyT0w8ZMvQ== + dependencies: + bl "^4.0.3" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + log-symbols "^4.0.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + original@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" @@ -11371,7 +11419,7 @@ read@1, read@~1.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -"readable-stream@2 || 3", readable-stream@3, readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.6.0: +"readable-stream@2 || 3", readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -11921,9 +11969,9 @@ sass@1.27.0: chokidar ">=2.0.0 <4.0.0" sass@^1.23.0: - version "1.30.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.30.0.tgz#60bbbbaf76ba10117e61c6c24f00161c3d60610e" - integrity sha512-26EUhOXRLaUY7+mWuRFqGeGGNmhB1vblpTENO1Z7mAzzIZeVxZr9EZoaY1kyGLFWdSOZxRMAufiN2mkbO6dAlw== + version "1.32.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.32.0.tgz#10101a026c13080b14e2b374d4e15ee24400a4d3" + integrity sha512-fhyqEbMIycQA4blrz/C0pYhv2o4x2y6FYYAH0CshBw3DXh5D5wyERgxw0ptdau1orc/GhNrhF7DFN2etyOCEng== dependencies: chokidar ">=2.0.0 <4.0.0" @@ -12442,6 +12490,13 @@ split2@^2.0.0: dependencies: through2 "^2.0.2" +split2@^3.0.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" + split@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" @@ -13350,9 +13405,9 @@ typescript@^3.5.2, typescript@~3.9.2: integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== uglify-js@^3.1.4: - version "3.12.1" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.12.1.tgz#78307f539f7b9ca5557babb186ea78ad30cc0375" - integrity sha512-o8lHP20KjIiQe5b/67Rh68xEGRrc2SRsCuuoYclXXoC74AfSRGblU1HKzJWH3HxPZ+Ort85fWHpSX7KwBUC9CQ== + version "3.12.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.12.4.tgz#93de48bb76bb3ec0fc36563f871ba46e2ee5c7ee" + integrity sha512-L5i5jg/SHkEqzN18gQMTWsZk3KelRsfD1wUVNqtq0kzqWQqcJjyL8yc1o8hJgRrWqrAl2mUFbhfznEIoi7zi2A== uid-number@0.0.6: version "0.0.6" @@ -13702,7 +13757,7 @@ webidl-conversions@^4.0.2: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -webpack-dev-middleware@3.7.2, webpack-dev-middleware@^3.7.2: +webpack-dev-middleware@3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== @@ -13713,6 +13768,17 @@ webpack-dev-middleware@3.7.2, webpack-dev-middleware@^3.7.2: range-parser "^1.2.1" webpack-log "^2.0.0" +webpack-dev-middleware@^3.7.2: + version "3.7.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" + integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + webpack-dev-server@3.11.0: version "3.11.0" resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c" @@ -14015,9 +14081,9 @@ ws@^6.2.1: async-limiter "~1.0.0" ws@^7.0.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.1.tgz#a333be02696bd0e54cea0434e21dcc8a9ac294bb" - integrity sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ== + version "7.4.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.2.tgz#782100048e54eb36fe9843363ab1c68672b261dd" + integrity sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA== xml-name-validator@^3.0.0: version "3.0.0" From 432aac034719cb3679a947320e375cfef7a4303c Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 5 Jan 2021 14:56:04 +0800 Subject: [PATCH 191/217] Use Standby instead of PauseAll method --- .../AbpBackgroundWorkersQuartzModule.cs | 10 +++---- .../Quartz/QuartzBackgroundWorkerAdapter.cs | 2 +- .../Quartz/QuartzBackgroundWorkerManager.cs | 9 ++++-- .../Volo/Abp/Quartz/AbpQuartzModule.cs | 30 ++----------------- 4 files changed, 14 insertions(+), 37 deletions(-) diff --git a/framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/AbpBackgroundWorkersQuartzModule.cs b/framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/AbpBackgroundWorkersQuartzModule.cs index 9cfc748c4e..a47f8dac77 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/AbpBackgroundWorkersQuartzModule.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/AbpBackgroundWorkersQuartzModule.cs @@ -26,20 +26,20 @@ namespace Volo.Abp.BackgroundWorkers.Quartz public override void OnPreApplicationInitialization(ApplicationInitializationContext context) { - var options = context.ServiceProvider.GetService>().Value; + var options = context.ServiceProvider.GetRequiredService>().Value; if (!options.IsEnabled) { - var quartzOptions = context.ServiceProvider.GetService>().Value; - quartzOptions.StartSchedulerFactory = scheduler => Task.CompletedTask; + var quartzOptions = context.ServiceProvider.GetRequiredService>().Value; + quartzOptions.StartSchedulerFactory = _ => Task.CompletedTask; } } public override void OnApplicationInitialization(ApplicationInitializationContext context) { - var quartzBackgroundWorkerOptions = context.ServiceProvider.GetService>().Value; + var quartzBackgroundWorkerOptions = context.ServiceProvider.GetRequiredService>().Value; if (quartzBackgroundWorkerOptions.IsAutoRegisterEnabled) { - var backgroundWorkerManager = context.ServiceProvider.GetService(); + var backgroundWorkerManager = context.ServiceProvider.GetRequiredService(); var works = context.ServiceProvider.GetServices().Where(x=>x.AutoRegister); foreach (var work in works) diff --git a/framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/QuartzBackgroundWorkerAdapter.cs b/framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/QuartzBackgroundWorkerAdapter.cs index 970beea3f0..0b75f389fe 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/QuartzBackgroundWorkerAdapter.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/QuartzBackgroundWorkerAdapter.cs @@ -57,7 +57,7 @@ namespace Volo.Abp.BackgroundWorkers.Quartz .Build(); } - public async override Task Execute(IJobExecutionContext context) + public override async Task Execute(IJobExecutionContext context) { var worker = (IBackgroundWorker) ServiceProvider.GetService(typeof(TWorker)); var workerContext = new PeriodicBackgroundWorkerContext(ServiceProvider); diff --git a/framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/QuartzBackgroundWorkerManager.cs b/framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/QuartzBackgroundWorkerManager.cs index d670c1db98..582a7dd520 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/QuartzBackgroundWorkerManager.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/QuartzBackgroundWorkerManager.cs @@ -19,14 +19,17 @@ namespace Volo.Abp.BackgroundWorkers.Quartz public virtual async Task StartAsync(CancellationToken cancellationToken = default) { - await _scheduler.ResumeAll(cancellationToken); + if (_scheduler.IsStarted && _scheduler.InStandbyMode) + { + await _scheduler.Start(cancellationToken); + } } public virtual async Task StopAsync(CancellationToken cancellationToken = default) { - if (!_scheduler.IsShutdown) + if (_scheduler.IsStarted && !_scheduler.InStandbyMode) { - await _scheduler.PauseAll(cancellationToken); + await _scheduler.Standby(cancellationToken); } } diff --git a/framework/src/Volo.Abp.Quartz/Volo/Abp/Quartz/AbpQuartzModule.cs b/framework/src/Volo.Abp.Quartz/Volo/Abp/Quartz/AbpQuartzModule.cs index 2429f617d9..fc9ba26367 100644 --- a/framework/src/Volo.Abp.Quartz/Volo/Abp/Quartz/AbpQuartzModule.cs +++ b/framework/src/Volo.Abp.Quartz/Volo/Abp/Quartz/AbpQuartzModule.cs @@ -16,9 +16,6 @@ namespace Volo.Abp.Quartz { var options = context.Services.ExecutePreConfiguredActions(); - // TODO: Remove this once Pomelo update MySqlConnector to >= 1.0.0 : https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/pull/1103 - AdaptMysqlConnector(); - context.Services.AddQuartz(options.Properties, build => { // these are the defaults @@ -55,7 +52,7 @@ namespace Volo.Abp.Quartz context.Services.AddSingleton(serviceProvider => { - return AsyncHelper.RunSync(() => serviceProvider.GetService().GetScheduler()); + return AsyncHelper.RunSync(() => serviceProvider.GetRequiredService().GetScheduler()); }); Configure(quartzOptions => @@ -69,7 +66,7 @@ namespace Volo.Abp.Quartz { var options = context.ServiceProvider.GetRequiredService>().Value; - _scheduler = context.ServiceProvider.GetService(); + _scheduler = context.ServiceProvider.GetRequiredService(); AsyncHelper.RunSync(() => options.StartSchedulerFactory.Invoke(_scheduler)); } @@ -81,28 +78,5 @@ namespace Volo.Abp.Quartz AsyncHelper.RunSync(() => _scheduler.Shutdown()); } } - - private void AdaptMysqlConnector() - { - var mySqlAvailable = System.Type.GetType("MySql.Data.MySqlClient.MySqlConnection, MySqlConnector") != null; - if (mySqlAvailable) - { - // Overriding the default 'MySqlConnector' provider to use the old 'MySql.Data' namespace found in MySqlConnector < 1.0.0 - DbProvider.RegisterDbMetadata("MySqlConnector", new DbMetadata() - { - ProductName = "MySQL, MySqlConnector provider", - AssemblyName = "MySqlConnector", - ConnectionType = System.Type.GetType("MySql.Data.MySqlClient.MySqlConnection, MySqlConnector"), - CommandType = System.Type.GetType("MySql.Data.MySqlClient.MySqlCommand, MySqlConnector"), - ParameterType = System.Type.GetType("MySql.Data.MySqlClient.MySqlParameter, MySqlConnector"), - ParameterDbType = System.Type.GetType("MySql.Data.MySqlClient.MySqlDbType, MySqlConnector"), - ParameterDbTypePropertyName = "MySqlDbType", - ParameterNamePrefix = "?", - ExceptionType = System.Type.GetType("MySql.Data.MySqlClient.MySqlException, MySqlConnector"), - BindByName = true, - DbBinaryTypeName = "Blob" - }); - } - } } } From 191b444ab9917e0cb9905b5c83b9051658401716 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 5 Jan 2021 16:50:46 +0800 Subject: [PATCH 192/217] Add en-GB language to template projects. --- .../MyProjectNameHttpApiHostModule.cs | 1 + .../MyProjectNameIdentityServerModule.cs | 1 + .../MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs | 1 + .../MyProjectNameHttpApiHostModule.cs | 1 + .../MyProjectNameIdentityServerModule.cs | 1 + .../MyProjectNameWebUnifiedModule.cs | 1 + 6 files changed, 6 insertions(+) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs index ac55c87569..d029cd0b1e 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs @@ -151,6 +151,7 @@ namespace MyCompanyName.MyProjectName options.Languages.Add(new LanguageInfo("ar", "ar", "العربية")); options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština")); options.Languages.Add(new LanguageInfo("en", "en", "English")); + options.Languages.Add(new LanguageInfo("en-GB", "en-GB", "English (UK)")); options.Languages.Add(new LanguageInfo("fr", "fr", "Français")); options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar")); options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs index 07db333488..02a2fcd478 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs @@ -63,6 +63,7 @@ namespace MyCompanyName.MyProjectName options.Languages.Add(new LanguageInfo("ar", "ar", "العربية")); options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština")); options.Languages.Add(new LanguageInfo("en", "en", "English")); + options.Languages.Add(new LanguageInfo("en-GB", "en-GB", "English (UK)")); options.Languages.Add(new LanguageInfo("fr", "fr", "Français")); options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar")); options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs index 5815dea9d7..606cdee1d4 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs @@ -161,6 +161,7 @@ namespace MyCompanyName.MyProjectName.Web options.Languages.Add(new LanguageInfo("ar", "ar", "العربية")); options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština")); options.Languages.Add(new LanguageInfo("en", "en", "English")); + options.Languages.Add(new LanguageInfo("en-GB", "en-GB", "English (UK)")); options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar")); options.Languages.Add(new LanguageInfo("fr", "fr", "Français")); options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs index a14632e97f..db77093f0a 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs @@ -96,6 +96,7 @@ namespace MyCompanyName.MyProjectName { options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština")); options.Languages.Add(new LanguageInfo("en", "en", "English")); + options.Languages.Add(new LanguageInfo("en-GB", "en-GB", "English (UK)")); options.Languages.Add(new LanguageInfo("fr", "fr", "Français")); options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar")); options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs index 9b61558fa8..d576d9a0a5 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs @@ -104,6 +104,7 @@ namespace MyCompanyName.MyProjectName { options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština")); options.Languages.Add(new LanguageInfo("en", "en", "English")); + options.Languages.Add(new LanguageInfo("en-GB", "en-GB", "English (UK)")); options.Languages.Add(new LanguageInfo("fr", "fr", "Français")); options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar")); options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs index 199fdb4fc1..1f1f64bb78 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs @@ -102,6 +102,7 @@ namespace MyCompanyName.MyProjectName { options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština")); options.Languages.Add(new LanguageInfo("en", "en", "English")); + options.Languages.Add(new LanguageInfo("en-GB", "en-GB", "English (UK)")); options.Languages.Add(new LanguageInfo("fr", "fr", "Français")); options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar")); options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português (Brasil)")); From 64b0d20c57a53ab156de1684bf3b7743c0b5322e Mon Sep 17 00:00:00 2001 From: Rwing Date: Tue, 5 Jan 2021 17:13:26 +0800 Subject: [PATCH 193/217] docs: fix typo ninio -> minio --- docs/zh-Hans/Blob-Storing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/zh-Hans/Blob-Storing.md b/docs/zh-Hans/Blob-Storing.md index c233f3359e..02df60580b 100644 --- a/docs/zh-Hans/Blob-Storing.md +++ b/docs/zh-Hans/Blob-Storing.md @@ -20,7 +20,7 @@ ABP框架已经有以下存储提供程序的实现; * [Database](Blob-Storing-Database.md): 将BLOB存储在数据库中. * [Azure](Blob-Storing-Azure.md): 将BLOG存储在 [Azure BLOB storage](https://azure.microsoft.com/en-us/services/storage/blobs/)中. * [Aliyun](Blob-Storing-Aliyun.md): 将BLOB存储在[Aliyun Storage Service](https://help.aliyun.com/product/31815.html)中. -* [Ninio](Blob-Storing-Minio.md): 将BLOB存储在[MinIO Object storage](https://min.io/)中. +* [Minio](Blob-Storing-Minio.md): 将BLOB存储在[MinIO Object storage](https://min.io/)中. * [Aws](Blob-Storing-Aws.md): 将BLOB存储在[Amazon Simple Storage Service](https://aws.amazon.com/s3/)中. 以后会实现更多的提供程序,你可以为自己喜欢的提供程序创建[请求](https://github.com/abpframework/abp/issues/new),或者你也可以[自己实现](Blob-Storing-Custom-Provider.md)它并[贡献](Contribution/Index.md)到ABP框架. From 4a0e9fc882e51919d74b1150e5d63ea871c7c416 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 5 Jan 2021 17:17:19 +0800 Subject: [PATCH 194/217] Update Blob-Storing.md --- docs/en/Blob-Storing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Blob-Storing.md b/docs/en/Blob-Storing.md index 63281a5ee6..a2d7a89e7a 100644 --- a/docs/en/Blob-Storing.md +++ b/docs/en/Blob-Storing.md @@ -21,7 +21,7 @@ The ABP Framework has already the following storage provider implementations; * [Azure](Blob-Storing-Azure.md): Stores BLOBs on the [Azure BLOB storage](https://azure.microsoft.com/en-us/services/storage/blobs/). * [Aliyun](Blob-Storing-Aliyun.md): Stores BLOBs on the [Aliyun Storage Service](https://help.aliyun.com/product/31815.html). * [Minio](Blob-Storing-Minio.md): Stores BLOBs on the [MinIO Object storage](https://min.io/). -* [Aws](Blob-Storing-Aws.md): Stores BLOBs on the[Amazon Simple Storage Service](https://aws.amazon.com/s3/). +* [Aws](Blob-Storing-Aws.md): Stores BLOBs on the [Amazon Simple Storage Service](https://aws.amazon.com/s3/). More providers will be implemented by the time. You can [request](https://github.com/abpframework/abp/issues/new) it for your favorite provider or [create it yourself](Blob-Storing-Custom-Provider.md) and [contribute](Contribution/Index.md) to the ABP Framework. From 039815cfe5df8a87f440068d494a96e3dcebe655 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 5 Jan 2021 09:01:12 +0300 Subject: [PATCH 195/217] define VALIDATION_INVALID_CLASSES as a provider --- .../packages/theme-basic/src/lib/theme-basic.module.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts b/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts index be08f78e5b..70adcf764e 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts @@ -5,6 +5,7 @@ import { NgbCollapseModule, NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap import { NgxValidateCoreModule, VALIDATION_ERROR_TEMPLATE, + VALIDATION_INVALID_CLASSES, VALIDATION_TARGET_SELECTOR, } from '@ngx-validate/core'; import { AccountLayoutComponent } from './components/account-layout/account-layout.component'; @@ -70,6 +71,10 @@ export class ThemeBasicModule { provide: VALIDATION_TARGET_SELECTOR, useValue: '.form-group', }, + { + provide: VALIDATION_INVALID_CLASSES, + useValue: 'is-invalid', + }, ], }; } From 7aa71d63a41fc44b1cc0ce2f439c4effa04fc2e4 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 5 Jan 2021 12:28:37 +0300 Subject: [PATCH 196/217] add taking time logs to the publish.ps1 --- npm/publish.ps1 | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/npm/publish.ps1 b/npm/publish.ps1 index d6ef361224..22ac73810d 100644 --- a/npm/publish.ps1 +++ b/npm/publish.ps1 @@ -39,6 +39,7 @@ $commands = ( ) foreach ($command in $commands) { + $timer = [System.Diagnostics.Stopwatch]::StartNew() Write-Host $command Invoke-Expression $command if ($LASTEXITCODE -ne '0' -And $command -notlike '*cd *') { @@ -46,4 +47,9 @@ foreach ($command in $commands) { Set-Location $RootFolder exit $LASTEXITCODE } + $timer.Stop() + $total = $timer.Elapsed + Write-Output "-------------------------" + Write-Output "$command command took $total (Hours:Minutes:Seconds:Milliseconds)" + Write-Output "-------------------------" } \ No newline at end of file From e82f89eee9f2cb241e86cb8b2180b2ae9d4472df Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 5 Jan 2021 09:01:25 +0300 Subject: [PATCH 197/217] update the yarn.lock file --- npm/ng-packs/yarn.lock | 626 +++++++++++++++++++++++------------------ 1 file changed, 346 insertions(+), 280 deletions(-) diff --git a/npm/ng-packs/yarn.lock b/npm/ng-packs/yarn.lock index a3f300d1c8..bc2c1e46f5 100644 --- a/npm/ng-packs/yarn.lock +++ b/npm/ng-packs/yarn.lock @@ -92,14 +92,7 @@ chart.js "^2.9.3" tslib "^2.0.0" -"@abp/utils@^4.1.0-rc.1": - version "4.1.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.1.0-rc.1.tgz#2863867985db9d178a5ce4347309f060f1ce6142" - integrity sha512-C8e+x5/IdkJWQ8gLtO7ygsth5sd1iXKn0ARu/5u0g11nMjHsMY9Qkwg5QrnpHp2ws1+FL1Dg67omrQp9+KK5SA== - dependencies: - just-compare "^1.3.0" - -"@abp/utils@^4.1.0-rc.2": +"@abp/utils@^4.1.0-rc.1", "@abp/utils@^4.1.0-rc.2": version "4.1.0-rc.2" resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.1.0-rc.2.tgz#eb6dbf0ee493d0f050b37347d2d6d283098aedae" integrity sha512-V2k5I89lVBoeGIKgg4p2H9GlMAcDWbctwKZPVwBEMVEVm1uTR2xQAWdTdSFd5Q8I8Xsf/aIG8ELM7l5j2h7/zQ== @@ -124,31 +117,31 @@ "@angular-devkit/core" "10.1.7" rxjs "6.6.2" -"@angular-devkit/architect@0.1100.4": - version "0.1100.4" - resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1100.4.tgz#68c2b0333daa0291ad99205862111c04e7a63020" - integrity sha512-hzTfcSUwM0jsSt9HvvSFyaoAhX9k73L7y4kmkghzIFhKhIKOp/7o3n7hAFwN/jWKKmVQpPKnYmqzm9H9OveaCQ== +"@angular-devkit/architect@0.1100.5": + version "0.1100.5" + resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1100.5.tgz#3cf9b25464d484160b10417668efbdbd15c9e492" + integrity sha512-yOYfucNouc1doTbcGbCNMXGMSc36+j97XpdNoeGyzFQ7GwezLAro0a9gxc5PdOxndfelkND7J1JuOjxdW5O17A== dependencies: - "@angular-devkit/core" "11.0.4" + "@angular-devkit/core" "11.0.5" rxjs "6.6.3" "@angular-devkit/architect@>=0.1000.0 < 0.1100.0": - version "0.1002.0" - resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1002.0.tgz#470b78aaf79308a23da6a0d3935f2d1f85dcb212" - integrity sha512-twM8V03ujBIGVpgV1PBlSDodUdxtUb7WakutfWafAvEHUsgwzfvQz2VtKWvjNZ9AiYjnCuwkQaclqVv0VHNo9w== + version "0.1002.1" + resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1002.1.tgz#bd33dda1361b5d7c23e07b41a603b48ac9c3c744" + integrity sha512-vP27xCe++p3zm+zwSDXDm9/rsM71Q4MYidLLi0MQfo8wxsWS/4mWXycCBoMwDkvW44SPJ4Ds1/F46bb3/xRDvA== dependencies: - "@angular-devkit/core" "10.2.0" + "@angular-devkit/core" "10.2.1" rxjs "6.6.2" "@angular-devkit/build-angular@~0.1100.0": - version "0.1100.4" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-0.1100.4.tgz#22596475d38b13735876a4c7e1afc199654bb9ed" - integrity sha512-qVkMbtOwlo+k8fvOBOwwfKWMx06k4I1qrdjpRYAoZCt3cdje4EBepSciLrHnTB+ouIqWxpEDfEXTYBS98tXbBg== - dependencies: - "@angular-devkit/architect" "0.1100.4" - "@angular-devkit/build-optimizer" "0.1100.4" - "@angular-devkit/build-webpack" "0.1100.4" - "@angular-devkit/core" "11.0.4" + version "0.1100.5" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-0.1100.5.tgz#36a609a334369d9597ac50731f458440ffdbb2d1" + integrity sha512-lJYsnBImBAqUAIVC2qGY64UaC2uWOPZEpSWjYUxkRZA/c4IVCJj3M12CgONBjtcKYzFVXc1eojhrScukGIJJcg== + dependencies: + "@angular-devkit/architect" "0.1100.5" + "@angular-devkit/build-optimizer" "0.1100.5" + "@angular-devkit/build-webpack" "0.1100.5" + "@angular-devkit/core" "11.0.5" "@babel/core" "7.12.3" "@babel/generator" "7.12.1" "@babel/plugin-transform-runtime" "7.12.1" @@ -156,7 +149,7 @@ "@babel/runtime" "7.12.1" "@babel/template" "7.10.4" "@jsdevtools/coverage-istanbul-loader" "3.0.5" - "@ngtools/webpack" "11.0.4" + "@ngtools/webpack" "11.0.5" ansi-colors "4.1.1" autoprefixer "9.8.6" babel-loader "8.1.0" @@ -223,10 +216,10 @@ "@angular-devkit/architect" "0.1001.7" rxjs "6.6.2" -"@angular-devkit/build-optimizer@0.1100.4": - version "0.1100.4" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.1100.4.tgz#dbe44ad1d4a6e95436e3bae297dafc09a8ab9190" - integrity sha512-C05y4qMb05PWR7l1gZwRQKiB6KIDq+p72r8Yr6jm0UO6raOtMM72R8nHnioMnGJcFtZDEAYXEF+X7soI3MMlfw== +"@angular-devkit/build-optimizer@0.1100.5": + version "0.1100.5" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.1100.5.tgz#25de00e9cbea1444f911aa0a7a53a05800c90d62" + integrity sha512-aKITFuiydR681eS1z84EIdOtqdxP/V5xGZuF3xjGmg5Ddwv36PweAHaCVJEB4btHSWH6uxMvW2hLXg2RTWbRNg== dependencies: loader-utils "2.0.0" source-map "0.7.3" @@ -234,13 +227,13 @@ typescript "4.0.5" webpack-sources "2.0.1" -"@angular-devkit/build-webpack@0.1100.4": - version "0.1100.4" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1100.4.tgz#8ca4b10ce8fc739b128137c6c7c0d24377d27a76" - integrity sha512-uxe8gNSej3KF1FgqNtJmuRDbbINh3yLtXanXhRxFQLUj8IiNR8IciIVvy6RfXC5gqxcWwy1cOefJLLnuN9AOxQ== +"@angular-devkit/build-webpack@0.1100.5": + version "0.1100.5" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1100.5.tgz#81be4b35dc90ea66be205ad1cb9dc44dc31bf9e0" + integrity sha512-oD5t2oCfyiCyyeZckrqBnQco94zIMkRnRGzy3lFDH7KMiL0DG9l7x3nxn9H0YunYWr55LsGWwXGoR7l03Kl+jw== dependencies: - "@angular-devkit/architect" "0.1100.4" - "@angular-devkit/core" "11.0.4" + "@angular-devkit/architect" "0.1100.5" + "@angular-devkit/core" "11.0.5" rxjs "6.6.3" "@angular-devkit/core@10.0.8": @@ -265,10 +258,10 @@ rxjs "6.6.2" source-map "0.7.3" -"@angular-devkit/core@10.2.0", "@angular-devkit/core@^10.0.0": - version "10.2.0" - resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-10.2.0.tgz#fcde160afc2786d2da0166526f065c6cf98684c0" - integrity sha512-XAszFhSF3mZw1VjoOsYGbArr5NJLcStjOvcCGjBPl1UBM2AKpuCQXHxI9XJGYKL3B93Vp5G58d8qkHvamT53OA== +"@angular-devkit/core@10.2.1", "@angular-devkit/core@^10.0.0": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-10.2.1.tgz#3ae38be4ca56c745788481b3577173ac2007e9e0" + integrity sha512-dzlF9Gl7KNt9sPYT2HYq6ySZYwKzkyYR5mrBj3DZOD0OQsoc21LvLkWAHNSL2iYGdHJQS1oJDNs8iRYxYIOY3w== dependencies: ajv "6.12.4" fast-json-stable-stringify "2.1.0" @@ -276,10 +269,10 @@ rxjs "6.6.2" source-map "0.7.3" -"@angular-devkit/core@11.0.4", "@angular-devkit/core@~11.0.2": - version "11.0.4" - resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-11.0.4.tgz#4128b90bdb4d1803bb246d177b7cc6df64a0fec1" - integrity sha512-LgTvhZ3Ycz0QvNAH/zO1rpQQDn2JN8u9/Awy1gW/XeCC3FYmxeOj/2JCFzlKah3wJv16nMqro5WTppHt8Y++PA== +"@angular-devkit/core@11.0.5", "@angular-devkit/core@~11.0.2": + version "11.0.5" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-11.0.5.tgz#8239486d2de6c08fc55d2a64f12a7f5d518c8beb" + integrity sha512-hwV8fjF8JNPJkiVWw8MNzeIfDo01aD/OAOlC4L5rQnVHn+i2EiU3brSDmFqyeHPPV3h/QjuBkS3tkN7gSnVWaQ== dependencies: ajv "6.12.6" fast-json-stable-stringify "2.1.0" @@ -329,12 +322,12 @@ ora "5.0.0" rxjs "6.6.2" -"@angular-devkit/schematics@11.0.4", "@angular-devkit/schematics@~11.0.2": - version "11.0.4" - resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-11.0.4.tgz#0680fe038c66f2ecc3c69a293505fb02b694ce80" - integrity sha512-fFC7qW9A1bFAZgpCfkezBA4WCRzfVFgOzwPpyt65rgSrzw0+EeHjcrUIcXlhyOXAFrTHtA9oLCfEeSjSx5HBEA== +"@angular-devkit/schematics@11.0.5", "@angular-devkit/schematics@~11.0.2": + version "11.0.5" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-11.0.5.tgz#e5d89451daa644eccce93970709f7cdf44c11982" + integrity sha512-0NKGC8Nf/4vvDpWKB7bwxIazvNnNHnZBX6XlyBXNl+fW8tpTef3PNMJMSErTz9LFnuv61vsKbc36u/Ek2YChWg== dependencies: - "@angular-devkit/core" "11.0.4" + "@angular-devkit/core" "11.0.5" ora "5.1.0" rxjs "6.6.3" @@ -347,9 +340,9 @@ rxjs "6.4.0" "@angular/animations@~11.0.0": - version "11.0.4" - resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-11.0.4.tgz#fa669490d039455e63413a6b8cd1ff6b7a966bec" - integrity sha512-NI7UdLNdzTfLCDu0zVqwhdKq2z1flRsM2GCD9RHG/NRjlohh73uRTBW+BcYpfh+o+Wq4giiq8UkTIgS2ReqDGg== + version "11.0.5" + resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-11.0.5.tgz#44157c8bbb3f20ce1d3d6386eae956659cefd9d7" + integrity sha512-ghE/xDTYuEWkKNZtioH9JBrSlux0MLHzWoE7tNP+XMaplt80lCm979vWsEBO3/xpQLRmRlGPul6RacCAoeqogg== dependencies: tslib "^2.0.0" @@ -363,19 +356,19 @@ parse5 "^5.0.0" "@angular/cli@~11.0.0": - version "11.0.4" - resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-11.0.4.tgz#a04724f7ffb27417df59c2359e47ec54e1f61fab" - integrity sha512-VkE/gx6P80EJHg13fG+gkZfd2DJmRaDAtnamcCGM4AThzoUN9XBdxc24uMLEzBb0/mJ4vpMK9+WTNIdMmzl+Tg== - dependencies: - "@angular-devkit/architect" "0.1100.4" - "@angular-devkit/core" "11.0.4" - "@angular-devkit/schematics" "11.0.4" - "@schematics/angular" "11.0.4" - "@schematics/update" "0.1100.4" + version "11.0.5" + resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-11.0.5.tgz#1066d290fc91460f98cedcfbc9a5736340661467" + integrity sha512-k4j/2z7qkuigJ1shH0McW1wW63clhrbrg98FK4/KWhU/sce5AgVjuHDQFycAclTwHesf7Vs6Gzt7zGlqUmeKIg== + dependencies: + "@angular-devkit/architect" "0.1100.5" + "@angular-devkit/core" "11.0.5" + "@angular-devkit/schematics" "11.0.5" + "@schematics/angular" "11.0.5" + "@schematics/update" "0.1100.5" "@yarnpkg/lockfile" "1.1.0" ansi-colors "4.1.1" debug "4.2.0" - ini "1.3.5" + ini "1.3.6" inquirer "7.3.3" npm-package-arg "8.1.0" npm-pick-manifest "6.1.0" @@ -389,9 +382,9 @@ uuid "8.3.1" "@angular/common@~11.0.0": - version "11.0.4" - resolved "https://registry.yarnpkg.com/@angular/common/-/common-11.0.4.tgz#39cd88bfcecd895419c059c366eac2df2ca6a2e9" - integrity sha512-4R2ALj71J6EAHVCKNnHHCKL7wcosMsv3gcMXbMTE+Wpzo3khEhM0Tej+I1qmMbVmGXVlRb//4+rjE4gff6FvQw== + version "11.0.5" + resolved "https://registry.yarnpkg.com/@angular/common/-/common-11.0.5.tgz#7ec508cb7e14cf38640fe4e1c0fa3dd322a52505" + integrity sha512-aoXdTkoni65LWhrPKNsAiOnO70XFaTaisO+K8ZYMpciMTTAxHx3hFCF9sj4a+Bo3M1a5UDjpsFDYMeGgJOkmFA== dependencies: tslib "^2.0.0" @@ -434,23 +427,23 @@ integrity sha512-6Pxgsrf0qF9iFFqmIcWmjJGkkCaCm6V5QNnxMy2KloO3SDq6QuMVRbN9RtC8Urmo25LP+eZ6ZgYqFYpdD8Hd9w== "@angular/core@~11.0.0": - version "11.0.4" - resolved "https://registry.yarnpkg.com/@angular/core/-/core-11.0.4.tgz#8eebb6a550dc24e4d53f642c8a78a0da2830cd5b" - integrity sha512-860cTMjdCHcvEsHOsTzpg5rThxwVgtnY4yT0SgboWiphrlzX+aNoyN/cCJHxWhmOTRlrl6/+hkeRq95E2BZkKw== + version "11.0.5" + resolved "https://registry.yarnpkg.com/@angular/core/-/core-11.0.5.tgz#b8c448c3cd4f6dae7327cc1ba4ee2aa29c8dbc26" + integrity sha512-XAXWQi7R3ucZXQwx9QK5jSKJeQyRJ53u2dQDpr7R5stzeCy1a5hrNOkZLg9zOTTPcth/6+FrOrRZP9SMdxtw3w== dependencies: tslib "^2.0.0" "@angular/forms@~11.0.0": - version "11.0.4" - resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-11.0.4.tgz#6d77f01ecdf027a78df18d4e6cd3ad8fc8dd49e4" - integrity sha512-Fhfc4buwMZk0WumDvl/X7XBnOKFeTRTJrwKdi8LlhY6o1Og8H4e/f69u9iDJCF3YjU4qC6yGtPp9YpSVCPP7Ew== + version "11.0.5" + resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-11.0.5.tgz#1be90f86b45a3d672eecea249b1d8e5e9f8f0bc3" + integrity sha512-2zB1IuqYNJrjh7Og9J8f/AtjX3NHc3VVbt0rPw35ghqIU3aQLpOichdQ1y5QvMWic1UzZ7SjWXDU7RpKbm4iUA== dependencies: tslib "^2.0.0" "@angular/language-service@~11.0.0": - version "11.0.4" - resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-11.0.4.tgz#0a9c01170be92378f217dea3263c4eb2f8411aaa" - integrity sha512-KtQxVSlZi3SwZEN4E56KHkNTFEYa3FPZfLJFm6WD1dSobFyMwJgvztO08GWSaT4S0ht0NNRD2IRt0XzBYuZkag== + version "11.0.5" + resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-11.0.5.tgz#92499b5f29509142f29ae7af64b049765a7f7050" + integrity sha512-EzGycD9ztTKAZB+kR+masNqCfGmU0vnKd/z33VLmeo9fo41t/YNCEQEEFz/pEl2dEwX/Wjou+3oyTYZIZz2uSA== "@angular/localize@~10.0.10": version "10.0.14" @@ -462,32 +455,32 @@ yargs "15.3.0" "@angular/localize@~11.0.0": - version "11.0.4" - resolved "https://registry.yarnpkg.com/@angular/localize/-/localize-11.0.4.tgz#8f7a36685d97f26d52e3f19d9218e1e2e05a2bb2" - integrity sha512-r0dWvwFvEqQJ/H94rr548S092Hq53RqyMANuFD09CpkWXS6yAWBfArB6mW77PARnicEC0zkbi5qMGACjtSyNtA== + version "11.0.5" + resolved "https://registry.yarnpkg.com/@angular/localize/-/localize-11.0.5.tgz#e770d4ec1b2094822fdb0524516dca6bf39dfd05" + integrity sha512-tvzgRa/t0xCouCPFMurqZImLeWIISUjVEzkcny9P7xaaz0Cw7kSyulc0e8HXf+8oijSJ624YOYUzr7mkPoIfew== dependencies: "@babel/core" "7.8.3" glob "7.1.2" yargs "^16.1.1" "@angular/platform-browser-dynamic@~11.0.0": - version "11.0.4" - resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-11.0.4.tgz#d775f12954db689507ef98a51d8d7ed5763becd4" - integrity sha512-ZOWTZaFfZSHhMy7a0RIxipiZoiobHWrGlq8/YaMrIgzUb9Fv518FeFCCI68BP0/GuyxX74MJmzv4ZgQctKKxXw== + version "11.0.5" + resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-11.0.5.tgz#1e1de1ca429d85eb43b14cd5da90eba4ac95bd76" + integrity sha512-MFjpQcqkHOu8iTUMKVG6vfuOHwrRlgPBvkNucEbtXhTTYNlsw2mprxfUODYEu26EBUAh+FGttu8ZjclUGw4bVg== dependencies: tslib "^2.0.0" "@angular/platform-browser@~11.0.0": - version "11.0.4" - resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-11.0.4.tgz#131db1115943eb9c0191080e200c1e9dbd214d4c" - integrity sha512-+uUCKJgspSghJ3R6Fk0XHA0tolbaRBi8JFS2cY+hi9s27WKB88peGvtsK6RCOPJONY6JdOuhpcZqRN8dKfPi7w== + version "11.0.5" + resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-11.0.5.tgz#b695d2533491f85721612a41d6d3708791bca96c" + integrity sha512-173JZHF3QS78hEscBxFZ/kX8KLjdaDhfAYi4Sh8daIKNUcDcyhqEy7wpAjWmCwdspL1QUtWKCrhZqrEVNGTpvA== dependencies: tslib "^2.0.0" "@angular/router@~11.0.0": - version "11.0.4" - resolved "https://registry.yarnpkg.com/@angular/router/-/router-11.0.4.tgz#324507346c508649135f56e5f2b57c60e0ba7b16" - integrity sha512-B0sqv8zMM6j88+udEZzO8wKBw61pHgWZmLopnAqA65rRPrAvMsvAHUnYqX6w5pYqhJQxCVLVeKM+0QlQh1+WnA== + version "11.0.5" + resolved "https://registry.yarnpkg.com/@angular/router/-/router-11.0.5.tgz#95d47b3b510f6a49597db64cfd7ef936bb24c402" + integrity sha512-mSD4tbzuFH4uBb9vxPQHBUbkIMoWAfVUb7r9gtn3/deOxQbVh08f2gk2iWDN3OQLAa5mNHswuLByAYSw2rPbMA== dependencies: tslib "^2.0.0" @@ -506,10 +499,10 @@ "@ant-design/colors" "^5.0.0" tslib "^2.0.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" - integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.11", "@babel/code-frame@^7.8.3": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== dependencies: "@babel/highlight" "^7.10.4" @@ -591,12 +584,12 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.12.1", "@babel/generator@^7.12.10", "@babel/generator@^7.8.3": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.10.tgz#2b188fc329fb8e4f762181703beffc0fe6df3460" - integrity sha512-6mCdfhWgmqLdtTkhXjnIz0LcdVCd26wS2JXRtj2XY0u5klDsXBREA/pG5NVOuVnF2LUrBGNFtQkIqqTbblg0ww== +"@babel/generator@^7.12.1", "@babel/generator@^7.12.10", "@babel/generator@^7.12.11", "@babel/generator@^7.8.3": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.11.tgz#98a7df7b8c358c9a37ab07a24056853016aba3af" + integrity sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA== dependencies: - "@babel/types" "^7.12.10" + "@babel/types" "^7.12.11" jsesc "^2.5.1" source-map "^0.5.0" @@ -660,16 +653,16 @@ dependencies: "@babel/types" "^7.12.1" -"@babel/helper-function-name@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" - integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== +"@babel/helper-function-name@^7.10.4", "@babel/helper-function-name@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz#1fd7738aee5dcf53c3ecff24f1da9c511ec47b42" + integrity sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA== dependencies: - "@babel/helper-get-function-arity" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" + "@babel/helper-get-function-arity" "^7.12.10" + "@babel/template" "^7.12.7" + "@babel/types" "^7.12.11" -"@babel/helper-get-function-arity@^7.10.4": +"@babel/helper-get-function-arity@^7.12.10": version "7.12.10" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz#b158817a3165b5faa2047825dfa61970ddcc16cf" integrity sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag== @@ -683,7 +676,7 @@ dependencies: "@babel/types" "^7.10.4" -"@babel/helper-member-expression-to-functions@^7.12.1": +"@babel/helper-member-expression-to-functions@^7.12.1", "@babel/helper-member-expression-to-functions@^7.12.7": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz#aa77bd0396ec8114e5e30787efa78599d874a855" integrity sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw== @@ -712,7 +705,7 @@ "@babel/types" "^7.12.1" lodash "^4.17.19" -"@babel/helper-optimise-call-expression@^7.10.4": +"@babel/helper-optimise-call-expression@^7.10.4", "@babel/helper-optimise-call-expression@^7.12.10": version "7.12.10" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz#94ca4e306ee11a7dd6e9f42823e2ac6b49881e2d" integrity sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ== @@ -734,14 +727,14 @@ "@babel/types" "^7.12.1" "@babel/helper-replace-supers@^7.12.1": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz#f009a17543bbbbce16b06206ae73b63d3fca68d9" - integrity sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA== + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz#ea511658fc66c7908f923106dd88e08d1997d60d" + integrity sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA== dependencies: - "@babel/helper-member-expression-to-functions" "^7.12.1" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/traverse" "^7.12.5" - "@babel/types" "^7.12.5" + "@babel/helper-member-expression-to-functions" "^7.12.7" + "@babel/helper-optimise-call-expression" "^7.12.10" + "@babel/traverse" "^7.12.10" + "@babel/types" "^7.12.11" "@babel/helper-simple-access@^7.12.1": version "7.12.1" @@ -757,22 +750,22 @@ dependencies: "@babel/types" "^7.12.1" -"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" - integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== +"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0", "@babel/helper-split-export-declaration@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz#1b4cc424458643c47d37022223da33d76ea4603a" + integrity sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g== dependencies: - "@babel/types" "^7.11.0" + "@babel/types" "^7.12.11" -"@babel/helper-validator-identifier@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" - integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== +"@babel/helper-validator-identifier@^7.10.4", "@babel/helper-validator-identifier@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" + integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== "@babel/helper-validator-option@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz#175567380c3e77d60ff98a54bb015fe78f2178d9" - integrity sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A== + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz#d66cb8b7a3e7fe4c6962b32020a131ecf0847f4f" + integrity sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw== "@babel/helper-wrap-function@^7.10.4": version "7.12.3" @@ -802,15 +795,15 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.12.10", "@babel/parser@^7.12.3", "@babel/parser@^7.12.7", "@babel/parser@^7.8.3": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.10.tgz#824600d59e96aea26a5a2af5a9d812af05c3ae81" - integrity sha512-PJdRPwyoOqFAWfLytxrWwGrAxghCgh/yTNCYciOz8QgjflA7aZhECPZAa2VUedKg2+QMWkI0L9lynh2SNmNEgA== +"@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.12.10", "@babel/parser@^7.12.11", "@babel/parser@^7.12.3", "@babel/parser@^7.12.7", "@babel/parser@^7.8.3": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.11.tgz#9ce3595bcd74bc5c466905e86c535b8b25011e79" + integrity sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg== "@babel/plugin-proposal-async-generator-functions@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz#dc6c1170e27d8aca99ff65f4925bd06b1c90550e" - integrity sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A== + version "7.12.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.12.tgz#04b8f24fd4532008ab4e79f788468fd5a8476566" + integrity sha512-nrz9y0a4xmUrRq51bYkWJIO5SBZyG2ys2qinHsN0zHDHVsUaModrkpyWWWXfGqYQmOL3x9sQIcTNN/pBGpo09A== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-remap-async-to-generator" "^7.12.1" @@ -1036,9 +1029,9 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-block-scoping@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz#f0ee727874b42a208a48a586b84c3d222c2bbef1" - integrity sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w== + version "7.12.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.12.tgz#d93a567a152c22aea3b1929bb118d1d0a175cdca" + integrity sha512-VOEPQ/ExOVqbukuP7BYJtI5ZxxsmegTwzZ04j1aF0dkSypGo9XpDHuOrABsJu+ie+penpSJheDJ11x1BEZNiyQ== dependencies: "@babel/helper-plugin-utils" "^7.10.4" @@ -1387,26 +1380,26 @@ "@babel/types" "^7.12.7" "@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.10", "@babel/traverse@^7.12.5", "@babel/traverse@^7.8.3": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.10.tgz#2d1f4041e8bf42ea099e5b2dc48d6a594c00017a" - integrity sha512-6aEtf0IeRgbYWzta29lePeYSk+YAFIC3kyqESeft8o5CkFlYIMX+EQDDWEiAQ9LHOA3d0oHdgrSsID/CKqXJlg== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.12.10" - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/parser" "^7.12.10" - "@babel/types" "^7.12.10" + version "7.12.12" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.12.tgz#d0cd87892704edd8da002d674bc811ce64743376" + integrity sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w== + dependencies: + "@babel/code-frame" "^7.12.11" + "@babel/generator" "^7.12.11" + "@babel/helper-function-name" "^7.12.11" + "@babel/helper-split-export-declaration" "^7.12.11" + "@babel/parser" "^7.12.11" + "@babel/types" "^7.12.12" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.19" -"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.8.3", "@babel/types@^7.8.6": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.10.tgz#7965e4a7260b26f09c56bcfcb0498af1f6d9b260" - integrity sha512-sf6wboJV5mGyip2hIpDSKsr80RszPinEFjsHTalMxZAZkoQ2/2yQzxlcFN52SJqsyPfLtPmenL4g2KB3KJXPDw== +"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.11", "@babel/types@^7.12.12", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.8.3", "@babel/types@^7.8.6": + version "7.12.12" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.12.tgz#4608a6ec313abbd87afa55004d373ad04a96c299" + integrity sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ== dependencies: - "@babel/helper-validator-identifier" "^7.10.4" + "@babel/helper-validator-identifier" "^7.12.11" lodash "^4.17.19" to-fast-properties "^2.0.0" @@ -2473,12 +2466,12 @@ jquery "3.5.0" replace-in-file "^4.1.3" -"@ngtools/webpack@11.0.4": - version "11.0.4" - resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-11.0.4.tgz#fd80a8b7d648ddb8e56d73404e6b673903d2d365" - integrity sha512-MAV7inQmsMISTnDcXwyRX5oJZx8F7K/tZRLJciQwkM0DqZyq8fI9KDRwBcmYeQ+J0mSJV9LUVdExmpulpkywqw== +"@ngtools/webpack@11.0.5": + version "11.0.5" + resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-11.0.5.tgz#9d1abb9f9a5e72c014b5ed3e0c2cefe2a4175b30" + integrity sha512-hM0LdOSlC6c7ij+BvIpAFbe7dpJhL+A51L5v6YbMA6aM0Sb/y+HpE2u34AHEQvute7cLe4EyOyvJ9jSinVAJhQ== dependencies: - "@angular-devkit/core" "11.0.4" + "@angular-devkit/core" "11.0.5" enhanced-resolve "5.3.1" webpack-sources "2.0.1" @@ -2510,18 +2503,18 @@ dependencies: tslib "^1.9.0" -"@nodelib/fs.scandir@2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" - integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== +"@nodelib/fs.scandir@2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" + integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== dependencies: - "@nodelib/fs.stat" "2.0.3" + "@nodelib/fs.stat" "2.0.4" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" - integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== +"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" + integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== "@nodelib/fs.stat@^1.1.2": version "1.1.3" @@ -2529,11 +2522,11 @@ integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== "@nodelib/fs.walk@^1.2.3": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" - integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== + version "1.2.6" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" + integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== dependencies: - "@nodelib/fs.scandir" "2.1.3" + "@nodelib/fs.scandir" "2.1.4" fastq "^1.6.0" "@npmcli/move-file@^1.0.1": @@ -2559,10 +2552,10 @@ is-plain-object "^5.0.0" universal-user-agent "^6.0.0" -"@octokit/openapi-types@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-2.0.0.tgz#6d8f8ad9db3b75a39115f5def2654df8bed39f28" - integrity sha512-J4bfM7lf8oZvEAdpS71oTvC1ofKxfEZgU5vKVwzZKi4QPiL82udjpseJwxPid9Pu2FNmyRQOX4iEj6W1iOSnPw== +"@octokit/openapi-types@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-2.0.1.tgz#7453d8281ce66b8ed1607f7ac7d751c3baffd2cc" + integrity sha512-9AuC04PUnZrjoLiw3uPtwGh9FE4Q3rTqs51oNlQ0rkwgE8ftYsOC+lsrQyvCvWm85smBbSc0FNRKKumvGyb44Q== "@octokit/plugin-enterprise-rest@^6.0.1": version "6.0.1" @@ -2651,11 +2644,11 @@ "@types/node" ">= 8" "@octokit/types@^6.0.0", "@octokit/types@^6.0.3": - version "6.1.1" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.1.1.tgz#bc88b3eb5f447b025a2a1a8177a72db216e8d4ca" - integrity sha512-btm3D6S7VkRrgyYF31etUtVY/eQ1KzrNRqhFt25KSe2mKlXuLXJilglRC6eDA2P6ou94BUnk/Kz5MPEolXgoiw== + version "6.1.2" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.1.2.tgz#2b3a6ae0b8b71c27c770b4ff3e9ad8f1f538af58" + integrity sha512-LPCpcLbcky7fWfHCTuc7tMiSHFpFlrThJqVdaHgowBTMS0ijlZFfonQC/C1PrZOjD4xRCYgBqH9yttEATGE/nw== dependencies: - "@octokit/openapi-types" "^2.0.0" + "@octokit/openapi-types" "^2.0.1" "@types/node" ">= 8" "@rollup/plugin-commonjs@^15.0.0": @@ -2699,13 +2692,13 @@ estree-walker "^1.0.1" picomatch "^2.2.2" -"@schematics/angular@11.0.4": - version "11.0.4" - resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-11.0.4.tgz#36268ebda718c4f395457d2eea874fda9c469402" - integrity sha512-LwBD9TIoLy9XqqInJvlN4BHtPyJExyeorNiOp6rXb/wafuDbvZ+9kY9GWZTY1auVo5PNKqErfxr74ydA3FFb9g== +"@schematics/angular@11.0.5": + version "11.0.5" + resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-11.0.5.tgz#149f908fd600e881ff87c5192d2673d0e3c37f38" + integrity sha512-7p2wweoJYhim8YUy3ih1SrPGqRsa6+aEFbYgo9v4zt7b3tOva8SvkbC2alayK74fclzQ7umqa6xAwvWhy8ORvg== dependencies: - "@angular-devkit/core" "11.0.4" - "@angular-devkit/schematics" "11.0.4" + "@angular-devkit/core" "11.0.5" + "@angular-devkit/schematics" "11.0.5" jsonc-parser "2.3.1" "@schematics/angular@~10.0.5": @@ -2724,15 +2717,15 @@ "@angular-devkit/core" "10.1.7" "@angular-devkit/schematics" "10.1.7" -"@schematics/update@0.1100.4": - version "0.1100.4" - resolved "https://registry.yarnpkg.com/@schematics/update/-/update-0.1100.4.tgz#b67efdb39396ddcacef97de008100944af3d1556" - integrity sha512-YwFtgxCQQkYC89IC7dfshyGr0roE6bpp5HgpQLdS/AOjHeZKo7/SPdM0W4ddB+Fml1Fo6v4eFG/Ia9oR7qNv1A== +"@schematics/update@0.1100.5": + version "0.1100.5" + resolved "https://registry.yarnpkg.com/@schematics/update/-/update-0.1100.5.tgz#40b529d93db51e6f66378bd9f4ff99f2e9c278f6" + integrity sha512-BYtKKuiWsrlc4FMW3bRyl4tm6lWNMTi8oql/mtkSgH7V5eMmaLDJtM+zDl+qyC/KHPxbHTfoHDapfv1tITSWjA== dependencies: - "@angular-devkit/core" "11.0.4" - "@angular-devkit/schematics" "11.0.4" + "@angular-devkit/core" "11.0.5" + "@angular-devkit/schematics" "11.0.5" "@yarnpkg/lockfile" "1.1.0" - ini "1.3.5" + ini "1.3.6" npm-package-arg "^8.0.0" pacote "9.5.12" semver "7.3.2" @@ -2930,14 +2923,14 @@ integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== "@types/node@*", "@types/node@>= 8": - version "14.14.13" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.13.tgz#9e425079799322113ae8477297ae6ef51b8e0cdf" - integrity sha512-vbxr0VZ8exFMMAjCW8rJwaya0dMCDyYW2ZRdTyjtrCvJoENMpdUHOT/eTzvgyA5ZnqRZ/sI0NwqAxNHKYokLJQ== + version "14.14.19" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.19.tgz#5135176a8330b88ece4e9ab1fdcfc0a545b4bab4" + integrity sha512-4nhBPStMK04rruRVtVc6cDqhu7S9GZai0fpXgPXrFpcPX6Xul8xnrjSdGB4KPBVYG/R5+fXWdCM8qBoiULWGPQ== "@types/node@^12.11.1": - version "12.19.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.9.tgz#990ad687ad8b26ef6dcc34a4f69c33d40c95b679" - integrity sha512-yj0DOaQeUrk3nJ0bd3Y5PeDRJ6W0r+kilosLA+dzF3dola/o9hxhMSg2sFvVcA2UHS5JSOsZp4S0c1OEXc4m1Q== + version "12.19.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.11.tgz#9220ab4b20d91169eb78f456dbfcbabee89dfb50" + integrity sha512-bwVfNTFZOrGXyiQ6t4B9sZerMSShWNsGRw8tC5DY1qImUNczS9SjT4G6PnzjCnxsu5Ubj6xjL2lgwddkxtQl5w== "@types/node@^8.0.31": version "8.10.66" @@ -3015,9 +3008,9 @@ source-map "^0.6.1" "@types/yargs-parser@*": - version "15.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" - integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== + version "20.2.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9" + integrity sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA== "@types/yargs@^13.0.0": version "13.0.11" @@ -3027,9 +3020,9 @@ "@types/yargs-parser" "*" "@types/yargs@^15.0.0": - version "15.0.11" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.11.tgz#361d7579ecdac1527687bcebf9946621c12ab78c" - integrity sha512-jfcNBxHFYJ4nPIacsi3woz1+kvUO6s1CyeEhtnDHBjHUMNj5UlW2GynmnSgiJJEdNg9yW5C8lfoNRZrHGv5EqA== + version "15.0.12" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.12.tgz#6234ce3e3e3fa32c5db301a170f96a599c960d74" + integrity sha512-f+fD/fQAo3BCbCDlrUpznF1A5Zp9rB0noS5vnoormHSIPFKL0Z2DcUJ3Gxp5ytH4uLRNxy7AwYUC9exZzqGMAw== dependencies: "@types/yargs-parser" "*" @@ -3761,7 +3754,7 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -base64-js@^1.0.2: +base64-js@^1.0.2, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -3818,6 +3811,15 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" +bl@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489" + integrity sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + blocking-proxy@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/blocking-proxy/-/blocking-proxy-1.0.1.tgz#81d6fd1fe13a4c0d6957df7f91b75e98dac40cb2" @@ -3987,7 +3989,7 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.15.0, browserslist@^4.7.0, browserslist@^4.9.1: +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.0, browserslist@^4.7.0, browserslist@^4.9.1: version "4.16.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.0.tgz#410277627500be3cb28a1bfe037586fbedf9488b" integrity sha512-/j6k8R0p3nxOC6kx5JGAxsnhc9ixaWJfYc+TNTzxg6+ARaESAvQGV7h0uNOB4t+pLQJZWzcrMxXOxjgsCj3dqQ== @@ -4048,15 +4050,23 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= builtin-modules@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" - integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== + version "3.2.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" + integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== builtin-status-codes@^3.0.0: version "3.0.0" @@ -4264,9 +4274,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001032, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001165: - version "1.0.30001166" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001166.tgz#ca73e8747acfd16a4fd6c4b784f1b995f9698cf8" - integrity sha512-nCL4LzYK7F4mL0TjEMeYavafOGnBa98vTudH5c8lW9izUjnB99InG6pmC1ElAI1p0GlyZajv4ltUdFXvOHIl1A== + version "1.0.30001173" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001173.tgz#3c47bbe3cd6d7a9eda7f50ac016d158005569f56" + integrity sha512-R3aqmjrICdGCTAnSXtNyvWYMK3YtV5jwudbq0T7nN9k4kmE4CBuwPqyJ+KBzepSTh0huivV2gLbSMEzTTmfeYw== canonical-path@1.0.0: version "1.0.0" @@ -4447,7 +4457,7 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-spinners@^2.0.0, cli-spinners@^2.2.0, cli-spinners@^2.4.0: +cli-spinners@^2.0.0, cli-spinners@^2.2.0, cli-spinners@^2.4.0, cli-spinners@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.5.0.tgz#12763e47251bf951cb75c201dfa58ff1bcb2d047" integrity sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ== @@ -4829,16 +4839,16 @@ conventional-changelog-core@^3.1.6: through2 "^3.0.0" conventional-changelog-core@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.2.1.tgz#f811ad98ab2ff080becafc61407509420c9b447d" - integrity sha512-8cH8/DEoD3e5Q6aeogdR5oaaKs0+mG6+f+Om0ZYt3PNv7Zo0sQhu4bMDRsqAF+UTekTAtP1W/C41jH/fkm8Jtw== + version "4.2.2" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.2.2.tgz#f0897df6d53b5d63dec36b9442bd45354f8b3ce5" + integrity sha512-7pDpRUiobQDNkwHyJG7k9f6maPo9tfPzkSWbRq97GGiZqisElhnvUZSvyQH20ogfOjntB5aadvv6NNcKL1sReg== dependencies: add-stream "^1.0.0" conventional-changelog-writer "^4.0.18" conventional-commits-parser "^3.2.0" dateformat "^3.0.0" get-pkg-repo "^1.0.0" - git-raw-commits "2.0.0" + git-raw-commits "^2.0.8" git-remote-origin-url "^2.0.0" git-semver-tags "^4.1.1" lodash "^4.17.15" @@ -4891,9 +4901,9 @@ conventional-changelog-preset-loader@^2.1.1, conventional-changelog-preset-loade integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== conventional-changelog-writer@^4.0.18, conventional-changelog-writer@^4.0.6: - version "4.0.18" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.18.tgz#10b73baa59c7befc69b360562f8b9cd19e63daf8" - integrity sha512-mAQDCKyB9HsE8Ko5cCM1Jn1AWxXPYV0v8dFPabZRkvsiWUul2YyAqbIaoMKF88Zf2ffnOPSvKhboLf3fnjo5/A== + version "4.1.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.1.0.tgz#1ca7880b75aa28695ad33312a1f2366f4b12659f" + integrity sha512-WwKcUp7WyXYGQmkLsX4QmU42AZ1lqlvRW9mqoyiQzdD+rJWbTepdWoKJuwXTS+yq79XKnQNa93/roViPQrAQgw== dependencies: compare-func "^2.0.0" conventional-commits-filter "^2.0.7" @@ -4990,6 +5000,13 @@ cookie@0.4.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== +copy-anything@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-2.0.1.tgz#2afbce6da684bdfcbec93752fa762819cb480d9a" + integrity sha512-lA57e7viQHOdPQcrytv5jFeudZZOXuyk47lZym279FiDQ8jeZomXiGuVf6ffMKkJ+3TIai3J1J3yi6M+/4U35g== + dependencies: + is-what "^3.7.1" + copy-concurrently@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" @@ -5025,11 +5042,11 @@ copy-webpack-plugin@6.2.1: webpack-sources "^1.4.3" core-js-compat@^3.6.2: - version "3.8.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.1.tgz#8d1ddd341d660ba6194cbe0ce60f4c794c87a36e" - integrity sha512-a16TLmy9NVD1rkjUGbwuyWkiDoN0FDpAwrfLONvHFQx0D9k7J9y0srwMT8QP/Z6HE3MIFaVynEeYwZwPX1o5RQ== + version "3.8.2" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.2.tgz#3717f51f6c3d2ebba8cbf27619b57160029d1d4c" + integrity sha512-LO8uL9lOIyRRrQmZxHZFl1RV+ZbcsAkFWTktn5SmH40WgLtSNYN4m4W2v9ONT147PxBY/XrRhrWq8TlvObyUjQ== dependencies: - browserslist "^4.15.0" + browserslist "^4.16.0" semver "7.0.0" core-js@3.6.5: @@ -5398,6 +5415,11 @@ dargs@^4.0.1: dependencies: number-is-nan "^1.0.0" +dargs@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" + integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -5811,9 +5833,9 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.3.621: - version "1.3.626" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.626.tgz#48acdf322be07feb2c1330ba05e4bf6327f721a3" - integrity sha512-7CanEvJx74EnvjHu1X8gf93KieyxvFLnqOXAH/ddjWD4RrUZYqdg3pykrQ/7t6SLI7DTsp4tfQXEfzeK5t6oAw== + version "1.3.633" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.633.tgz#16dd5aec9de03894e8d14a1db4cda8a369b9b7fe" + integrity sha512-bsVCsONiVX1abkWdH7KtpuDAhsQ3N3bjPYhROSAXE78roJKet0Y5wznA14JE9pzbwSZmSMAW6KiKYf1RvbTJkA== elliptic@^6.5.3: version "6.5.3" @@ -5905,9 +5927,9 @@ err-code@^1.0.0: integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= errno@^0.1.1, errno@^0.1.3, errno@~0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== dependencies: prr "~1.0.1" @@ -6349,9 +6371,9 @@ fastparse@^1.1.2: integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== fastq@^1.6.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.9.0.tgz#e16a72f338eaca48e91b5c23593bcc2ef66b7947" - integrity sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w== + version "1.10.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.10.0.tgz#74dbefccade964932cdf500473ef302719c652bb" + integrity sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA== dependencies: reusify "^1.0.4" @@ -6691,9 +6713,9 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-intrinsic@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.1.tgz#94a9768fcbdd0595a1c9273aacf4c89d075631be" - integrity sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg== + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.2.tgz#6820da226e50b24894e08859469dc68361545d49" + integrity sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg== dependencies: function-bind "^1.1.1" has "^1.0.3" @@ -6762,6 +6784,17 @@ git-raw-commits@2.0.0: split2 "^2.0.0" through2 "^2.0.0" +git-raw-commits@^2.0.8: + version "2.0.9" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.9.tgz#5cbc707a615cb77b71e687f8a1ee54af46208b22" + integrity sha512-hSpNpxprVno7IOd4PZ93RQ+gNdzPAIrW0x8av6JQDJGV4k1mR9fE01dl8sEqi2P7aKmmwiGUn1BCPuf16Ae0Qw== + dependencies: + dargs "^7.0.0" + lodash.template "^4.0.2" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" + git-remote-origin-url@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" @@ -7155,9 +7188,9 @@ html-encoding-sniffer@^1.0.2: whatwg-encoding "^1.0.1" html-entities@^1.3.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.3.tgz#3dca638a43ee7de316fc23067398491152ad4736" - integrity sha512-/VulV3SYni1taM7a4RMdceqzJWR39gpZHjBwUnsCFKWV/GJkD14CJ5F7eWcZozmHJK0/f/H5U3b3SiPkuvxMgg== + version "1.4.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" + integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== html-escaper@^2.0.0: version "2.0.2" @@ -7212,9 +7245,9 @@ http-errors@~1.7.2: toidentifier "1.0.0" http-parser-js@>=0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" - integrity sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ== + version "0.5.3" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" + integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== http-proxy-agent@^2.1.0: version "2.1.0" @@ -7306,7 +7339,7 @@ icss-utils@^4.0.0, icss-utils@^4.1.1: dependencies: postcss "^7.0.14" -ieee754@^1.1.4: +ieee754@^1.1.13, ieee754@^1.1.4: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -7352,9 +7385,9 @@ import-fresh@^2.0.0: resolve-from "^3.0.0" import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.2.tgz#fc129c160c5d68235507f4331a6baad186bdbc3e" - integrity sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw== + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" @@ -7430,10 +7463,10 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== +ini@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.6.tgz#f1c46a2a93a253e7b3905115e74d527cd23061a1" + integrity sha512-IZUoxEjNjubzrmvzZU4lKP7OnYmX72XRl3sqkfJhBKweKi5rnGi5+IUdlj/H1M+Ip5JQ1WzaDMOBRY90Ajc5jg== ini@^1.3.2, ini@^1.3.4: version "1.3.8" @@ -7894,6 +7927,11 @@ is-utf8@^0.2.0, is-utf8@^0.2.1: resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= +is-what@^3.7.1: + version "3.12.0" + resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.12.0.tgz#f4405ce4bd6dd420d3ced51a026fb90e03705e55" + integrity sha512-2ilQz5/f/o9V7WRWJQmpFYNmQFZ9iM+OXRonZKcYgTkCzjb949Vi4h282PD1UfmgHk666rcWonbRJ++KI41VGw== + is-windows@^1.0.0, is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -8708,10 +8746,11 @@ less@3.12.2: source-map "~0.6.0" less@^3.10.3: - version "3.13.0" - resolved "https://registry.yarnpkg.com/less/-/less-3.13.0.tgz#6a47bb19d97edcf7a53d444b099275dd6b17c85a" - integrity sha512-uPhr9uoSGVKKYVGz0rXcYBK1zjwcIWRGcbnSgNt66XuIZYrYPaQiS+LeUOvqedBwrwdBYYaLqSff5ytGYuT7rA== + version "3.13.1" + resolved "https://registry.yarnpkg.com/less/-/less-3.13.1.tgz#0ebc91d2a0e9c0c6735b83d496b0ab0583077909" + integrity sha512-SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw== dependencies: + copy-anything "^2.0.1" tslib "^1.10.0" optionalDependencies: errno "^0.1.1" @@ -9141,9 +9180,9 @@ meow@^4.0.0: trim-newlines "^2.0.0" meow@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-8.0.0.tgz#1aa10ee61046719e334ffdc038bb5069250ec99a" - integrity sha512-nbsTRz2fwniJBFgUkcdISq8y/q9n9VbiHYbfwklFh5V4V2uAcxtKQkDc0yCLPM/kP0d+inZBewn3zJqewHE7kg== + version "8.1.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.0.tgz#0fcaa267e35e4d58584b8205923df6021ddcc7ba" + integrity sha512-fNWkgM1UVMey2kf24yLiccxLihc5W+6zVus3/N0b+VfnJgxV99E9u04X6NAiKdg6ED7DAQBX5sy36NM0QJZkWA== dependencies: "@types/minimist" "^1.2.0" camelcase-keys "^6.2.2" @@ -9224,22 +9263,17 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.44.0: - version "1.44.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" - integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== - -"mime-db@>= 1.43.0 < 2": +mime-db@1.45.0, "mime-db@>= 1.43.0 < 2": version "1.45.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.27" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" - integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + version "2.1.28" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd" + integrity sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ== dependencies: - mime-db "1.44.0" + mime-db "1.45.0" mime@1.6.0, mime@^1.4.1: version "1.6.0" @@ -9247,9 +9281,9 @@ mime@1.6.0, mime@^1.4.1: integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mime@^2.3.1, mime@^2.4.4: - version "2.4.6" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" - integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== + version "2.4.7" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.7.tgz#962aed9be0ed19c91fd7dc2ece5d7f4e89a90d74" + integrity sha512-dhNd1uA2u397uQk3Nv5LM4lm93WYDUXFn3Fu291FJerns4jyTudqhIWe4W04YLy7Uk1tm1Ore04NpjRvQp/NPA== mimic-fn@^1.0.0: version "1.2.0" @@ -9589,9 +9623,9 @@ ng-packagr@^11.0.1: terser "^5.0.0" ng-zorro-antd@^10.1.1: - version "10.2.1" - resolved "https://registry.yarnpkg.com/ng-zorro-antd/-/ng-zorro-antd-10.2.1.tgz#06d9c2db7f92bdd560c98c201114b2fc2318af23" - integrity sha512-G1w/Gs2Qgsoyf9c+t1uyQkZ07ayiOoH4waS8CP+IEvlCe0fZ02V0IFjS6NLrTpDxw7qDBIykI+qcWEY14GIF8A== + version "10.2.2" + resolved "https://registry.yarnpkg.com/ng-zorro-antd/-/ng-zorro-antd-10.2.2.tgz#5951f1fd5d1e405e7fe983756dca1eb942b255de" + integrity sha512-4Q2G6DtRJnEQXFcIEUyqgFi6JXcEF9bN0zOPNBV7LTNgjOf31QiE+3Pu2ifz8esGVwv7vmG8if8V2/Ha/Ol8Dw== dependencies: "@angular/cdk" "^10.2.4" "@ant-design/icons-angular" "^10.0.0" @@ -10085,7 +10119,7 @@ ora@5.0.0: strip-ansi "^6.0.0" wcwidth "^1.0.1" -ora@5.1.0, ora@^5.1.0: +ora@5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/ora/-/ora-5.1.0.tgz#b188cf8cd2d4d9b13fd25383bc3e5cba352c94f8" integrity sha512-9tXIMPvjZ7hPTbk8DFq1f7Kow/HU/pQYB60JbNq+QnGwcyhWVZaQ4hM9zQDEsPxw/muLpgiHSaumUZxCAmod/w== @@ -10111,6 +10145,20 @@ ora@^3.4.0: strip-ansi "^5.2.0" wcwidth "^1.0.1" +ora@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.2.0.tgz#de10bfd2d15514384af45f3fa9d9b1aaf344fda1" + integrity sha512-+wG2v8TUU8EgzPHun1k/n45pXquQ9fHnbXVetl9rRgO6kjZszGGbraF3XPTIdgeA+s1lbRjSEftAnyT0w8ZMvQ== + dependencies: + bl "^4.0.3" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + log-symbols "^4.0.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + original@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" @@ -11371,7 +11419,7 @@ read@1, read@~1.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -"readable-stream@2 || 3", readable-stream@3, readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.6.0: +"readable-stream@2 || 3", readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -11921,9 +11969,9 @@ sass@1.27.0: chokidar ">=2.0.0 <4.0.0" sass@^1.23.0: - version "1.30.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.30.0.tgz#60bbbbaf76ba10117e61c6c24f00161c3d60610e" - integrity sha512-26EUhOXRLaUY7+mWuRFqGeGGNmhB1vblpTENO1Z7mAzzIZeVxZr9EZoaY1kyGLFWdSOZxRMAufiN2mkbO6dAlw== + version "1.32.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.32.0.tgz#10101a026c13080b14e2b374d4e15ee24400a4d3" + integrity sha512-fhyqEbMIycQA4blrz/C0pYhv2o4x2y6FYYAH0CshBw3DXh5D5wyERgxw0ptdau1orc/GhNrhF7DFN2etyOCEng== dependencies: chokidar ">=2.0.0 <4.0.0" @@ -12442,6 +12490,13 @@ split2@^2.0.0: dependencies: through2 "^2.0.2" +split2@^3.0.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" + split@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" @@ -13350,9 +13405,9 @@ typescript@^3.5.2, typescript@~3.9.2: integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== uglify-js@^3.1.4: - version "3.12.1" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.12.1.tgz#78307f539f7b9ca5557babb186ea78ad30cc0375" - integrity sha512-o8lHP20KjIiQe5b/67Rh68xEGRrc2SRsCuuoYclXXoC74AfSRGblU1HKzJWH3HxPZ+Ort85fWHpSX7KwBUC9CQ== + version "3.12.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.12.4.tgz#93de48bb76bb3ec0fc36563f871ba46e2ee5c7ee" + integrity sha512-L5i5jg/SHkEqzN18gQMTWsZk3KelRsfD1wUVNqtq0kzqWQqcJjyL8yc1o8hJgRrWqrAl2mUFbhfznEIoi7zi2A== uid-number@0.0.6: version "0.0.6" @@ -13702,7 +13757,7 @@ webidl-conversions@^4.0.2: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -webpack-dev-middleware@3.7.2, webpack-dev-middleware@^3.7.2: +webpack-dev-middleware@3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== @@ -13713,6 +13768,17 @@ webpack-dev-middleware@3.7.2, webpack-dev-middleware@^3.7.2: range-parser "^1.2.1" webpack-log "^2.0.0" +webpack-dev-middleware@^3.7.2: + version "3.7.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" + integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + webpack-dev-server@3.11.0: version "3.11.0" resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c" @@ -14015,9 +14081,9 @@ ws@^6.2.1: async-limiter "~1.0.0" ws@^7.0.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.1.tgz#a333be02696bd0e54cea0434e21dcc8a9ac294bb" - integrity sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ== + version "7.4.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.2.tgz#782100048e54eb36fe9843363ab1c68672b261dd" + integrity sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA== xml-name-validator@^3.0.0: version "3.0.0" From 46370ade6f8c775d73be7c851b6eb8d56c19c4eb Mon Sep 17 00:00:00 2001 From: PM Extra Date: Tue, 5 Jan 2021 17:55:05 +0800 Subject: [PATCH 198/217] Update npm/ng-packs/packages/schematics/src/utils/text.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit escape single quote Co-authored-by: Levent Arman Özak --- npm/ng-packs/packages/schematics/src/utils/text.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/schematics/src/utils/text.ts b/npm/ng-packs/packages/schematics/src/utils/text.ts index e2ceeb1215..9949b490bf 100644 --- a/npm/ng-packs/packages/schematics/src/utils/text.ts +++ b/npm/ng-packs/packages/schematics/src/utils/text.ts @@ -10,8 +10,8 @@ export const macro = (text: string) => upper(snake(text)); export const dir = (text: string) => strings.dasherize(text.replace(/\./g, '/').replace(/\/\//g, '/')); -// TODO: Is there a standard function to do this? There is a leak if the value contains single quote. -export const quote = (value: number | string) => typeof value === 'string' ? `'${value}'` : value; +export const quote = (value: number | string) => + typeof value === 'string' ? `'${value.replace(/'/g, `\\'`)}'` : value; function _(text: string): string { return text.replace(/\./g, '_'); From 1e3afa8d421995b8c324cfa84323d2606d2413fa Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 5 Jan 2021 12:56:21 +0300 Subject: [PATCH 199/217] modify time output log --- npm/publish.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm/publish.ps1 b/npm/publish.ps1 index 22ac73810d..2342db1334 100644 --- a/npm/publish.ps1 +++ b/npm/publish.ps1 @@ -50,6 +50,6 @@ foreach ($command in $commands) { $timer.Stop() $total = $timer.Elapsed Write-Output "-------------------------" - Write-Output "$command command took $total (Hours:Minutes:Seconds:Milliseconds)" + Write-Output "$command command took $total (Hours:Minutes:Seconds.Milliseconds)" Write-Output "-------------------------" } \ No newline at end of file From 4a253fc1b9be836d718a4369a9aee0d7f08e4677 Mon Sep 17 00:00:00 2001 From: PM Extra Date: Tue, 5 Jan 2021 18:01:19 +0800 Subject: [PATCH 200/217] Fix for lint. --- npm/ng-packs/packages/schematics/src/utils/text.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/schematics/src/utils/text.ts b/npm/ng-packs/packages/schematics/src/utils/text.ts index 9949b490bf..e24129beff 100644 --- a/npm/ng-packs/packages/schematics/src/utils/text.ts +++ b/npm/ng-packs/packages/schematics/src/utils/text.ts @@ -11,7 +11,7 @@ export const dir = (text: string) => strings.dasherize(text.replace(/\./g, '/').replace(/\/\//g, '/')); export const quote = (value: number | string) => - typeof value === 'string' ? `'${value.replace(/'/g, `\\'`)}'` : value; + typeof value === 'string' ? `'${value.replace(/'/g, '\\\'')}'` : value; function _(text: string): string { return text.replace(/\./g, '_'); From 47046effc6823ca0385741482f781765a426e82d Mon Sep 17 00:00:00 2001 From: Mehmet Erim <34455572+mehmet-erim@users.noreply.github.com> Date: Tue, 5 Jan 2021 13:09:52 +0300 Subject: [PATCH 201/217] Update CLI.md --- docs/en/CLI.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/CLI.md b/docs/en/CLI.md index d51dd91b5d..82f527e3a6 100644 --- a/docs/en/CLI.md +++ b/docs/en/CLI.md @@ -218,7 +218,7 @@ abp get-source Volo.Blogging --local-framework-ref --abp-path D:\GitHub\abp * `--output-folder` or `-o`: Specifies the directory that source code will be downloaded in. If not specified, current directory is used. * `--version` or `-v`: Specifies the version of the source code that will be downloaded. If not specified, latest version is used. * `--preview`: If no version option is specified, this option specifies if latest [preview version](Previews.md) will be used instead of latest stable version. -* `-- local-framework-ref --abp-path`: Path of [ABP Framework GitHub repository](https://github.com/abpframework/abp) in your computer. This will be used for converting project references to your local system. If this is not specified, project references will be converted to NuGet references. +* `--local-framework-ref --abp-path`: Path of [ABP Framework GitHub repository](https://github.com/abpframework/abp) in your computer. This will be used for converting project references to your local system. If this is not specified, project references will be converted to NuGet references. ### generate-proxy @@ -418,4 +418,4 @@ abp bundle [options] * ```--working-directory``` or ```-wd```: Specifies the working directory. This option is useful when executing directory doesn't contain a Blazor project file. * ```--force``` or ```-f```: Forces to build project before generating references. -For more details about managing style and script references in Blazor apps, see [Managing Global Scripts & Styles](UI/Blazor/Global-Scripts-Styles.md) \ No newline at end of file +For more details about managing style and script references in Blazor apps, see [Managing Global Scripts & Styles](UI/Blazor/Global-Scripts-Styles.md) From a3ceb85e8a4a1a8ff538d29b3698368d9cc2864c Mon Sep 17 00:00:00 2001 From: muhammedaltug Date: Tue, 5 Jan 2021 14:11:38 +0300 Subject: [PATCH 202/217] Add injection token for loader delay http wait service addFilter and removeFilter methods can accept array payload --- .../core/src/lib/services/http-wait.service.ts | 14 +++++++++----- .../components/loader-bar/loader-bar.component.ts | 6 ++++-- .../packages/theme-shared/src/lib/models/common.ts | 1 + .../theme-shared/src/lib/theme-shared.module.ts | 9 +++++++-- .../packages/theme-shared/src/lib/tokens/index.ts | 1 + .../src/lib/tokens/lodaer-delay.token.ts | 3 +++ 6 files changed, 25 insertions(+), 9 deletions(-) create mode 100644 npm/ng-packs/packages/theme-shared/src/lib/tokens/lodaer-delay.token.ts diff --git a/npm/ng-packs/packages/core/src/lib/services/http-wait.service.ts b/npm/ng-packs/packages/core/src/lib/services/http-wait.service.ts index a74a9bb08d..a981ac400a 100644 --- a/npm/ng-packs/packages/core/src/lib/services/http-wait.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/http-wait.service.ts @@ -54,17 +54,21 @@ export class HttpWaitService { this.store.patch({ requests }); } - addFilter(request: HttpRequestInfo) { + addFilter(request: HttpRequestInfo | HttpRequestInfo[]) { + const requests = Array.isArray(request) ? request : [request]; const filteredRequests = [ - ...this.store.state.filteredRequests.filter(f => !this.isSameRequest(f, request)), - request, + ...this.store.state.filteredRequests.filter( + f => !requests.some(r => this.isSameRequest(f, r)), + ), + ...requests, ]; this.store.patch({ filteredRequests }); } - removeFilter(request: HttpRequestInfo) { + removeFilter(request: HttpRequestInfo | HttpRequestInfo[]) { + const requests = Array.isArray(request) ? request : [request]; const filteredRequests = this.store.state.filteredRequests.filter( - f => !this.isSameRequest(f, request), + f => !requests.some(r => this.isSameRequest(f, r)), ); this.store.patch({ filteredRequests }); } diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts index bf08790184..bae858ad09 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts @@ -1,7 +1,8 @@ import { HttpWaitService, RouterWaitService, SubscriptionService } from '@abp/ng.core'; -import { ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core'; +import { ChangeDetectorRef, Component, Inject, Input, OnDestroy, OnInit } from '@angular/core'; import { Router } from '@angular/router'; import { combineLatest, Subscription, timer } from 'rxjs'; +import { LOADER_DELAY } from '../../tokens/lodaer-delay.token'; @Component({ selector: 'abp-loader-bar', @@ -77,8 +78,9 @@ export class LoaderBarComponent implements OnDestroy, OnInit { private subscription: SubscriptionService, private httpWaitService: HttpWaitService, private routerWaiterService: RouterWaitService, + @Inject(LOADER_DELAY) delay: number, ) { - this.httpWaitService.setDelay(500); + this.httpWaitService.setDelay(delay); } ngOnInit() { diff --git a/npm/ng-packs/packages/theme-shared/src/lib/models/common.ts b/npm/ng-packs/packages/theme-shared/src/lib/models/common.ts index 64047e0db7..48c40abfe8 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/models/common.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/models/common.ts @@ -4,6 +4,7 @@ import { Validation } from '@ngx-validate/core'; export interface RootParams { httpErrorConfig: HttpErrorConfig; validation?: Partial; + loaderDelay?: number; } export type ErrorScreenErrorCodes = 401 | 403 | 404 | 500; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts index 037faee882..4aa8ba7d85 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts @@ -34,8 +34,9 @@ import { initLazyStyleHandler } from './handlers/lazy-style.handler'; import { RootParams } from './models/common'; import { THEME_SHARED_ROUTE_PROVIDERS } from './providers/route.provider'; import { THEME_SHARED_APPEND_CONTENT } from './tokens/append-content.token'; -import { httpErrorConfigFactory, HTTP_ERROR_CONFIG } from './tokens/http-error.token'; +import { HTTP_ERROR_CONFIG, httpErrorConfigFactory } from './tokens/http-error.token'; import { DateParserFormatter } from './utils/date-parser-formatter'; +import { LOADER_DELAY } from './tokens/lodaer-delay.token'; const declarationsWithExports = [ BreadcrumbComponent, @@ -77,7 +78,7 @@ export class BaseThemeSharedModule {} }) export class ThemeSharedModule { static forRoot( - { httpErrorConfig, validation = {} } = {} as RootParams, + { httpErrorConfig, validation = {}, loaderDelay = 500 } = {} as RootParams, ): ModuleWithProviders { return { ngModule: ThemeSharedModule, @@ -123,6 +124,10 @@ export class ThemeSharedModule { provide: VALIDATION_VALIDATE_ON_SUBMIT, useValue: validation.validateOnSubmit, }, + { + provide: LOADER_DELAY, + useValue: loaderDelay, + }, ], }; } diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tokens/index.ts b/npm/ng-packs/packages/theme-shared/src/lib/tokens/index.ts index 18a2aac2f6..2065727e3e 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/tokens/index.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/tokens/index.ts @@ -1,4 +1,5 @@ export * from './append-content.token'; export * from './http-error.token'; export * from './lazy-styles.token'; +export * from './lodaer-delay.token'; export * from './suppress-unsaved-changes-warning.token'; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tokens/lodaer-delay.token.ts b/npm/ng-packs/packages/theme-shared/src/lib/tokens/lodaer-delay.token.ts new file mode 100644 index 0000000000..270059e437 --- /dev/null +++ b/npm/ng-packs/packages/theme-shared/src/lib/tokens/lodaer-delay.token.ts @@ -0,0 +1,3 @@ +import { InjectionToken } from '@angular/core'; + +export const LOADER_DELAY = new InjectionToken('LOADER_DELAY'); From d3b2d8b745c67fa3c98c1034f862b3eaa8ff8f6a Mon Sep 17 00:00:00 2001 From: muhammedaltug Date: Tue, 5 Jan 2021 14:30:10 +0300 Subject: [PATCH 203/217] provide loader delay token in testing --- .../src/lib/tests/loader-bar.component.spec.ts | 7 ++++++- .../testing/src/lib/theme-shared-testing.module.ts | 5 +++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tests/loader-bar.component.spec.ts b/npm/ng-packs/packages/theme-shared/src/lib/tests/loader-bar.component.spec.ts index 6d1ab85a46..af1f8d874a 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/tests/loader-bar.component.spec.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/tests/loader-bar.component.spec.ts @@ -4,6 +4,7 @@ import { Subject, timer } from 'rxjs'; import { LoaderBarComponent } from '../components/loader-bar/loader-bar.component'; import { HttpWaitService, SubscriptionService } from '@abp/ng.core'; import { HttpRequest } from '@angular/common/http'; +import { LOADER_DELAY } from '../tokens/lodaer-delay.token'; describe('LoaderBarComponent', () => { let spectator: Spectator; @@ -13,7 +14,11 @@ describe('LoaderBarComponent', () => { const createComponent = createComponentFactory({ component: LoaderBarComponent, detectChanges: false, - providers: [SubscriptionService, { provide: Router, useValue: { events: events$ } }], + providers: [ + SubscriptionService, + { provide: Router, useValue: { events: events$ } }, + { provide: LOADER_DELAY, useValue: 0 }, + ], }); beforeEach(() => { diff --git a/npm/ng-packs/packages/theme-shared/testing/src/lib/theme-shared-testing.module.ts b/npm/ng-packs/packages/theme-shared/testing/src/lib/theme-shared-testing.module.ts index 52abb12ffe..629ebaad79 100644 --- a/npm/ng-packs/packages/theme-shared/testing/src/lib/theme-shared-testing.module.ts +++ b/npm/ng-packs/packages/theme-shared/testing/src/lib/theme-shared-testing.module.ts @@ -3,6 +3,7 @@ import { DateParserFormatter, DEFAULT_VALIDATION_BLUEPRINTS, THEME_SHARED_ROUTE_PROVIDERS, + LOADER_DELAY, } from '@abp/ng.theme.shared'; import { ModuleWithProviders, NgModule } from '@angular/core'; import { RouterTestingModule } from '@angular/router/testing'; @@ -46,6 +47,10 @@ export class ThemeSharedTestingModule { provide: VALIDATION_VALIDATE_ON_SUBMIT, useValue: validation.validateOnSubmit, }, + { + provide: LOADER_DELAY, + useValue: 0, + }, ], }; } From 9b615a901ae62cf6cb1158377c1feff9de583f53 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 5 Jan 2021 19:41:07 +0800 Subject: [PATCH 204/217] Update CLI.md --- docs/en/CLI.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/en/CLI.md b/docs/en/CLI.md index 20e21a5545..07cfe5a47b 100644 --- a/docs/en/CLI.md +++ b/docs/en/CLI.md @@ -421,4 +421,3 @@ abp bundle [options] `bundle` command reads the `appsettings.json` file inside the Blazor project for bundling options. For more details about managing style and script references in Blazor apps, see [Managing Global Scripts & Styles](UI/Blazor/Global-Scripts-Styles.md) -For more details about managing style and script references in Blazor apps, see [Managing Global Scripts & Styles](UI/Blazor/Global-Scripts-Styles.md) From 3d196ff127ba576ae884122d980caf8e5dcf280e Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 5 Jan 2021 20:15:50 +0300 Subject: [PATCH 205/217] add verdaccio-container to create real-like test environment --- npm/verdaccio-containers/.gitignore | 2 + npm/verdaccio-containers/README.md | 40 +++++++++++++++ npm/verdaccio-containers/docker-compose.yml | 41 +++++++++++++++ npm/verdaccio-containers/package-lock.json | 50 +++++++++++++++++++ npm/verdaccio-containers/package.json | 16 ++++++ npm/verdaccio-containers/prepare.js | 16 ++++++ .../publish-packages/Dockerfile | 12 +++++ .../publish-packages/entrypoint.sh | 40 +++++++++++++++ npm/verdaccio-containers/serve-app/Dockerfile | 10 ++++ .../serve-app/entrypoint.sh | 21 ++++++++ 10 files changed, 248 insertions(+) create mode 100644 npm/verdaccio-containers/.gitignore create mode 100644 npm/verdaccio-containers/README.md create mode 100644 npm/verdaccio-containers/docker-compose.yml create mode 100644 npm/verdaccio-containers/package-lock.json create mode 100644 npm/verdaccio-containers/package.json create mode 100644 npm/verdaccio-containers/prepare.js create mode 100644 npm/verdaccio-containers/publish-packages/Dockerfile create mode 100644 npm/verdaccio-containers/publish-packages/entrypoint.sh create mode 100644 npm/verdaccio-containers/serve-app/Dockerfile create mode 100644 npm/verdaccio-containers/serve-app/entrypoint.sh diff --git a/npm/verdaccio-containers/.gitignore b/npm/verdaccio-containers/.gitignore new file mode 100644 index 0000000000..784b55966b --- /dev/null +++ b/npm/verdaccio-containers/.gitignore @@ -0,0 +1,2 @@ +publish-packages/abp/ +serve-app/app \ No newline at end of file diff --git a/npm/verdaccio-containers/README.md b/npm/verdaccio-containers/README.md new file mode 100644 index 0000000000..cb4a35fa21 --- /dev/null +++ b/npm/verdaccio-containers/README.md @@ -0,0 +1,40 @@ +## Running containers that publishing packages to the Verdaccio + +### Goal + +We test all templates before the releasing. However, since we test packages without publishing, we may be faced breaking errors. That's why, this compose prepares the real-like test environment. + + +The duty of this compose is to publish the packages to the [Verdaccio](https://verdaccio.org/) (a custom NPM server) running in the container and to serve the Angular pro template (copied from `abp/templates/app/angular` folder) that is consumed these packages from the Verdaccio. + + +### Before starting + +Make sure the [Docker](https://docs.docker.com/get-docker/) and [Docker Compose](https://docs.docker.com/compose/install/) are installed on your PC. + +Before starting, the following command should be run to prepare the environment: + +```bash +npm install && npm run prepare +``` + +### Getting Started + +To build and up the compose, run the following command: + +```bash +docker-compose rm -f && docker-compose build --build-arg next_version="" && docker-compose up +``` + +> Be sure to replace the "" with the version you want published. E.g: 4.1.0 + +This command; +- Removes the containers if worked before +- Builds the containers +- Runs the containers. + +The processes may take 30~ minutes. + +The Angular app will be running when you see the "Listening on http://localhost:4200" log. If you see the log, open the browser and navigate to the http://localhost:4200. + +The running Angular app can connect to the backend that is running on http://localhost:44305. Go to the `abp/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator` folder and run the project to create (or update) the database. Then run the HttpApiHost project which is in the `abp/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds` folder. Then refresh the browser. You'll see the Angular app is working properly. diff --git a/npm/verdaccio-containers/docker-compose.yml b/npm/verdaccio-containers/docker-compose.yml new file mode 100644 index 0000000000..e4abb3362f --- /dev/null +++ b/npm/verdaccio-containers/docker-compose.yml @@ -0,0 +1,41 @@ +version: '3.9' + +services: + verdaccio: + image: verdaccio/verdaccio:4.0 + container_name: 'verdaccio' + networks: + - docker_network + environment: + - VERDACCIO_PORT=4873 + ports: + - '4873:4873' + expose: + - '4873/tcp' + publish: + build: + context: ./publish-packages + dockerfile: Dockerfile + args: + next_version: '' + container_name: 'verdaccio_publish' + networks: + - docker_network + depends_on: + - verdaccio + expose: + - '4872' + app: + build: ./serve-app + container_name: 'verdaccio_app' + networks: + - docker_network + depends_on: + - publish + ports: + - '4200:4200' + expose: + - '4200/tcp' +networks: + docker_network: + driver: bridge diff --git a/npm/verdaccio-containers/package-lock.json b/npm/verdaccio-containers/package-lock.json new file mode 100644 index 0000000000..31f1319658 --- /dev/null +++ b/npm/verdaccio-containers/package-lock.json @@ -0,0 +1,50 @@ +{ + "name": "verdaccio-publish", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + }, + "fs-extra": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", + "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + }, + "dependencies": { + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } + } + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" + } + } +} diff --git a/npm/verdaccio-containers/package.json b/npm/verdaccio-containers/package.json new file mode 100644 index 0000000000..310b896fb9 --- /dev/null +++ b/npm/verdaccio-containers/package.json @@ -0,0 +1,16 @@ +{ + "name": "verdaccio-publish", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "prepare": "node prepare" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "fs-extra": "^9.0.1" + }, + "devDependencies": {} +} diff --git a/npm/verdaccio-containers/prepare.js b/npm/verdaccio-containers/prepare.js new file mode 100644 index 0000000000..d88cc6fe5a --- /dev/null +++ b/npm/verdaccio-containers/prepare.js @@ -0,0 +1,16 @@ +const fse = require('fs-extra'); +const path = require('path') + + +// packages +fse.removeSync(path.join(__dirname, 'publish-packages/abp')) + +fse.removeSync(path.join(__dirname, '../ng-packs/node_modules')) +fse.removeSync(path.join(__dirname, '../ng-packs/scripts/node_modules')) +fse.copySync(path.join(__dirname, '../ng-packs'), path.join(__dirname, 'publish-packages/abp/npm/ng-packs'), {overwrite: true, errorOnExist: false, }) + +// app angular template +fse.removeSync(path.join(__dirname, 'serve-app/app')) + +fse.removeSync(path.join(__dirname, '../../templates/app/angular/node_modules')); +fse.copySync(path.join(__dirname, '../../templates/app/angular'), path.join(__dirname, 'serve-app/app'), {overwrite: true, errorOnExist: false, }) diff --git a/npm/verdaccio-containers/publish-packages/Dockerfile b/npm/verdaccio-containers/publish-packages/Dockerfile new file mode 100644 index 0000000000..77a72bde19 --- /dev/null +++ b/npm/verdaccio-containers/publish-packages/Dockerfile @@ -0,0 +1,12 @@ +FROM node:14 +ARG next_version +ENV next_version=$next_version +RUN mkdir /publish +COPY . /publish +WORKDIR /publish +EXPOSE 4872/tcp + +RUN apt-get update +RUN apt-get install nano +RUN chmod +x ./entrypoint.sh +CMD /bin/bash ./entrypoint.sh \ No newline at end of file diff --git a/npm/verdaccio-containers/publish-packages/entrypoint.sh b/npm/verdaccio-containers/publish-packages/entrypoint.sh new file mode 100644 index 0000000000..f796d3eca6 --- /dev/null +++ b/npm/verdaccio-containers/publish-packages/entrypoint.sh @@ -0,0 +1,40 @@ +#!/bin/bash +echo "v" $next_version " packages to be published to the verdaccio" + + +echo "Waiting for the Verdaccio" +while ! curl -v --silent verdaccio:4873 &> /dev/null +do + printf "%c" "." +done + +var="$(curl -v --silent verdaccio:4873 2>&1 | grep Trying)" +echo $var + +curl -XPUT -H "Content-type: application/json" -d '{ "name": "volo", "password": "123456", "email": "verdaccio@volo.com" }' 'verdaccio:4873/-/user/org.couchdb.user:your_username' + +npx npm-cli-login -u volo -p 123456 -e "verdaccio@volo.com" -r "http://verdaccio:4873" +npm whoami --registry http://verdaccio:4873 + + +cd /publish/abp/npm/ng-packs/scripts + +npm install + +echo "Running the publish script for abp packages" + +npm run publish-packages -- --nextVersion $next_version --skipGit --registry "http://verdaccio:4873" + +cd /publish/abp/npm/ng-packs + +echo '@abp:registry=http://verdaccio:4873' >> .npmrc + +npx npm-check-updates --filter '/^@(abp)\/.*$/' --registry http://verdaccio:4873 --target greatest --packageFile package.json -u + +cd scripts + +npm install + +echo "Running the publish script for abp packages" + +npm run publish-packages -- --nextVersion $next_version --skipGit --registry "http://verdaccio:4873" \ No newline at end of file diff --git a/npm/verdaccio-containers/serve-app/Dockerfile b/npm/verdaccio-containers/serve-app/Dockerfile new file mode 100644 index 0000000000..0f44bc2558 --- /dev/null +++ b/npm/verdaccio-containers/serve-app/Dockerfile @@ -0,0 +1,10 @@ +FROM node:14 +RUN mkdir /app +COPY . /app +WORKDIR /app +EXPOSE 4200/tcp + +RUN apt-get update +RUN apt-get install nano +RUN chmod +x ./entrypoint.sh +CMD /bin/bash ./entrypoint.sh \ No newline at end of file diff --git a/npm/verdaccio-containers/serve-app/entrypoint.sh b/npm/verdaccio-containers/serve-app/entrypoint.sh new file mode 100644 index 0000000000..4d6d71b86b --- /dev/null +++ b/npm/verdaccio-containers/serve-app/entrypoint.sh @@ -0,0 +1,21 @@ +#!/bin/bash +while ping -c1 publish &> /dev/null +do echo "Waiting for publishing to be done"; sleep 10; +done; + +echo "Serving app" + +cd /app/app + +echo "@abp:registry=http://verdaccio:4873" >> .npmrc +echo '@volo:registry=http://verdaccio:4873' >> .npmrc + +npx npm-check-updates --filter '/^@(abp|volo)\/.*$/' --registry http://verdaccio:4873 --target greatest --packageFile package.json -u + +yarn + +yarn ng build --prod + +cd dist/MyProjectName + +npx http-server-spa . index.html 4200 \ No newline at end of file From 720bddf9b9b11953d87c2dd4834ffba3c98f44a2 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 5 Jan 2021 20:16:06 +0300 Subject: [PATCH 206/217] add removed roles tab to users modal --- .../lib/components/users/users.component.html | 37 ++++++++++++++++++- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/identity/src/lib/components/users/users.component.html b/npm/ng-packs/packages/identity/src/lib/components/users/users.component.html index 9963224c2d..97d0616eb3 100644 --- a/npm/ng-packs/packages/identity/src/lib/components/users/users.component.html +++ b/npm/ng-packs/packages/identity/src/lib/components/users/users.component.html @@ -35,8 +35,41 @@ -

- +
+ + +
+ +
From 9a6a6bcfd6ba896f7939f01416d2a38bb6c66aca Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 5 Jan 2021 22:33:35 +0300 Subject: [PATCH 207/217] update entity action extensions document --- .../en/UI/Angular/Entity-Action-Extensions.md | 320 ++++++++---------- .../entity-action-extensions---click-me.gif | Bin 0 -> 162299 bytes ...ntity-action-extensions---custom-modal.gif | Bin 0 -> 380390 bytes 3 files changed, 139 insertions(+), 181 deletions(-) create mode 100644 docs/en/UI/Angular/images/entity-action-extensions---click-me.gif create mode 100644 docs/en/UI/Angular/images/entity-action-extensions---custom-modal.gif diff --git a/docs/en/UI/Angular/Entity-Action-Extensions.md b/docs/en/UI/Angular/Entity-Action-Extensions.md index d46bd8e194..8918bc37a6 100644 --- a/docs/en/UI/Angular/Entity-Action-Extensions.md +++ b/docs/en/UI/Angular/Entity-Action-Extensions.md @@ -4,9 +4,9 @@ Entity action extension system allows you to add a new action to the action menu for an entity. A "Click Me" action was added to the user management page below: -![Entity Action Extension Example: "Click Me!" Action](images/user-action-extension-click-me-ng.png) +Entity Action Extension Example: 'Click Me!' Action -You can take any action (open a modal, make an HTTP API call, redirect to another page... etc) by writing your custom code. You can access to the current entity in your code. +You can take any action (open a modal, make an HTTP API call, redirect to another page... etc) by writing your custom code. You can also access the current entity in your code. ## How to Set Up @@ -17,10 +17,14 @@ In this example, we will add a "Click Me!" action and alert the current row's `u The following code prepares a constant named `identityEntityActionContributors`, ready to be imported and used in your root module: ```js -// entity-action-contributors.ts +// src/app/entity-action-contributors.ts +import { + eIdentityComponents, + IdentityEntityActionContributors, + IdentityUserDto, +} from '@abp/ng.identity'; import { EntityAction, EntityActionList } from '@abp/ng.theme.shared/extensions'; -import { IdentityEntityActionContributors, IdentityUserDto } from '@volo/abp.ng.identity'; const alertUserName = new EntityAction({ text: 'Click Me!', @@ -31,9 +35,7 @@ const alertUserName = new EntityAction({ // See EntityActionOptions in API section for all options }); -export function alertUserNameContributor( - actionList: EntityActionList, -) { +export function alertUserNameContributor(actionList: EntityActionList) { actionList.addTail(alertUserName); } @@ -48,243 +50,199 @@ export const identityEntityActionContributors: IdentityEntityActionContributors The list of actions, conveniently named as `actionList`, is a **doubly linked list**. That is why we have used the `addTail` method, which adds the given value to the end of the list. You may find [all available methods here](../Common/Utils/Linked-List.md). -> **Important Note 1:** AoT compilation does not support function calls in decorator metadata. This is why we have defined `alertUserNameContributor` as an exported function declaration here. Please do not forget exporting your contributor callbacks and forget about lambda functions (a.k.a. arrow functions). Please refer to [AoT metadata errors](https://angular.io/guide/aot-metadata-errors#function-calls-not-supported) for details. - -> **Important Note 2:** Please use one of the following if Ivy is not enabled in your project. Otherwise, you will get an "Expression form not supported." error. - -```js -export const identityEntityActionContributors: IdentityEntityActionContributors = { - 'Identity.UsersComponent': [ alertUserNameContributor ], -}; - -/* OR */ - -const identityContributors: IdentityEntityActionContributors = {}; -identityContributors[eIdentityComponents.Users] = [ alertUserNameContributor ]; -export const identityEntityActionContributors = identityContributors; -``` - ### Step 2. Import and Use Entity Action Contributors Import `identityEntityActionContributors` in your routing module and pass it to the static `forLazy` method of `IdentityModule` as seen below: ```js +// src/app/app-routing.module.ts + +// other imports import { identityEntityActionContributors } from './entity-action-contributors'; const routes: Routes = [ + // other routes + { - path: '', - component: DynamicLayoutComponent, - children: [ - { - path: 'identity', - loadChildren: () => - import('@volo/abp.ng.identity').then(m => - m.IdentityModule.forLazy({ - entityActionContributors: identityEntityActionContributors, - }), - ), - }, - // other child routes - ], - // other routes - } + path: 'identity', + loadChildren: () => + import('@abp/ng.identity').then(m => + m.IdentityModule.forLazy({ + entityActionContributors: identityEntityActionContributors, + }) + ), + }, + + // other routes ]; ``` -That is it, `alertUserName` entity action will be added as the last action on the grid dropdown in the users page (`UsersComponent`) of the `IdentityModule`. +That is it, `alertUserName` entity action will be added as the last action on the grid dropdown in the "Users" page (`UsersComponent`) of the `IdentityModule`. ## How to Place a Custom Modal and Trigger It by Entity Actions -Incase you need to place a custom modal that will be triggered by an entity action, there are two ways to do it: A quick one and an elaborate one. +Let's employ dependency injection to extend the functionality of `IdentityModule` and add a quick view action for the User entity. We will take a lazy-loaded approach. -### The Quick Solution +Entity Action Extension Example: Custom Modal -1. Place your custom modal inside `AppComponent` template. - ```html - - -

-
+1. Create a folder at this path: `src/app/identity-extended` - - - - - - - - - -
- ``` - -2. Add the following inside your `AppComponent` class: - ```js - isModalOpen: boolean; - - openModal(/* may take parameters */) { - /* and set things before showing the modal */ - this.isModalOpen = true; - } - ``` - -3. Add an entity action similar to this: +2. Add an entity action similar to this: ```js - const customModalAction = new EntityAction({ - text: 'Custom Modal Action', + // src/app/identity-extended/entity-action-contributors.ts + + import { + eIdentityComponents, + IdentityEntityActionContributors, + IdentityUserDto, + } from '@abp/ng.identity'; + import { EntityAction, EntityActionList } from '@abp/ng.theme.shared/extensions'; + import { IdentityExtendedComponent } from './identity-extended.component'; + + const quickViewAction = new EntityAction({ + text: 'Quick View', action: data => { - const component = data.getInjected(AppComponent); - component.openModal(/* you may pass parameters */); + const component = data.getInjected(IdentityExtendedComponent); + component.openUserQuickView(data.record); }, }); - ``` - -That should work. However, there is a longer but lazy-loading solution, and we are going to use NGXS for it. -### The Elaborate Solution + export function customModalContributor(actionList: EntityActionList) { + actionList.addTail(quickViewAction); + } -Consider the modal will be displayed in the Identity module. How can we lazy-load it too? + export const identityEntityActionContributors: IdentityEntityActionContributors = { + // enum indicates the page to add contributors to + [eIdentityComponents.Users]: [ + customModalContributor, + // You can add more contributors here + ], + }; + ``` -1. Create a folder called `identity-extended` inside your app folder. -2. Create a file called `identity-popups.store.ts` in it. -3. Insert the following code in the new file: +3. Create a parent component to the identity module. ```js - import { Action, Selector, State, StateContext } from '@ngxs/store'; + // src/app/identity-extended/identity-extended.component.ts - export class ToggleIdentityPopup { - static readonly type = '[IdentityPopups] Toggle'; - constructor(public readonly payload: boolean) {} - } + import { IdentityUserDto } from '@abp/ng.identity'; + import { Component } from '@angular/core'; - @State({ - name: 'IdentityPopups', - defaults: { - isVisible: false, - }, + @Component({ + selector: 'app-identity-extended', + templateUrl: './identity-extended.component.html', }) - export class IdentityPopupsState { - @Selector() - static isVisible(state: IdentityPopupsStateModel) { - return state.isVisible; - } + export class IdentityExtendedComponent { + isUserQuickViewVisible: boolean; + + user: IdentityUserDto; - @Action(ToggleIdentityPopup) - toggleModal( - context: StateContext, - { payload }: ToggleIdentityPopup, - ) { - context.patchState({ isVisible: payload }); + openUserQuickView(record: IdentityUserDto) { + this.user = new Proxy(record, { + get: (target, prop) => target[prop] || '—', + }); + this.isUserQuickViewVisible = true; } } + ``` - interface IdentityPopupsStateModel { - isVisible: boolean; - } +4. Add a router outlet and a modal to the parent component. + ```html + + + + + + +

{{ user.userName }}

+
+ + + + + + + + + + + + + + + + + + + + + +
{{ 'AbpIdentity::DisplayName:Name' | abpLocalization }}{{ user.name }}
{{ 'AbpIdentity::DisplayName:Surname' | abpLocalization }}{{ user.surname }}
{{ 'AbpIdentity::EmailAddress' | abpLocalization }}{{ user.email }}
{{ 'AbpIdentity::PhoneNumber' | abpLocalization }}{{ user.phoneNumber }}
+
+ + + + +
``` -4. Create a file called `identity-extended.module.ts` in the same folder. -5. Insert the following code in the new file: +5. Add a module for the component and load `IdentityModule` as seen below: ```js + // src/app/identity-extended/identity-extended.module.ts + import { CoreModule } from '@abp/ng.core'; + import { IdentityModule } from '@abp/ng.identity'; import { ThemeSharedModule } from '@abp/ng.theme.shared'; - import { Component, NgModule } from '@angular/core'; + import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; - import { NgxsModule, Select, Store } from '@ngxs/store'; - import { Observable } from 'rxjs'; - import { IdentityPopupsState, ToggleIdentityPopup } from './identity-popups.store'; - - @Component({ - template: ` - - - `, - }) - export class IdentityOutletComponent {} - - @Component({ - template: ` - - -

-
- - - - - - - - - - -
- `, - }) - export class IdentityPopupsComponent { - @Select(IdentityPopupsState.isVisible) - isVisible$: Observable; - - constructor(private store: Store) {} - - onDisappear() { - this.store.dispatch(new ToggleIdentityPopup(false)); - } - } + import { identityEntityActionContributors } from './entity-action-contributors'; + import { IdentityExtendedComponent } from './identity-extended.component'; @NgModule({ - declarations: [IdentityPopupsComponent, IdentityOutletComponent], imports: [ CoreModule, ThemeSharedModule, - NgxsModule.forFeature([IdentityPopupsState]), RouterModule.forChild([ { path: '', - component: IdentityOutletComponent, + component: IdentityExtendedComponent, children: [ { path: '', - outlet: 'popup', - component: IdentityPopupsComponent, - }, - { - path: '', - loadChildren: () => import('@volo/abp.ng.identity').then(m => m.IdentityModule), + loadChildren: () => + IdentityModule.forLazy({ + entityActionContributors: identityEntityActionContributors, + }), }, ], }, ]), ], + declarations: [IdentityExtendedComponent], }) export class IdentityExtendedModule {} ``` -6. Change the `identity` path in your `AppRoutingModule` to this: +6. Load `IdentityExtendedModule` instead of `IdentityModule` in your root routing module. ```js - { - path: 'identity', - loadChildren: () => - import('./identity-extended/identity-extended.module').then(m => m.IdentityExtendedModule), - }, - ``` + // src/app/app-routing.module.ts -7. Add an entity action similar to this: - ```js - const customModalAction = new EntityAction({ - text: 'Custom Modal Action', - action: data => { - const store = data.getInjected(Store); - store.dispatch(new ToggleIdentityPopup(true)); + const routes: Routes = [ + // other routes + + { + path: 'identity', + loadChildren: () => + import('./identity-extended/identity-extended.module') + .then(m => m.IdentityExtendedModule), }, - }); + + // other routes + ]; ``` -It should now be working well with lazy-loading. The files are compact in the description to make it quicker to explain. You may split the files as you wish. +That's it. As you see, we reached the `IdentityExtendedComponent` through dependency injection and called one of its methods in our action. The specific user was also available via `data.record`, so we were able to display a summary view. ## API @@ -374,7 +332,7 @@ You may find a full example below. ```js const options: EntityActionOptions = { action: data => { - const component = data.getInjected(UsersComponent); + const component = data.getInjected(IdentityExtendedComponent); component.unlock(data.record.id); }, text: 'AbpIdentity::Unlock', diff --git a/docs/en/UI/Angular/images/entity-action-extensions---click-me.gif b/docs/en/UI/Angular/images/entity-action-extensions---click-me.gif new file mode 100644 index 0000000000000000000000000000000000000000..6f5191874d6d3255ccb93ec2efc08476e9b69808 GIT binary patch literal 162299 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�lCmGD$N1xV34|-sz>&*hUT+Ch2Iq~Q# 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%0Ay9u~^mweXEDmK3p=liDdrspo(2?x=; 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 literal 0 HcmV?d00001 diff --git a/docs/en/UI/Angular/images/entity-action-extensions---custom-modal.gif b/docs/en/UI/Angular/images/entity-action-extensions---custom-modal.gif new file mode 100644 index 0000000000000000000000000000000000000000..0b1010e029a69b740bb8208e8a544e29b9be38b8 GIT binary patch literal 380390 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 z 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 A(f|Me literal 0 HcmV?d00001 From e844c1f5f6972f503b113b6556d09d5eb066aee7 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 5 Jan 2021 23:13:54 +0300 Subject: [PATCH 208/217] update entity prop extensions document --- .../Angular/Data-Table-Column-Extensions.md | 85 ++++++++---------- .../entity-prop-extensions---custom-cell.gif | Bin 0 -> 567039 bytes .../entity-prop-extensions---name-column.gif | Bin 0 -> 539018 bytes 3 files changed, 39 insertions(+), 46 deletions(-) create mode 100644 docs/en/UI/Angular/images/entity-prop-extensions---custom-cell.gif create mode 100644 docs/en/UI/Angular/images/entity-prop-extensions---name-column.gif diff --git a/docs/en/UI/Angular/Data-Table-Column-Extensions.md b/docs/en/UI/Angular/Data-Table-Column-Extensions.md index cd2df5cf4f..6f1367d934 100644 --- a/docs/en/UI/Angular/Data-Table-Column-Extensions.md +++ b/docs/en/UI/Angular/Data-Table-Column-Extensions.md @@ -5,7 +5,7 @@ Entity prop extension system allows you to add a new column to the data table for an entity or change/remove an already existing one. A "Name" column was added to the user management page below: -![Entity Prop Extension Example: "Name" Column](images/user-prop-extension-name-column-ng.png) +Entity Prop Extension Example: 'Name' Column You will have access to the current entity in your code and display its value, make the column sortable, perform visibility checks, and more. You can also render custom HTML in table cells. @@ -18,10 +18,14 @@ In this example, we will add a "Name" column and display the value of the `name` The following code prepares a constant named `identityEntityPropContributors`, ready to be imported and used in your root module: ```js -// entity-prop-contributors.ts +// src/app/entity-prop-contributors.ts +import { + eIdentityComponents, + IdentityEntityPropContributors, + IdentityUserDto, +} from '@abp/ng.identity'; import { EntityProp, EntityPropList, ePropType } from '@abp/ng.theme.shared/extensions'; -import { IdentityEntityPropContributors, IdentityUserDto } from '@volo/abp.ng.identity'; const nameProp = new EntityProp({ type: ePropType.String, @@ -32,62 +36,45 @@ const nameProp = new EntityProp({ }); export function namePropContributor(propList: EntityPropList) { - propList.addAfter( - nameProp, - 'userName', - (value, name) => value.name === name, - ); + propList.addAfter(nameProp, 'userName', (value, name) => value.name === name); } export const identityEntityPropContributors: IdentityEntityPropContributors = { - 'Identity.UsersComponent': [namePropContributor], + // enum indicates the page to add contributors to + [eIdentityComponents.Users]: [ + namePropContributor, + // You can add more contributors here + ], }; ``` The list of props, conveniently named as `propList`, is a **doubly linked list**. That is why we have used the `addAfter` method, which adds a node with given value after the first node that has the previous value. You may find [all available methods here](../Common/Utils/Linked-List.md). -> **Important Note 1:** AoT compilation does not support function calls in decorator metadata. This is why we have defined `namePropContributor` as an exported function declaration here. Please do not forget exporting your contributor callbacks and forget about lambda functions (a.k.a. arrow functions). Please refer to [AoT metadata errors](https://angular.io/guide/aot-metadata-errors#function-calls-not-supported) for details. - -> **Important Note 2:** Please use one of the following if Ivy is not enabled in your project. Otherwise, you will get an "Expression form not supported." error. - -```js -export const identityEntityPropContributors: IdentityEntityPropContributors = { - 'Identity.UsersComponent': [ namePropContributor ], -}; - -/* OR */ - -const identityContributors: IdentityEntityPropContributors = {}; -identityContributors[eIdentityComponents.Users] = [ namePropContributor ]; -export const identityEntityPropContributors = identityContributors; -``` - ### Step 2. Import and Use Entity Prop Contributors Import `identityEntityPropContributors` in your routing module and pass it to the static `forLazy` method of `IdentityModule` as seen below: ```js +// src/app/app-routing.module.ts + +// other imports import { identityEntityPropContributors } from './entity-prop-contributors'; const routes: Routes = [ + // other routes + { - path: '', - component: DynamicLayoutComponent, - children: [ - { - path: 'identity', - loadChildren: () => - import('@volo/abp.ng.identity').then(m => - m.IdentityModule.forLazy({ - entityPropContributors: identityEntityPropContributors, - }), - ), - }, - // other child routes - ], - // other routes - } + path: 'identity', + loadChildren: () => + import('@abp/ng.identity').then(m => + m.IdentityModule.forLazy({ + entityPropContributors: identityEntityPropContributors, + }) + ), + }, + + // other routes ]; ``` @@ -97,12 +84,18 @@ That is it, `nameProp` entity prop will be added, and you will see the "Name" co You can use the `valueResolver` to render an HTML string in the table. Imagine we want to show a red times icon (❌) next to unconfirmed emails and phones, instead of showing a green check icon next to confirmed emails and phones. The contributors below would do that for you. +Entity Prop Extension Example: Custom Cell Render + ```js -// entity-prop-contributors.ts +// src/app/entity-prop-contributors.ts -import { EntityProp, EntityPropList, ePropType } from '@abp/ng.theme.shared/extensions'; -import { IdentityUserDto } from '@volo/abp.ng.identity'; -import { IdentityEntityPropContributors } from '@volo/abp.ng.identity/config'; +import { + eIdentityComponents, + IdentityEntityPropContributors, + IdentityUserDto, +} from '@abp/ng.identity'; +import { EntityProp, EntityPropList } from '@abp/ng.theme.shared/extensions'; +import { of } from 'rxjs'; export function emailPropContributor(propList: EntityPropList) { const index = propList.indexOf('email', (value, name) => value.name === name); @@ -138,7 +131,7 @@ export function phonePropContributor(propList: EntityPropList) } export const identityEntityPropContributors: IdentityEntityPropContributors = { - 'Identity.UsersComponent': [emailPropContributor, phonePropContributor], + [eIdentityComponents.Users]: [emailPropContributor, phonePropContributor], }; ``` diff --git a/docs/en/UI/Angular/images/entity-prop-extensions---custom-cell.gif b/docs/en/UI/Angular/images/entity-prop-extensions---custom-cell.gif new file mode 100644 index 0000000000000000000000000000000000000000..2f3d79f7010e727118156e174cd001f19d5fc283 GIT binary patch literal 567039 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

y&rdx+xHkWydO>V$!DaQr^xDEZ>P7jr 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 z zwscPycn?K#)s}TF^l~wGItiEb>LX?+!3Ye&N#p=h8@FjcV`P6fc(eCMhW9i4ws;A~ zb(xJw0@y~L=*aeaqYHxJ>z=k*MW6}d!Ghq@7K=qS8z-8AedkVcp!l+0?F*9UW8zAN~A<~ zU}@{)3;&J`Tow3ztru?}7=}g0degRhCzyioDtz&bNQIz-P$&%i#!DT@3YGu{cwh{E zU|c0b2YBEMgun`>c_JWrn3X4%t7q2IiJX{O zWZqewdd;5a`IYne;p!Qf&k3IKS)T8io&(yQff<~P`Jm&Oq5pZH6WX6=xNj|4ovE1& zsL`6QS#zmE)e-`QNVuY}kd?1!Bd$02gbk%rTBTQ-rCZviUmB)kTBc{3rfb@!Z`z$` z8JfK}q_d@(t@&jMgfiA5;KHw`&2fP_!j*BFshirVpBk#8TB@fSr(2nZCHRhyT559m zzhGCZB_rt;1sO&mlFND{b}em`+7>Qvm1IgJPsSN6I-zto3R_)u^$_yV_PMBBDavXTf4zK zV7ps?soT79Z=}cDy(>AZ*Bknz`#;rNzQ<3z-&?rL`@YxmqJ=P{zx%$gTffVizx!L? z=$k?98^KFEzYE;JDZ0U@;<)iiz~!63AzX?N9KkCbz!-eOMS4XvoV+DG#QzZyy)PKV zPkgz7JA8s$?}E=G_O7!@d`~&Nzdbz9R-DC=dcE zqQ+w+_?-O7zlg|-Tt7{`$Bpp6E7H4pJj=uT$6;g_Zh_35K^v5_{f6Ro90n0c;RTCN zfwj8(Rj9zlT>0Du)H0U59p05T!iH^Mh5#rW(124KJq$oAEhF4oOkKcs-m(|e-}eU*XR zBdo|?I>rucUNG68x6A=G&w5Fnl-ZXpk>DCF^A2CiWjU?2@@;R7(@ z3SeLukHFhkz|pUO2`0e$>J$_&ikl+Ydp$}GH^Le090-*&Y0TpZj5*BA8o?s0mA=Ck2 z5kg%EHp2WeVH7@r6KrJ^g1!_0;1>R11pp$CHfYoU7zChA+qQ)a8#;UlF`~qY6f0W1 zh%uwajT}3AtZ1+f6fz`BnmmazrOK5oTe^G+Gp5X$H2-V1v@)fO&Ye7a`uqtrs8F6( zpnwU3G^x_1Oq)7=3N@4E9i$kq58(TOXvBSwmravt}{lH^t z1|EY7Kbk&`I<@N6tXoqAyDj7sGGWGyS!z2s)7-Xk^S-V0_io<4i3c}+Tz7KiNre~h zy&QUTdfY?M64OxE(F~kr*fMUpK0HARU0B%fji~kWn)Zs=qa7+Tq8r=}sO&vF+v4&T9 z+yDk1YGv}n4|!w=ha}x}1HchHkdaG>KMVm$H;X7}$A<(;BMpH99*JaDg(y=AMggx($W2gcxbU3U9pf&P#8- z_TG!HowIJc5V`993vj>!58Nqi2FcOxyZJ86aKjEi3~|J$%IXyW{t}FF#u{(TF+&Ce zfUvs~k4$pOCZCM*suXwgOuy8040Fsf&)nL_A*YOU&N}bRv&0mC^)k&u4^4E@580e> z&q^=Nbkk11xpK?E25ofJR$nbJ(jq_2b=O{hjq}e^`f=zhgh955P&lZCfmNsB@qv$e{PfmH|mS2u}=9+KL zdFP&g4tnUKk4}2&rk{?ws&pr0uZ~uMw;EykU`Qe{WKKiJHf=V~p zh&46rN#9O?{q`fSIOC1KJjyO;FVwdH3UGh~ET91oh`Ax!hg7Vh61n2t_fB`eP=zLV0Tj>l(q8ESg0*#iz31a{N z6sQ2eG-7cOT5w`_cpyUivQda1WWpe(a3%mUfrMai;ug`m#Wp};3QF;*8@2d_K}f*~ z8pZOYY(?oz&losNP7$Vbt!vNrdCZkY&l40w)TBgg|tI z83339BOp%st#!?5r$RXiX86r{X`Dg&WdJV1gKcF^t_j`0j6;GqgpNUI?-l!r-7V-Zbg z0!XEyOLxnhBk=BWsp*aLoUe(v71pJs&bFw6s1g9%lvJY>HK;{gp$bYcF+nIbth62E z2mhha)}Shib%V@&>+eqKFKs?5or`_!<5Bgf$2BNujdEJC{H7~oBP?MRDIu;Lr9qU@ zj9P(ZT7wFfD_tp2SkUNK8g*qhTsa_7QjP13pNKpgTu-t~e)2o9H!>jtzlNL=m6?y< zHe5NQcDhXQurVk^Shx7bs~#hd=dyz-5Bst6{N9__U+n?uc_wb&RzcIH>x5M)GV*@) z#D9&~eGB&3D?jI!Uup55FGePI!x>+H{qnDW>e+h`Xl3iZ_rDMR@QZ)^HB5C8bbzjeIpBIM=zVC?H3xD+00MkfV;0Vse2NPq=sfCq?x38;Vz$p3&1 z=ztGsfVa>-2tiNyw|^H1VR&T_xBv>YU`-zQfgmV?BS?ZJXo4q*f+?tiE69Q^=z=c@ zgE1(BGf0CqXoIw{KDBaxUWS1^NLQY;5a@Ia9tZ%|RD?%Jf=HNzA6SGVh=ffjf=cLw zOt^$n2!d94g;Y3&Sg3_t7=lsQg;@xNV913}ScN5MhF&;^MEHed*oJIahHnUma+rp0 zc!q08g=^S^Torsl6K_5Uh{J?ej01EKXo!c1h>56(i^zzL*odgNgEtq5lekGh$Pn^} ziJ7R0o5+cs=!u^QikJvE6GVxn7)*aOdVZLC(8r2nq>8rZdXZ;}v$#i=*#C;R$X0(y zi@QigX19vC2#k@WHM~fSSENC~h>Y)~i^a%{_hXC62#sO1jLk@mwsVZph>g++cKKJ0 z-H1Q?vN+i&j!86)-e`_s^Ni!Djzd$9=je`4bB*gLkL91Zr^$J0J^%a!@rTcSJ`ZiXteF#1K8{NYcbW zi9#CBlnrDdUb7G_u|!Hb8Iq3zNhV2rD5;WH*)Z3b5YGSrUT_w8!2bfH0Rw$Q9xw!;umg$_0z!}pQ4j+F z@B~9}3$v9CHgE%wU~$W0n|N7|x(T2TLtI>W1}*ReJkSD@K>rLdP-lc7RWT47qW}Z5 za08Rj4U#ZkD_{qIumvjs4X>mLG(bvj;02$s0|t=>X&_&*!2_{{2S?BiEkFteF$2ZiXt zCzePSX8@R2cLPY}piT+{HZTL3aI4NF2|u6>gs`kLpk&#}2?GXa`Opnp00Td;19ecP z%K!jE5D4`Z1=4T>Oke{oP^Xzd12zx?qwxceP@BBEr$Gv=`>%n8lTq-95f6xk_ueqrC`Ae&(ICaU<}kCRAF@x(f|s|U@^VG zu`!3Qq2{an>azMGBQ3cuJ_mViPj41}|8$w)lQmbGFiu|Z2ece9eRP1T}G zgg2Ed+pEdeS5e1s<(kV6m;vig}X$6E4Yd46M(vSG~~FC z3%QXixsyw|m20^uq)TwCxco|xx1vCw3%a2zx}!_FrJJX>WPO{fx|Ju9EtwFBG7G^2 zJm!-=wM)CVi$1t(ySdA|yX(8U3%tD>yuZu4xfF{QxVp((qz3V9*=Z2SfDFq3z0!-S z(`&ua3%vkvz0|9{*z3LB+r8Awz1h3H-)X$ zd%yB)zx2Dm=G(vX3%~y>!1#;41FXOBi~qj-OThU13!%^p5M*VfHdo1;xIEW8Gm=WC ztHB%0!5!?u1XNST&_xs|!4#~#Y+FmQF~S~cxGP(8scXU&+`7ipbGzEYE{sdnCyOyG z!(QRKtafELe3x1T06HvJJiNKhr?NtJ%tHd^3#r=83 z$eYDl?60HN#k~5(P#nf;JH<;}##DL6l9d2!^%8{JIfQ-ed4F9a6+{*rV$Db_A0J_SxJdd}W%a&X*uvo*7%*!WP z$gm8?zwD>9T+ILY%ATyuvpmDArovvt%FT?6!pB9(jLOlhn|~BRy~98m{K4gH&gYEI z92^_NFv1b6x!!D!#6>C3My{!2&-aYa`K-_T%+LMo&y`~k%-{^a01CYDM7kqI@Vv~I zylQ6F3Zj4t#1qlPOVPt?(ZY+-6`j!+t3w@#u5nPmj z!pG7VER4g(3x<2h!k?Zu5n9I(sbmemf=I^nIMI+T?NlU?^F;}9cMQMWz_%xSug?`FapP|0X5(Rj{+9jbPz1;5QYNXnbNck;oPNE-4bzh zSsN*l5)qAZ-CRrC+hh&7O-P9}BOj4U=B?W|&D-aQSEQr^6+i(LU;!3T-xS~giVzHa z!U?UJO1kna{Q?bK`TwwPAPv*NEnz_;1^!LCax4o0;n@-_yOJ%c%{oGhEDQcDQVA9i zUQvW_UWWo~-E~(~Z`eNkfeD5f7=IBBdfB zH6SH9bi;s@l!$aVzq#*cttZxcUc%n{pKG7jaUP#lv;p^;!Bf(Epxt`GxjC|)3`i{s zZlSSi%u7aL506eJ1AgYms=;uF0(03Amp|IKo@@QL%+CZCRCHcdv{{|J{TAdSSgOoD ziTimky|(3MnOCQO#tQ}jQ1w`@Fr!w^p8)Jplw#BXa|D>fFeULwJ(QDN949)fGx1uK zJ=8$J&Uwp|9MD(?`eY6BJjeh5fC_8S_|8wu+;fqfl>Bh>u+PwvTR`V2UJ@U83JE|P zLZ*u6ok77o}a2LoyzbOUQEt$?K;TQw1hNlD**mb&#iq z-5%^@>R`ZIH1Vp$=nY|8B6C0(R>(tN zp~%oSRCWNM3kl`9u6`MUe9jA4fTwq6CnHON+5yOwuoVz%GItK71N_%?GMOWSyt$IR z0#5n54(fp4H}bdsrCXzf{E!R>Dj~=h3d!kLblydg`PWgsN`{Q2k*C6;4u!~9b)@?8 z`obR21;qCKkcNh^-Qjb!77ut&HGxEwo%AsZPK^WfF7y6iWBK$4_{a;wQ}UDh!hwWV)sZ4`AbvFED>x~!zg-e><^ce-0)Q3Ckh{qc z1$kf}8X`zsCHsJfsu_M0!CG zUQ~eylsJka4@c^T0P*IK-9gn&X8^2+B^_rcyMqJiACjbEnbg=R0N&AL z`ShX0X>@19MKFA0;uy87FDI{C`k1{<0gf|l(V zrl*_QIS<{JyR)BejpW%RsPCNaaXtjh0JfP|3(0u2<|fgFh{A;GNU|S+ADBP%bjm)G zudV>IKP}Xj%wUz`gV|P^1G4hsKuRnC<DwgjGQUAA{5N%dCyT(r8$tRkL z_*lsmZ>|j$OlCBb;z${m2`n4esxD4q0t7k*zNN1xF|C>L79{7q_%!QTIQeF_IC0 z6q0j)`=szggOfI5(rzVM+9Nt+qo2$5cdxW(+u3G|XC4noo-ZvZX|*S>L#Rfx_)K~z&0Xv>bW8+Z}hr4Y+63s(|n&Ovb82B6Lrpoz31MdU1D z+dOdECVVFlP>HZ*adgPSFwg!5;+uJr`q`81jgsHzYRDqKXFqF1S>IN70-%}Qi{lI% z^iY9oP%2LSPb`e`9QI&tOyJ%dnymApNV#v`%t<4~XzSOshw8MH#Pld5<9BFa76>NZ z1r`OcKlY0aXYfFgI%^C2IYJfK=Nm!i`brd?FF-I~h z)UR}R{)kMn;?OEQIkE_VhxQ2A+&(7(2<{z{>Doo``#Dho9KvH{@N4Wj6-swYZ!u|L z^l$gzyLmZ(Ld}S?!k{cLvlIuJy0(odMm}1VJ*7fsc9oXc%oQcdS*}L4OY4)|&Gb}+ z+)cp7vZPLlZ91J*N}H3mM4pRpBug5p3Zcuxg9K1WN}V(th9t=}9!c+HkM$Ai!eq?E z+QYaeCP@ediJ;r5+bQrYn_Z?RGf`PjSP z7)O~6Q$aWKkyt|#G|h3g-rcmKTT2zuQ4PMy1dOkeE&xd>OQxClikPllVstWeiqeZO zPAU9Pg+X!LApMDIy<$9vW|VFuj?+bng%WIKNIVV4R*Eyj+L&4f6HGTkL>>uOlGQ7GwxFn>7`V>%$4!@{R2aPdZ&Ej9v7pp-=@+5HNici z_f=T~V6Mal1Kp)wjYeXrsohTDD7IfL{}wC?Ei89FHcHj9YINP|TdT6c52*Vz<0Ls! zy0W`_<`gySK{qW-{)zv5)5oN51S|)6|4|V^Y3kH^%w9jBXZu={Sa>v5T|ciXzFC&0mQH$EIFx_0sC2NC-(Pp} zeJ^dfb5xhF)TwS#!jb5x{+(%@(aFr!se7L7QOi7|rcy%FvdxqipS8Vb$Xu|A&5wX~ z{X2_6KXO-2%_=yKpZr!4-Ld*-!%%tnRXE(W-w6B7nB&S1@#0=WRi)8P7elXCG}HPN zR2WlD3-OM8|K=m%8-6ZDsEu zKN&j;=}c4Hd+)dDt?R#@2Y4w*i>A$8uJRer4NwM&q<(F+7or^NHHLh_M7B=5B}ff9 z(tBsLv^qR$%r?_KK;&%5I6j_X;w0?(zQ{jm-Gb4MJexk2StW4#}&J(fAiE>rHN-i5GgU0zOjp_PI z`zO0kzg$i=_I{1h(Q$o#_7c}H;#U`yIAwV?KifwwRu|Le<^U9#?vM7bkEz;oFkYAs z;%}(`+UCA#a5cXIIs1}7?Cz6!6lpGg7jCxR(K z3kxd*4|4p!R?i5A5RbP9Q0#y0hgqn>B}hzQ=hd)RJii5A_TW$2!*=hafW@D8$%6V- zWPRRdF0S*c1q~Rs`(!jOZV2=dpig-%y>n(*xs3sNR`Ja*^3N8x%w}=gg%&N44PjsdoQ{ z#-)AFnBc_?*??~|O9xhsT&z_|e(f{nyBGjK$Y11~*c^WtqZYFEUq@iC#PT1{(W~Vv z*$c0qd9jf-F;}Z9?6~SJ~6@4)|_K z)72zF_N=8g^ztp?a_a6YGs48(uwzH7n*+y=i?)t`$Ad(mEuiD(gz#^_v4gPpM(!WK z9EptF`RA(5;C2w}BNnkQu`lF(awWlO@+!9SJHc4W^#*7j7B(q1__s~xI~I<41Y5`6 zwh*HcxKByf`QP!w+v1%JcA_*136i!7&s^m>XvMBI>+Y;~vS}lL36)#L;*8u~GO3-l z-#VFP9^PiDntA#peMc%`UMBuXDr8N{)rnuU1mcX7`tahhz);um?JiDkB`#k{=4Xm} zubbV@Gl@-A5}5DSh-fMCXvzBT(jiKZ^OR%~zP~YeZC?~kEdK`_f-M=l6(*xf*p(HJ zqf`aDOC*)ml$BM|x>X6<-O2*ps@;t4g+(Vvupj*2kqMn*piXh+hmXWd#VR5mAR`QY zdyIX1j4&$1G>BQ6ipjGGF~%}XWwdi4h>0;AMb~T1-D@M>YpdM*T`G^+i?p*#l7X(r zDXoT!3h`9=VM6l#d+el~I92yWRnKEp54t|@ySB11;6YM=LO%)5 z4n0LhpT{TSWDpQMsTRDbMmF0Q(%OgK>kHq@h$uy4N&#d@Q04gpr?lSKp$Bv!lCG_) zE`=X8@T&Ll{Yl6DZ$Lki>3*cFt8?<@N8+N()%)S(DWP^68QOVS^?)qpyo|k!oa4T% zZjGL}cu}vYNC1-|Tz8I}($)*#CB~zl{4wdD=k5UOzhk;P4<`8XezV zq!G0@;B}$-&f>=>%#SSbLAZ6^D1|157Fg`71rr-6d8U-0O8NiQAameCo|Y>r=6ob_yMU^6f*c@k0V}LshL|m0Z^a;C2d>OYC9gp zU8|2>559edsYJwATWEhG7EA99^kQ_pIT)@@2K9!X40P+*xHh_UYpYLaCvIyeV>By| z`&YSj@6`0l)zicsL3GFvdq-iVyNm zp&^AMmw7tWJ)`g*1F}`U+k*N46HO9BFaR0BgU6ucN5qmNJ&sB5B?B3zdd0ke{*$Vb zd^mO}NDDgB%1x>QukHkeciHKX#ph39Bdy6qM8c$njt7Sr7ArINFR8)4b%td-P;C+uY%-> z&2x2;>`<_}WTY!@O1p{EQa*yG4lKPLX`Qa=Eu#}Mui0G$V8CLWk)TlJiUOH&N52S1 zb;uJy1O<*n4LrjN2i*mb0MsL-4}ocZQEcpkeZK1aC(i;mOkD|agF&$Rm%|g4;?P5G zQu8}yDs_hI0w8tV>k;k<_AHP&4s>xIDTkd%7T2h<&?O6@$B8#;rx3R&Yy-1KxR+DxE7gt z6ni9l1(`5%9_4gf7hz&p5y5T(QU?@PoRA8mLC+3J#j8oH{u_Q0r3Pr4-S!0($Uu$x zfC?}M3REu%96*i(5?gHLw!%{nBLb^P<`Q-N+YGkfJ z2`>~~lc&K%gsQOS&}0(1Cd{KOAS}+*t7t*95Y+fkd(Q5;??*hpZ1VSEd?6TDbfYf3 z+{-TC_m;J<;+`!hdd#m|O9icVm8eI_2sp)Pz)jU*XxsXIH41ig7Tq(Fly!I7$Y$wACT3XvU{a5M!?KLrK*(O)+^*Vv;|QeF{tTH~ z&nJ;TYU(gFbv>XvvLUj*;T#sHM65YIShGo5cYm}Q`XBNzWW!p2+Tr=;Ot+mwuYG5_ zgNuV>`r(Fa&2o<+&M<%LkoCu*3|HDS%Uae!Qz1tmk0Gxg5f9kb{U14{N-qA2+G72# z3cwi~%Hm?D%{bv;@yh7XP0gOM?ZnOPq|@y;)7w!XKuqfZx$Jh=)LN8oLt1CG+^j0| zdwp?L+x~RttQuz#Vw-92uN=arb8gv~9E#_TGsL(M=%z%n;8Oa0r_5oe+~1{K zbq7)bU^0Ppan$c0+DvZ! z(H<2Tr9*d7JGDHY{}|lQDdxL)P!`Ndar&S* zCJ*9}14*o?rBtX*TBydA?Y^bmU!st5Yl`k#b_4Nmcgt?4Ik<^`iOwwEpKsV-=-pqO z-p_no9;x+OaJ2@zDs;$sa3FfH3aR~hAhgEju_1J@*^3f6M$RnnU{u#}>3+X1f&MvtbD*&I*Td1($TKpx<03frmyTkTKQuMN zQ$XkUCB0Yt;co(DY&ln<`_3Ww_wNM2-GGOOma1N?`d*O6!=hwb=$k`iZ}U9>`|QUG zIK!V?ynk*>{GnC*LudTwKgU1x0e=``{xD|#VUqasdNqP?J3?^w(EoXaTwMv5)a`iE zBlz7T_P%n?+6oRmA0cZW4o4rZT8euCKKI`o@ml%t)%rY;gK`)6a5f$Z^&JV5{pI&O z;u3x#Hsixj^H<#Xg{akEu~8pM&%Z(ee;-?AKEt&vEdD`4fC$M5-egifbc8&^v0`R~ z67R9%U0-EAUnNIh6#~PtT8uC8T%w-otJ2}Crsk_|b*xk1tJim|-RO&)IoAArthD8; zspn^K*Y6p@*GTTfFvidDmEY6y6J)`O#f+bEpPxCy$x~k6`z8^Xg%|!KWC$lMq|j;H zkhs0oDL*7KB=FR^{M4oK)V1%_ZRXT{>(t}y)RXMYi{Z?h_smD)?1kEyuko3mxpAz^03JAvhU8|(CVE$|Fro%msX=o=Kh!Rz5<20FLsFBK6Ln^(y8ABUZdxU#3Lf`%Pac>xyEN~( zUDAIXZuMOVi@FNfGwAeZqBqj~?~iGZ4bzvUxwD#QZT4hWiLL&%3u(y{%pTfI^?GA( zpSU*2oOwCd75z!dADR(=HYa#X7Z=)z^;m)kUH=mdiSUZ<5SnL2$Qis z+Q8*H#yo%5bhOjjAx5zJ7ZPyxYo$Pfq2OKX$@b8Pj~&Y`ZGX?UN_f?DL$5>e7eD&$ z27kZld*^!@-pJ+;_Hbm2AT^sQ2&L}Iw8X56^qWVKlt~mu&!;;U1zc&UCl1 z9%gZ3*m9u7!GNx&wFtrD*n&ig@vXZtG9wa2ucdn#xL(V(JFO?m8dR)DsjX$%r65J6 zN|PQ6&HYU0FwiKDfVjaovuxtyklEHg=(23PvStTG*UGugY`cLto_F^1Qat${BXgUO zm!FxoazjWpw+q6%Ot*?6FXy)3#fpBbC`nbk+|Exi$SE()b(t@JpKkN=Lt)X|`TG^+ z@n)69A95}~R91f`TvmRJerd*E`DNfGe^oPmPDO3rY0mwcmhsEox>ov+yPrygSgJl_ z=LhyG$8JlzS55Iq3zAXU__8iy`TK@Lt zdNiFZOAEKI5A4>o-B7#LbdpZA)OL^+|( z%_KMUsf8`m;!{6gYU`(7;Fm?AUg2DUFKt3xtv;RNyR4$4=a;NvI9kf;!~Q2vumAQa z@IMisP>~Mx9n^@t79ZC!e{wQpO4cei33G*sOzXc66`ipUZWEug{uugj%JO^b!;vjf zyR)Uht?IMokTb&m*$SFW=p2t>@Hk(M<*hkiOOQA?|Cy{Nbg`ah>~XP?2dk1qP*sEr>gOQ_>TI7uJ-C@Jg)YewrZ{pTF(xyeq+gmuMfK!Jg@)s z^VVJ;4N3gI{)6p&Tza0htIvQVn4EP8AQ?LrC=pbF&5Ao;1|0Hguuh|2D-7TgDWg2t|6?R#aRFlL1YlOAjv56P!Kv!N2=?xX zbytoHLWCs3QvnBs#6~cF!;u1g3*+Fd#qgNzF2>D7i^Ty>vWEU1;>Fl&%b_)f@7pSf zw_^$B0zVli_*BK?lXXP^&lvhlh+~#NNrA^}U>#`h!*&r4r#+*)Oyhl2_!RSKaV$9? zs9*K*QA%<`DK~FW|K9sgPUL^AAhIZc?zdeJP-*cBV}JWqHXQAzRmf*;EGt_21LD}! z8SG*r_ZLwfmaQDi|L$A~Q-yuqA!6^f*O2?b?2|cTAetoY$B_NwFWI<|GVv0PVP~^1 zIk-Hu=&d6(c_1JXf>5As{-rJAo@z1MTK4$khrVCQPqTlzIqU4 z=%hd9c?Ym8mj`O%!kOy}p@zJ`cWN~%%qYm;MRp|tCk1Nsi>SR4)S6cooXV*_x=lNl z?D2dfi>JY>w& zagC7CC-3wfONpzg5uej9`7lAJj}#LC)i)Lbu?jpBP@$yClv1v*g}fzBW*9;UJ1Fn^ z=Ms|9Jo)l=@~3@4-CLsL4AFlZ8tgYTLqFzWN=a&<8o=9qg;89G0GOcRKJ_r(0+=xI z+WfGFq#Fxj)efgrcnEm85}(YK+*zd8#;GWNYvppYhMH%nh{ObLK#M~`2s-Kpt}OCX zqM%|qi@S;r?1Nbc`-ymQEIP%7ILAKm5XPe}9MC`($=MIZ{8oX2P)o-nd5V@4QpGU5 z67W!-(#}4X;WjB)Gn=kO2|jnbdVZzs($4=aIhnflT_G zTA*P6KrM1WtM^DO?-q>Pb8b-Q-%;i}kxf3ip93ZiM;U!X4t%wygdt6#FWH@W>*5m^ zBQ6teKgEXo_D}-Z?wXEY1bj3v2hF*WF@_P*l_yo)18BWtKb!aY$F!D{2N`)vb5E3*2pk&7%hFh z3hy|rFBzlqpl%F`ZfB9S#cKSUcLy>K0U~HgCp8)~%)1DaxnQonZF;P{b`K=U#raT~ z5sBE?0J;pAXObj-9;JZ0`O)^p&ygSEt6G>`Wj_xlt0*Es4(A@aQ<2k{WDW=-77;6b zt}3KvJAaF&Wp?YyL0F6V%4vo~%aY(hOk?N*xGwyCA|t%ljwqZoW0@?+4~Tc^1$3K7X zf;+#jN3OokEuTiDE?weB!cHzM10u9u9o$gM5xRN`&N_q%*V{C~t0Lx3le$^vneBCl zg8|Me5tN;*jEDypMzX_iCP5Fr@-m=MB$7`jI9^sfds#N~+zt$O!kReLf%H(WMt(0w zy-96RU^Ns(8VyG@fQ--($1aeAJkZ9+wgy9jJX5;k1TX?Xbf(-e(eQpX_g?{#UJL=w zeePs^k(-&JLk!+70iN>?p~0D+l35tdim-7wEV|F+@~fH%(gJ?0#R^gp#FFsh1K9uy zT=!Ig-SD0$)Psk*9nbD=(4v_Tx)e>1NxlU6kSb6+0Ft6fUV{{?9~wx)S)atfrP;Mk z#=JS`fD$NFNd{cRkHr04wkIHDjBpsD#TZ9*7WsD8E7>G2D=RK17PcGk?De*E0mR_` zR^Z`=ISWW}-6tqKQb}MkKJZ+rvO+d%oMrC|3tPIDptyEzzuacH`ogC>9~k9N|Hd8s zRejhL*FPKZqbXr%HX(O5j>gMds#}gCgM@9%>F!^RJ*9-^QVoUrSJz@8?Wvm0O~TFR z8i#K+*3}bP>k<$86MN3xk^+X@*@*>91d2HEJ4ipjQ~=Y>L~wyO@koqM(fg+ z>Q<)QCiZ;*td02Uc`lW59L5pr^C zG6ES{z}Iqe+bFVh@;Dq{;#g1t&qXqulzU|y zybzx|!2_FPhaJ;H7geC&(eUg-SU5Xb9*V*P4Yx@q`;N@kZO&(m&mNQagw%n|5MV77 z*|C4zXj}o$K(a|1ystm*!yN3RGoT730sICFm>^|A=RuOma1H>jha`3Q-0kclMVHKj zX_(g`2#JTBsJ<}@D!x%tK{CHLAo}rU?~Pu*H_3T#_U*mJ{QKuF@5%p=Ez}iX|0KyZ|p2B>Q?T+#*5je6zBPCkHuJ(DVZd6^bjMsAIEm7UBR`H;G2tZenNA~vTY z{#!)?VZI_}ApXIYIc=1pIOszVm%hK!hxGUlf!{yeQTfoa@ge)chk_lm0?o>jZy(Ai zURONUude)1G+)X6zOr8P!^Q+G!r$NiTh6Hl#S$7wa|j~Ww}YT^rK89o?6A!bA0wN~ zM_f`hrO1s?fc}>t0|a@5i#x5cxAc33+y@`qls|rY8B}bhRG9N&} zP+s372h3NE=6vG#kaiwLwi8|DgM%$>Vs0v>)x19Q<$iw9@|ozz3tfFiuzV4f{vvMv zD*AZ;B3Xip_0`Z)r+cXiB+verh=&5!+vrFWbKlu)q(ZlU~_p=SCK99UU*VaD6kUodSKEvyX&=PWrVr?+N72uexJ-7}Q zsM8UQvPuaeS+eT}+ch6BK|+Rl(N%pf68eG#`rY?_lxX*dX!jMg_7pGvsJ`wk-0Q29 z8K{!!FSF?TB-861(i`-3u>E?_d}yG9YN%6YsJE)8Eo2BA(lCNaQD-Qf*7~noUkbqknf|G{!QiTpt-x;G19b zx-`b7GrZ~sI%Spg&Xw4Z8TD6!U4(S!B*1U3#}IcWM4wFjfBbm*JL6n!lGiQcM)jjY zH^VYSKmOgMX4|Cp(xmRqq%nR%Q71>)9Uu&wGI=*;_J8^DZDR)R0K>B26rGZ&)O4=+tZ&32mC|ZkjG{7@m*Y}pD~ z-U|D-g=X81kln^mH%umX8xX)?f7wkxwyozio1P=v9=cnp)W4F1w$hikGuVE)=Ko3^ z`Sp7FmlySh769y2y={=UQ`x>#mER>$wOV|iOe>kD`uQ#~kJw0EY;-uKEx+FMZx_q9 zSCh1u0o#RXOo9dW2HN+AblWV@rL70M!?OF6YX+79;D zpC9Ok?9V2p&wCu~Egx`E9gH0u9LfG(d42F}Idxa}_htLi^L(?FT)!`w%-af_X6xFLgtfPB^Jbz@I5AVnwHRk^@Z~Mbt zaMU1s$X=V`Q3qP6IT9rl?C{i1@e$hc+*(n{KVmC?Ph>{~3sSrQe`Se-RExi+PYxCa z!M5ppkX9uT&tn6^9|fzobiyYlo?XNldeA3YF|JNsvHR#Myb9}QUN5L8XLtf2u{5qEg3 zu5{S18fmVGiu|{`SIt&e4R5ZRN5N4Y$2g$_&yLm$!0F`1xo<379BE;N1wTbtTfqN_ zA%GlMa00>a~T|8GD3y$_Yw#oW}caozK;PI00=04dM4NoFK} zQuV@Dub%^nQ zCbz~9_TF;{bJPBg>7B0oU|8!g{Fu+^fBg6|%Y{>d`(oW!h{w{x+3!z~oV=yMnQHI# zpmbix_C=|q#0{#1Dbn*bRQKFhEjvyyZ&oj)TRU9a=RFBcRsbXZ&>)^1cv0oVWO_8{ zd3|vb6Z&p}sCNVZ$B)mQcb5av4&85B?GHNW+$@YlbZx}{-4o8KTkue#uHE+dbdL>z zrMlm1VpD?XlI)5uav<&l0mJY%Ts7@@oBBiyR7rs?c(JyFG?LCoo%6N$I2suG?6v|# z!fYfDdau+=6Z$va6$5q^gy! z&_YsP9hHS(G|3APv7C`AK%wNJVd2Te?Qoi`L&a#HBpHIcRi(tGe!Cui3t$;8%0AXeIguq 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 L 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�`^scu`S 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 z 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�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 literal 0 HcmV?d00001 From d554b6de5a229c38e474d79fb86bc391a0c435da Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 5 Jan 2021 23:44:10 +0300 Subject: [PATCH 209/217] update form prop extensions document --- docs/en/UI/Angular/Dynamic-Form-Extensions.md | 74 ++++++++---------- .../form-prop-extensions---birthday-field.gif | Bin 0 -> 501343 bytes 2 files changed, 32 insertions(+), 42 deletions(-) create mode 100644 docs/en/UI/Angular/images/form-prop-extensions---birthday-field.gif diff --git a/docs/en/UI/Angular/Dynamic-Form-Extensions.md b/docs/en/UI/Angular/Dynamic-Form-Extensions.md index 880250a247..d7780ceec0 100644 --- a/docs/en/UI/Angular/Dynamic-Form-Extensions.md +++ b/docs/en/UI/Angular/Dynamic-Form-Extensions.md @@ -5,7 +5,7 @@ Form prop extension system allows you to add a new field to the create and/or edit forms for a form or change/remove an already existing one. A "Date of Birth" field was added to the user management page below: -![Form Prop Extension Example: "Date of Birth" Field](images/user-prop-extension-date-of-birth-field-ng.png) +Form Prop Extension Example: 'Date of Birth' Field You can validate the field, perform visibility checks, and do more. You will also have access to the current entity when creating a contibutor for an edit form. @@ -18,16 +18,20 @@ In this example, we will add a "Date of Birth" field in the user management page The following code prepares two constants named `identityCreateFormPropContributors` and `identityEditFormPropContributors`, ready to be imported and used in your root module: ```js -// form-prop-contributors.ts +// src/app/form-prop-contributors.ts -import { Validators } from '@angular/forms'; +import { + eIdentityComponents, + IdentityCreateFormPropContributors, + IdentityUserDto, +} from '@abp/ng.identity'; import { ePropType, FormProp, FormPropList } from '@abp/ng.theme.shared/extensions'; -import { IdentityCreateFormPropContributors, IdentityEditFormPropContributors, IdentityUserDto } from '@volo/abp.ng.identity'; +import { Validators } from '@angular/forms'; const birthdayProp = new FormProp({ type: ePropType.Date, name: 'birthday', - displayName: 'Date of Birth', + displayName: 'AbpIdentity::Birthday', validators: () => [Validators.required], }); @@ -36,63 +40,49 @@ export function birthdayPropContributor(propList: FormPropList) } export const identityCreateFormPropContributors: IdentityCreateFormPropContributors = { - 'Identity.UsersComponent': [birthdayPropContributor], + // enum indicates the page to add contributors to + [eIdentityComponents.Users]: [ + birthdayPropContributor, + // You can add more contributors here + ], }; -export const identityEditFormPropContributors: IdentityEditFormPropContributors = { - 'Identity.UsersComponent': [birthdayPropContributor], -}; +export const identityEditFormPropContributors = identityCreateFormPropContributors; +// you may define different contributors for edit form if you like ``` The list of props, conveniently named as `propList`, is a **doubly linked list**. That is why we have used the `addByIndex` method, which adds the given value to the specified index of the list. You may find [all available methods here](../Common/Utils/Linked-List.md). -> **Important Note 1:** AoT compilation does not support function calls in decorator metadata. This is why we have defined `birthdayPropContributor` as an exported function declaration here. Please do not forget exporting your contributor callbacks and forget about lambda functions (a.k.a. arrow functions). Please refer to [AoT metadata errors](https://angular.io/guide/aot-metadata-errors#function-calls-not-supported) for details. - -> **Important Note 2:** Please use one of the following if Ivy is not enabled in your project. Otherwise, you will get an "Expression form not supported." error. - -```js -export const identityCreateFormPropContributors: IdentityCreateFormPropContributors = { - 'Identity.UsersComponent': [ birthdayPropContributor ], -}; - -/* OR */ - -const identityCreateContributors: IdentityCreateFormPropContributors = {}; -identityCreateContributors[eIdentityComponents.Users] = [ birthdayPropContributor ]; -export const identityCreateFormPropContributors = identityCreateContributors; -``` - ### Step 2. Import and Use Form Prop Contributors Import `identityCreateFormPropContributors` and `identityEditFormPropContributors` in your routing module and pass it to the static `forLazy` method of `IdentityModule` as seen below: ```js +// src/app/app-routing.module.ts + +// other imports import { identityCreateFormPropContributors, identityEditFormPropContributors, } from './form-prop-contributors'; const routes: Routes = [ + // other routes + { - path: '', - component: DynamicLayoutComponent, - children: [ - { - path: 'identity', - loadChildren: () => - import('@volo/abp.ng.identity').then(m => - m.IdentityModule.forLazy({ - createFormPropContributors: identityCreateFormPropContributors, - editFormPropContributors: identityEditFormPropContributors, - }), - ), - }, - // other child routes - ], - // other routes - } + path: 'identity', + loadChildren: () => + import('@abp/ng.identity').then(m => + m.IdentityModule.forLazy({ + createFormPropContributors: identityCreateFormPropContributors, + editFormPropContributors: identityEditFormPropContributors, + }) + ), + }, + + // other routes ]; ``` diff --git a/docs/en/UI/Angular/images/form-prop-extensions---birthday-field.gif b/docs/en/UI/Angular/images/form-prop-extensions---birthday-field.gif new file mode 100644 index 0000000000000000000000000000000000000000..dd19f834e0af7569bb48c6306913e27bbc147bfd GIT binary patch literal 501343 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 z%0A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

    4kkpi@d=N>h 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

      QjgduM0hptp;oxd(g!}nu3@4P_1MQm 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

      SFW;U(j?)-6!`1CtGH6}$Lw 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%0Du7i^h3+6L2 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

      {{ user.userName }}

      +

      {%{{{ user.userName }}}%}

      - - + + - - + + - - + + - - + +
      {{ 'AbpIdentity::DisplayName:Name' | abpLocalization }}{{ user.name }}{%{{{ 'AbpIdentity::DisplayName:Name' | abpLocalization }}}%}{%{{{ user.name }}}%}
      {{ 'AbpIdentity::DisplayName:Surname' | abpLocalization }}{{ user.surname }}{%{{{ 'AbpIdentity::DisplayName:Surname' | abpLocalization }}}%}{%{{{ user.surname }}}%}
      {{ 'AbpIdentity::EmailAddress' | abpLocalization }}{{ user.email }}{%{{{ 'AbpIdentity::EmailAddress' | abpLocalization }}}%}{%{{{ user.email }}}%}
      {{ 'AbpIdentity::PhoneNumber' | abpLocalization }}{{ user.phoneNumber }}{%{{{ 'AbpIdentity::PhoneNumber' | abpLocalization }}}%}{%{{{ user.phoneNumber }}}%}
      @@ -181,7 +181,7 @@ Let's employ dependency injection to extend the functionality of `IdentityModule From f4ca3b8bc2c76acf63f7a1b8436662b0b8872596 Mon Sep 17 00:00:00 2001 From: Mehmet Erim <34455572+mehmet-erim@users.noreply.github.com> Date: Wed, 6 Jan 2021 00:16:12 +0300 Subject: [PATCH 214/217] Update npm/ng-packs/packages/theme-shared/src/lib/tests/loader-bar.component.spec.ts --- .../theme-shared/src/lib/tests/loader-bar.component.spec.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tests/loader-bar.component.spec.ts b/npm/ng-packs/packages/theme-shared/src/lib/tests/loader-bar.component.spec.ts index a7b2f0bac7..2326009044 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/tests/loader-bar.component.spec.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/tests/loader-bar.component.spec.ts @@ -48,7 +48,6 @@ describe('LoaderBarComponent', () => { const httpWaitService = spectator.inject(HttpWaitService); httpWaitService.addRequest(new HttpRequest('GET', 'test')); expect(spectator.component.interval.closed).toBe(false); - /**/ timer(400).subscribe(() => { expect(spectator.component.interval.closed).toBe(true); done(); From b3bef4c8b37cd3c4a30b141dab9cb515685b15f0 Mon Sep 17 00:00:00 2001 From: Rwing Date: Wed, 6 Jan 2021 09:26:13 +0800 Subject: [PATCH 215/217] docs: fix typo blog -> blob --- docs/en/Blob-Storing-Aliyun.md | 2 +- docs/en/Blob-Storing-Aws.md | 2 +- docs/en/Blob-Storing-Azure.md | 2 +- docs/en/Blob-Storing-Minio.md | 2 +- docs/zh-Hans/Blob-Storing-Aliyun.md | 2 +- docs/zh-Hans/Blob-Storing-Aws.md | 2 +- docs/zh-Hans/Blob-Storing-Azure.md | 2 +- docs/zh-Hans/Blob-Storing-Minio.md | 2 +- docs/zh-Hans/Blob-Storing.md | 10 +++++----- 9 files changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/en/Blob-Storing-Aliyun.md b/docs/en/Blob-Storing-Aliyun.md index 62e57e58c7..6cdebb3acc 100644 --- a/docs/en/Blob-Storing-Aliyun.md +++ b/docs/en/Blob-Storing-Aliyun.md @@ -55,7 +55,7 @@ Configure(options => * **RoleSessionName** ([NotNull]string): Used to identify the temporary access credentials, it is recommended to use different application users to distinguish. * **Policy** (string): Additional permission restrictions. See the [document](https://help.aliyun.com/document_detail/100680.html) for details. * **DurationSeconds** (int): Validity period(s) of a temporary access certificate,minimum is 900 and the maximum is 3600. -* **ContainerName** (string): You can specify the container name in Aliyun. If this is not specified, it uses the name of the BLOB container defined with the `BlogContainerName` attribute (see the [BLOB storing document](Blob-Storing.md)). Please note that Aliyun has some **rules for naming containers**. A container name must be a valid DNS name, conforming to the [following naming rules](https://help.aliyun.com/knowledge_detail/39668.html): +* **ContainerName** (string): You can specify the container name in Aliyun. If this is not specified, it uses the name of the BLOB container defined with the `BlobContainerName` attribute (see the [BLOB storing document](Blob-Storing.md)). Please note that Aliyun has some **rules for naming containers**. A container name must be a valid DNS name, conforming to the [following naming rules](https://help.aliyun.com/knowledge_detail/39668.html): * Container names must start or end with a letter or number, and can contain only letters, numbers, and the dash (-) character. * Container names Must start and end with lowercase letters and numbers. * Container names must be from **3** through **63** characters long. diff --git a/docs/en/Blob-Storing-Aws.md b/docs/en/Blob-Storing-Aws.md index cfee5c3f57..05e3caa183 100644 --- a/docs/en/Blob-Storing-Aws.md +++ b/docs/en/Blob-Storing-Aws.md @@ -60,7 +60,7 @@ Configure(options => * **Region** (string): The system name of the service. * **Policy** (string): An IAM policy in JSON format that you want to use as an inline session policy. * **DurationSeconds** (int): Validity period(s) of a temporary access certificate,minimum is 900 and the maximum is 3600. **note**: Using subaccounts operated OSS,if the value is 0. -* **ContainerName** (string): You can specify the container name in Aws. If this is not specified, it uses the name of the BLOB container defined with the `BlogContainerName` attribute (see the [BLOB storing document](Blob-Storing.md)). Please note that Aws has some **rules for naming containers**. A container name must be a valid DNS name, conforming to the [following naming rules](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html): +* **ContainerName** (string): You can specify the container name in Aws. If this is not specified, it uses the name of the BLOB container defined with the `BlobContainerName` attribute (see the [BLOB storing document](Blob-Storing.md)). Please note that Aws has some **rules for naming containers**. A container name must be a valid DNS name, conforming to the [following naming rules](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html): * Bucket names must be between **3** and **63** characters long. * Bucket names can consist only of **lowercase** letters, numbers, dots (.), and hyphens (-). * Bucket names must begin and end with a letter or number. diff --git a/docs/en/Blob-Storing-Azure.md b/docs/en/Blob-Storing-Azure.md index 9d033013da..de6ed63152 100644 --- a/docs/en/Blob-Storing-Azure.md +++ b/docs/en/Blob-Storing-Azure.md @@ -40,7 +40,7 @@ Configure(options => ### Options * **ConnectionString** (string): A connection string includes the authorization information required for your application to access data in an Azure Storage account at runtime using Shared Key authorization. Please refer to Azure documentation: https://docs.microsoft.com/en-us/azure/storage/common/storage-configure-connection-string -* **ContainerName** (string): You can specify the container name in azure. If this is not specified, it uses the name of the BLOB container defined with the `BlogContainerName` attribute (see the [BLOB storing document](Blob-Storing.md)). Please note that Azure has some **rules for naming containers**. A container name must be a valid DNS name, conforming to the [following naming rules](https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata#container-names): +* **ContainerName** (string): You can specify the container name in azure. If this is not specified, it uses the name of the BLOB container defined with the `BlobContainerName` attribute (see the [BLOB storing document](Blob-Storing.md)). Please note that Azure has some **rules for naming containers**. A container name must be a valid DNS name, conforming to the [following naming rules](https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata#container-names): * Container names must start or end with a letter or number, and can contain only letters, numbers, and the dash (-) character. * Every dash (-) character must be immediately preceded and followed by a letter or number; consecutive dashes are not permitted in container names. * All letters in a container name must be **lowercase**. diff --git a/docs/en/Blob-Storing-Minio.md b/docs/en/Blob-Storing-Minio.md index 505c6721b0..6e0d7626b7 100644 --- a/docs/en/Blob-Storing-Minio.md +++ b/docs/en/Blob-Storing-Minio.md @@ -43,7 +43,7 @@ Configure(options => * **EndPoint** (string): URL to object storage service. Please refer to MinIO Client SDK for .NET: https://docs.min.io/docs/dotnet-client-quickstart-guide.html * **AccessKey** (string): Access key is the user ID that uniquely identifies your account. * **SecretKey** (string): Secret key is the password to your account. -* **BucketName** (string): You can specify the bucket name in MinIO. If this is not specified, it uses the name of the BLOB container defined with the `BlogContainerName` attribute (see the [BLOB storing document](Blob-Storing.md)).MinIO is the defacto standard for S3 compatibility, So MinIO has some **rules for naming bucket**. The [following rules](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html) apply for naming MinIO buckets: +* **BucketName** (string): You can specify the bucket name in MinIO. If this is not specified, it uses the name of the BLOB container defined with the `BlobContainerName` attribute (see the [BLOB storing document](Blob-Storing.md)).MinIO is the defacto standard for S3 compatibility, So MinIO has some **rules for naming bucket**. The [following rules](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html) apply for naming MinIO buckets: * Bucket names must be between **3** and **63** characters long. * Bucket names can consist only of **lowercase** letters, numbers, dots (.), and hyphens (-). * Bucket names must begin and end with a letter or number. diff --git a/docs/zh-Hans/Blob-Storing-Aliyun.md b/docs/zh-Hans/Blob-Storing-Aliyun.md index ded28fbc93..c8a1e68bc7 100644 --- a/docs/zh-Hans/Blob-Storing-Aliyun.md +++ b/docs/zh-Hans/Blob-Storing-Aliyun.md @@ -55,7 +55,7 @@ Configure(options => * **RoleSessionName** ([NotNull]string): 用来标识临时访问凭证的名称,建议使用不同的应用程序用户来区分. * **Policy** (string): 在扮演角色的时候额外添加的权限限制. 请参见[基于RAM Policy的权限控制](https://help.aliyun.com/document_detail/100680.html). * **DurationSeconds** (int): 设置临时访问凭证的有效期,单位是s,最小为900,最大为3600. -* **ContainerName** (string): 你可以在aliyun中指定容器名称. 如果没有指定它将使用 `BlogContainerName` 属性定义的BLOB容器的名称(请参阅[BLOB存储文档](Blob-Storing.md)). 请注意Aliyun有一些**命名容器的规则**,容器名称必须是有效的DNS名称,[符合以下命名规则](https://help.aliyun.com/knowledge_detail/39668.html): +* **ContainerName** (string): 你可以在aliyun中指定容器名称. 如果没有指定它将使用 `BlobContainerName` 属性定义的BLOB容器的名称(请参阅[BLOB存储文档](Blob-Storing.md)). 请注意Aliyun有一些**命名容器的规则**,容器名称必须是有效的DNS名称,[符合以下命名规则](https://help.aliyun.com/knowledge_detail/39668.html): * 只能包含小写字母,数字和短横线(-) * 必须以小写字母和数字开头和结尾 * Bucket名称的长度限制在**3**到**63**个字符之间 diff --git a/docs/zh-Hans/Blob-Storing-Aws.md b/docs/zh-Hans/Blob-Storing-Aws.md index 0ecb59bbf5..7bfb998297 100644 --- a/docs/zh-Hans/Blob-Storing-Aws.md +++ b/docs/zh-Hans/Blob-Storing-Aws.md @@ -59,7 +59,7 @@ Configure(options => * **Region** (string): 服务的地区名称. * **Policy** (string): JSON格式的IAM策略. * **DurationSeconds** (int): 设置临时访问凭证的有效期,单位是s,最小为900,最大为129600. -* **ContainerName** (string): 你可以在Aws中指定容器名称. 如果没有指定它将使用 `BlogContainerName` 属性定义的BLOB容器的名称(请参阅[BLOB存储文档](Blob-Storing.md)). 请注意Aws有一些**命名容器的规则**,容器名称必须是有效的DNS名称,[符合以下命名规则](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html): +* **ContainerName** (string): 你可以在Aws中指定容器名称. 如果没有指定它将使用 `BlobContainerName` 属性定义的BLOB容器的名称(请参阅[BLOB存储文档](Blob-Storing.md)). 请注意Aws有一些**命名容器的规则**,容器名称必须是有效的DNS名称,[符合以下命名规则](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html): * Bucket名称必须介于 3 到 63 个字符之间. * Bucket名称只能由小写字母、数字、句点 (.) 和连字符 (-) 组成. * Bucket名称必须以字母或数字开头和结尾. diff --git a/docs/zh-Hans/Blob-Storing-Azure.md b/docs/zh-Hans/Blob-Storing-Azure.md index b6f54cd72c..8eecc1fde3 100644 --- a/docs/zh-Hans/Blob-Storing-Azure.md +++ b/docs/zh-Hans/Blob-Storing-Azure.md @@ -40,7 +40,7 @@ Configure(options => ### 选项 * **ConnectionString** (string): 连接字符串包括应用程序在运行时使用共享密钥授权访问Azure存储帐户中的数据所需的授权信息. 请参考[Azure文档](https://docs.microsoft.com/en-us/azure/storage/common/storage-configure-connection-string). -* **ContainerName** (string): 你可以在azure中指定容器名称. 如果没有指定它将使用 `BlogContainerName` 属性定义的BLOB容器的名称(请参阅[BLOB存储文档](Blob-Storing.md)). 请注意Azure有一些**命名容器的规则**,容器名称必须是有效的DNS名称,[符合以下命名规则](https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata#container-names): +* **ContainerName** (string): 你可以在azure中指定容器名称. 如果没有指定它将使用 `BlobContainerName` 属性定义的BLOB容器的名称(请参阅[BLOB存储文档](Blob-Storing.md)). 请注意Azure有一些**命名容器的规则**,容器名称必须是有效的DNS名称,[符合以下命名规则](https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata#container-names): * 容器名称必须以字母或数字开头或结尾,并且只能包含字母,数字和破折号(-)字符. * 每个破折号(-)必须紧跟在字母或数字之后;容器名称中不允许使用连续的破折号. * 容器名称中的所有字母都必须**小写**. diff --git a/docs/zh-Hans/Blob-Storing-Minio.md b/docs/zh-Hans/Blob-Storing-Minio.md index 3c4bec721d..fb98281f02 100644 --- a/docs/zh-Hans/Blob-Storing-Minio.md +++ b/docs/zh-Hans/Blob-Storing-Minio.md @@ -43,7 +43,7 @@ Configure(options => * **EndPoint** (string): 你的Minio对象存储服务的URL, 查看文档:https://docs.min.io/docs/dotnet-client-quickstart-guide.html * **AccessKey** (string): Access key是唯一标识你的账户的用户ID, * **SecretKey** (string): Access key是唯一标识你的账户的用户ID -* **BucketName** (string):你可以指定bucket名称,如果没有指定,将使用 `BlogContainerName` 属性定义的BLOB容器的名称(查阅[BLOB storing document](Blob-Storing.md)),MinIO完全兼容S3标准,所以有一些 **bucket命名规则**,必须符合[规则](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html): +* **BucketName** (string):你可以指定bucket名称,如果没有指定,将使用 `BlobContainerName` 属性定义的BLOB容器的名称(查阅[BLOB storing document](Blob-Storing.md)),MinIO完全兼容S3标准,所以有一些 **bucket命名规则**,必须符合[规则](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html): * Bucket名称必须介于 3 到 63 个字符之间. * Bucket名称只能由小写字母、数字、句点 (.) 和连字符 (-) 组成. * Bucket名称必须以字母或数字开头和结尾. diff --git a/docs/zh-Hans/Blob-Storing.md b/docs/zh-Hans/Blob-Storing.md index 02df60580b..9321c51cb9 100644 --- a/docs/zh-Hans/Blob-Storing.md +++ b/docs/zh-Hans/Blob-Storing.md @@ -10,7 +10,7 @@ ABP框架为BLOB提供了抽象,并提供了一些可以轻松集成到的预构 * 你可以**轻松的更改**BLOB存储,而不用改变你的应用程序代码. * 如果你想创建**可重用的应用程序模块**,无需假设BLOB的存储方式. -ABP BLOG存储系统兼容ABP框架其他功能,如[多租户](Multi-Tenancy.md). +ABP BLOB存储系统兼容ABP框架其他功能,如[多租户](Multi-Tenancy.md). ## BLOB 存储提供程序 @@ -18,7 +18,7 @@ ABP框架已经有以下存储提供程序的实现; * [File System](Blob-Storing-File-System.md):将BLOB作为标准文件存储在本地文件系统的文件夹中. * [Database](Blob-Storing-Database.md): 将BLOB存储在数据库中. -* [Azure](Blob-Storing-Azure.md): 将BLOG存储在 [Azure BLOB storage](https://azure.microsoft.com/en-us/services/storage/blobs/)中. +* [Azure](Blob-Storing-Azure.md): 将BLOB存储在 [Azure BLOB storage](https://azure.microsoft.com/en-us/services/storage/blobs/)中. * [Aliyun](Blob-Storing-Aliyun.md): 将BLOB存储在[Aliyun Storage Service](https://help.aliyun.com/product/31815.html)中. * [Minio](Blob-Storing-Minio.md): 将BLOB存储在[MinIO Object storage](https://min.io/)中. * [Aws](Blob-Storing-Aws.md): 将BLOB存储在[Amazon Simple Storage Service](https://aws.amazon.com/s3/)中. @@ -95,9 +95,9 @@ namespace AbpDemo ### 读取/获取 BLOB * `GetAsync`: 返回给定BLOB名称可用于读取BLOB内容的 `Stream` 对象. 使用后始终要**dispose流**. 如果找不到具有给定名称的BLOB,则抛出异常. -* `GetOrNullAsync`: 与 `GetAsync` 方法相反,如果未找到给定名称的BLOG,则返回 `null`. +* `GetOrNullAsync`: 与 `GetAsync` 方法相反,如果未找到给定名称的BLOB,则返回 `null`. * `GetAllBytesAsync`: 返回 `byte[]` 而不是 `Stream`. 如果找不到具有给定名称的BLOB,则抛出异常. -* `GetAllBytesOrNullAsync`: 与 `GetAllBytesAsync` 方法相反,如果未找到给定名称的BLOG,则返回 `null`. +* `GetAllBytesOrNullAsync`: 与 `GetAllBytesAsync` 方法相反,如果未找到给定名称的BLOB,则返回 `null`. ### 删除 BLOB @@ -300,7 +300,7 @@ Configure(options => ## BLOB 存储 vs 文件管理系统 -注意BLOB存储不是一个文件管理系统. 它是一个用于保存,获取和删除命名BLOG的低级别系统. 它不提供目录那样的层次结构,这是典型文件系统所期望的. +注意BLOB存储不是一个文件管理系统. 它是一个用于保存,获取和删除命名BLOB的低级别系统. 它不提供目录那样的层次结构,这是典型文件系统所期望的. 如果你想创建文件夹并在文件夹之间移动文件,为文件分配权限并在用户之间共享文件,那么你需要在BLOB存储系统上实现你自己的应用程序. From 37e3924f00c0490f23fb2a770c46a2558b9fc722 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 6 Jan 2021 10:46:13 +0800 Subject: [PATCH 216/217] Use commas to separate header objects. Fix #7031 --- .../Generators/ProxyScriptingJsFuncHelper.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/ProxyScriptingJsFuncHelper.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/ProxyScriptingJsFuncHelper.cs index aa9c1fdaa0..46eb2fca13 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/ProxyScriptingJsFuncHelper.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/ProxyScriptingJsFuncHelper.cs @@ -123,10 +123,9 @@ namespace Volo.Abp.Http.ProxyScripting.Generators sb.AppendLine("{"); - foreach (var prm in parameters) - { - sb.AppendLine($"{new string(' ', indent)} '{prm.Name}': {GetParamNameInJsFunc(prm)}"); - } + sb.AppendLine(parameters + .Select(prm => $"{new string(' ', indent)} '{prm.Name}': {GetParamNameInJsFunc(prm)}") + .JoinAsString(", " + Environment.NewLine)); sb.Append(new string(' ', indent) + "}"); From 12345e2c0abddf37ab0522575064335ebdffbcfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A7=E9=A3=8E?= <46520648+hrx521@users.noreply.github.com> Date: Wed, 6 Jan 2021 11:36:46 +0800 Subject: [PATCH 217/217] Update Navigation-Menu.md --- docs/en/UI/Blazor/Navigation-Menu.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/UI/Blazor/Navigation-Menu.md b/docs/en/UI/Blazor/Navigation-Menu.md index 331de7a4cb..7f09a65dbb 100644 --- a/docs/en/UI/Blazor/Navigation-Menu.md +++ b/docs/en/UI/Blazor/Navigation-Menu.md @@ -137,7 +137,7 @@ var myService = context.ServiceProvider.GetRequiredService(); ### The Administration Menu -There is a special menu item in the menu menu that is added by the ABP Framework: The *Administration* menu. It is typically used by the pre-built admin [application modules](../../Modules/Index.md): +There is a special menu item in the menu that is added by the ABP Framework: The *Administration* menu. It is typically used by the pre-built admin [application modules](../../Modules/Index.md): ![nav-main-menu-administration](../../images/nav-main-menu-administration.png)

      wy<3n?ZZ1a@aQD>D$YNwr* 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 BwEqAA literal 0 HcmV?d00001 From 89792d2aaff000ed9409d00353f35981f86b4248 Mon Sep 17 00:00:00 2001 From: muhammedaltug Date: Tue, 5 Jan 2021 23:47:11 +0300 Subject: [PATCH 210/217] - fix loader delay in http wait service - add delay to router wait service - provide delay 0 in loader test - loader delay token moved to core module --- .../src/lib/services/http-wait.service.ts | 57 ++++++++++--------- .../src/lib/services/router-wait.service.ts | 33 ++++++----- .../packages/core/src/lib/tokens/index.ts | 1 + .../src/lib/tokens/lodaer-delay.token.ts | 0 .../testing/src/lib/core-testing.module.ts | 7 ++- .../loader-bar/loader-bar.component.ts | 12 ++-- .../theme-shared/src/lib/models/common.ts | 1 - .../lib/tests/loader-bar.component.spec.ts | 7 +-- .../src/lib/theme-shared.module.ts | 7 +-- .../theme-shared/src/lib/tokens/index.ts | 1 - .../src/lib/theme-shared-testing.module.ts | 5 -- 11 files changed, 65 insertions(+), 66 deletions(-) rename npm/ng-packs/packages/{theme-shared => core}/src/lib/tokens/lodaer-delay.token.ts (100%) diff --git a/npm/ng-packs/packages/core/src/lib/services/http-wait.service.ts b/npm/ng-packs/packages/core/src/lib/services/http-wait.service.ts index a981ac400a..7292490a4b 100644 --- a/npm/ng-packs/packages/core/src/lib/services/http-wait.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/http-wait.service.ts @@ -1,13 +1,14 @@ -import { Injectable } from '@angular/core'; +import { Injectable, Injector } from '@angular/core'; import { HttpRequest } from '@angular/common/http'; import { InternalStore } from '../utils/internal-store-utils'; import { getPathName } from '../utils/http-utils'; -import { debounceTime, tap } from 'rxjs/operators'; +import { map, mapTo, switchMap, takeUntil, tap } from 'rxjs/operators'; +import { of, Subject, timer } from 'rxjs'; +import { LOADER_DELAY } from '../tokens/lodaer-delay.token'; export interface HttpWaitState { - requests: Set>; + requests: HttpRequest[]; filteredRequests: Array; - delay: number; } export interface HttpRequestInfo { method: string; @@ -18,19 +19,35 @@ export interface HttpRequestInfo { }) export class HttpWaitService { protected store = new InternalStore({ - requests: new Set(), + requests: [], filteredRequests: [], - delay: 0, }); + private delay: number; + private destroy$ = new Subject(); + + constructor(injector: Injector) { + this.delay = injector.get(LOADER_DELAY, 500); + } + getLoading() { return !!this.applyFilter(this.store.state.requests).length; } getLoading$() { return this.store - .sliceState(({ requests }) => !!this.applyFilter(requests).length) - .pipe(this.debounceWhenLoading()); + .sliceState(({ requests }) => requests) + .pipe( + map(requests => !!this.applyFilter(requests).length), + switchMap(condition => + condition + ? this.delay === 0 + ? of(true) + : timer(this.delay).pipe(mapTo(true), takeUntil(this.destroy$)) + : of(false), + ), + tap(() => this.destroy$.next()), + ); } updateLoading$() { @@ -38,19 +55,15 @@ export class HttpWaitService { } clearLoading() { - this.store.patch({ requests: new Set() }); + this.store.patch({ requests: [] }); } addRequest(request: HttpRequest) { - let { requests } = this.store.state; - requests = new Set(requests.values()); - requests.add(request); - this.store.patch({ requests }); + this.store.patch({ requests: [...this.store.state.requests, request] }); } deleteRequest(request: HttpRequest) { - const { requests } = this.store.state; - requests.delete(request); + const requests = this.store.state.requests.filter(r => r !== request); this.store.patch({ requests }); } @@ -73,13 +86,9 @@ export class HttpWaitService { this.store.patch({ filteredRequests }); } - setDelay(delay: number) { - this.store.patch({ delay }); - } - - private applyFilter(requests: Set>) { + private applyFilter(requests: HttpRequest[]) { const { filteredRequests } = this.store.state; - return Array.from(requests).filter( + return requests.filter( ({ method, url }) => !filteredRequests.find(filteredRequest => this.isSameRequest(filteredRequest, { method, endpoint: getPathName(url) }), @@ -91,10 +100,4 @@ export class HttpWaitService { const { method, endpoint } = filteredRequest; return endpoint === request.endpoint && method === request.method; } - - private debounceWhenLoading() { - return this.store.state.delay && !!this.applyFilter(this.store.state.requests).length - ? debounceTime(this.store.state.delay) - : tap(); - } } diff --git a/npm/ng-packs/packages/core/src/lib/services/router-wait.service.ts b/npm/ng-packs/packages/core/src/lib/services/router-wait.service.ts index d1306e63c9..56240d8ca2 100644 --- a/npm/ng-packs/packages/core/src/lib/services/router-wait.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/router-wait.service.ts @@ -1,13 +1,9 @@ -import { Injectable } from '@angular/core'; -import { - NavigationCancel, - NavigationEnd, - NavigationError, - NavigationStart, - Router, -} from '@angular/router'; -import { filter } from 'rxjs/operators'; +import { Injectable, Injector } from '@angular/core'; +import { NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Router } from '@angular/router'; +import { filter, map, mapTo, switchMap, takeUntil, tap } from 'rxjs/operators'; import { InternalStore } from '../utils/internal-store-utils'; +import { of, Subject, timer } from 'rxjs'; +import { LOADER_DELAY } from '../tokens/lodaer-delay.token'; export interface RouterWaitState { loading: boolean; @@ -18,7 +14,10 @@ export interface RouterWaitState { }) export class RouterWaitService { private store = new InternalStore({ loading: false }); - constructor(private router: Router) { + private destroy$ = new Subject(); + private delay: number; + constructor(private router: Router, injector: Injector) { + this.delay = injector.get(LOADER_DELAY, 500); this.router.events .pipe( filter( @@ -28,10 +27,18 @@ export class RouterWaitService { event instanceof NavigationError || event instanceof NavigationCancel, ), + map(event => event instanceof NavigationStart), + switchMap(condition => + condition + ? this.delay === 0 + ? of(true) + : timer(this.delay || 0).pipe(mapTo(true), takeUntil(this.destroy$)) + : of(false), + ), + tap(() => this.destroy$.next()), ) - .subscribe(event => { - if (event instanceof NavigationStart) this.setLoading(true); - else this.setLoading(false); + .subscribe(status => { + this.setLoading(status); }); } diff --git a/npm/ng-packs/packages/core/src/lib/tokens/index.ts b/npm/ng-packs/packages/core/src/lib/tokens/index.ts index 8d23d581a5..2e79e70ef3 100644 --- a/npm/ng-packs/packages/core/src/lib/tokens/index.ts +++ b/npm/ng-packs/packages/core/src/lib/tokens/index.ts @@ -1,2 +1,3 @@ export * from './list.token'; +export * from './lodaer-delay.token'; export * from './options.token'; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tokens/lodaer-delay.token.ts b/npm/ng-packs/packages/core/src/lib/tokens/lodaer-delay.token.ts similarity index 100% rename from npm/ng-packs/packages/theme-shared/src/lib/tokens/lodaer-delay.token.ts rename to npm/ng-packs/packages/core/src/lib/tokens/lodaer-delay.token.ts diff --git a/npm/ng-packs/packages/core/testing/src/lib/core-testing.module.ts b/npm/ng-packs/packages/core/testing/src/lib/core-testing.module.ts index adfbaca816..ec48b740f7 100644 --- a/npm/ng-packs/packages/core/testing/src/lib/core-testing.module.ts +++ b/npm/ng-packs/packages/core/testing/src/lib/core-testing.module.ts @@ -1,8 +1,8 @@ import { ABP, BaseCoreModule, - coreOptionsFactory, CORE_OPTIONS, + coreOptionsFactory, LIST_QUERY_DEBOUNCE_TIME, PermissionService, RestService, @@ -14,6 +14,7 @@ import { provideRoutes } from '@angular/router'; import { RouterTestingModule } from '@angular/router/testing'; import { MockPermissionService } from './services/mock-permission.service'; import { MockRestService } from './services/mock-rest.service'; +import { LOADER_DELAY } from '../../../src/lib/tokens/lodaer-delay.token'; /** * CoreTestingModule is the module that will be used in tests @@ -52,6 +53,10 @@ export class CoreTestingModule { provide: RestService, useClass: MockRestService, }, + { + provide: LOADER_DELAY, + useValue: 0, + }, provideRoutes(routes), ], }; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts index bae858ad09..3fd01d1b4d 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts @@ -1,8 +1,7 @@ import { HttpWaitService, RouterWaitService, SubscriptionService } from '@abp/ng.core'; -import { ChangeDetectorRef, Component, Inject, Input, OnDestroy, OnInit } from '@angular/core'; +import { ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core'; import { Router } from '@angular/router'; import { combineLatest, Subscription, timer } from 'rxjs'; -import { LOADER_DELAY } from '../../tokens/lodaer-delay.token'; @Component({ selector: 'abp-loader-bar', @@ -77,11 +76,8 @@ export class LoaderBarComponent implements OnDestroy, OnInit { private cdRef: ChangeDetectorRef, private subscription: SubscriptionService, private httpWaitService: HttpWaitService, - private routerWaiterService: RouterWaitService, - @Inject(LOADER_DELAY) delay: number, - ) { - this.httpWaitService.setDelay(delay); - } + private routerWaitService: RouterWaitService, + ) {} ngOnInit() { this.subscribeLoading(); @@ -89,7 +85,7 @@ export class LoaderBarComponent implements OnDestroy, OnInit { subscribeLoading() { this.subscription.addOne( - combineLatest([this.httpWaitService.getLoading$(), this.routerWaiterService.getLoading$()]), + combineLatest([this.httpWaitService.getLoading$(), this.routerWaitService.getLoading$()]), ([httpLoading, routerLoading]) => { if (httpLoading || routerLoading) this.startLoading(); else this.stopLoading(); diff --git a/npm/ng-packs/packages/theme-shared/src/lib/models/common.ts b/npm/ng-packs/packages/theme-shared/src/lib/models/common.ts index 48c40abfe8..64047e0db7 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/models/common.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/models/common.ts @@ -4,7 +4,6 @@ import { Validation } from '@ngx-validate/core'; export interface RootParams { httpErrorConfig: HttpErrorConfig; validation?: Partial; - loaderDelay?: number; } export type ErrorScreenErrorCodes = 401 | 403 | 404 | 500; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tests/loader-bar.component.spec.ts b/npm/ng-packs/packages/theme-shared/src/lib/tests/loader-bar.component.spec.ts index af1f8d874a..a7b2f0bac7 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/tests/loader-bar.component.spec.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/tests/loader-bar.component.spec.ts @@ -2,9 +2,8 @@ import { NavigationEnd, NavigationError, NavigationStart, Router } from '@angula import { createComponentFactory, Spectator, SpyObject } from '@ngneat/spectator/jest'; import { Subject, timer } from 'rxjs'; import { LoaderBarComponent } from '../components/loader-bar/loader-bar.component'; -import { HttpWaitService, SubscriptionService } from '@abp/ng.core'; +import { HttpWaitService, LOADER_DELAY, SubscriptionService } from '@abp/ng.core'; import { HttpRequest } from '@angular/common/http'; -import { LOADER_DELAY } from '../tokens/lodaer-delay.token'; describe('LoaderBarComponent', () => { let spectator: Spectator; @@ -44,12 +43,12 @@ describe('LoaderBarComponent', () => { }, 10); }); - test.skip('should be interval unsubscribed', done => { + it('should be interval unsubscribed', done => { spectator.detectChanges(); const httpWaitService = spectator.inject(HttpWaitService); httpWaitService.addRequest(new HttpRequest('GET', 'test')); expect(spectator.component.interval.closed).toBe(false); - + /**/ timer(400).subscribe(() => { expect(spectator.component.interval.closed).toBe(true); done(); diff --git a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts index 4aa8ba7d85..8d64febdbf 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts @@ -36,7 +36,6 @@ import { THEME_SHARED_ROUTE_PROVIDERS } from './providers/route.provider'; import { THEME_SHARED_APPEND_CONTENT } from './tokens/append-content.token'; import { HTTP_ERROR_CONFIG, httpErrorConfigFactory } from './tokens/http-error.token'; import { DateParserFormatter } from './utils/date-parser-formatter'; -import { LOADER_DELAY } from './tokens/lodaer-delay.token'; const declarationsWithExports = [ BreadcrumbComponent, @@ -78,7 +77,7 @@ export class BaseThemeSharedModule {} }) export class ThemeSharedModule { static forRoot( - { httpErrorConfig, validation = {}, loaderDelay = 500 } = {} as RootParams, + { httpErrorConfig, validation = {} } = {} as RootParams, ): ModuleWithProviders { return { ngModule: ThemeSharedModule, @@ -124,10 +123,6 @@ export class ThemeSharedModule { provide: VALIDATION_VALIDATE_ON_SUBMIT, useValue: validation.validateOnSubmit, }, - { - provide: LOADER_DELAY, - useValue: loaderDelay, - }, ], }; } diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tokens/index.ts b/npm/ng-packs/packages/theme-shared/src/lib/tokens/index.ts index 2065727e3e..18a2aac2f6 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/tokens/index.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/tokens/index.ts @@ -1,5 +1,4 @@ export * from './append-content.token'; export * from './http-error.token'; export * from './lazy-styles.token'; -export * from './lodaer-delay.token'; export * from './suppress-unsaved-changes-warning.token'; diff --git a/npm/ng-packs/packages/theme-shared/testing/src/lib/theme-shared-testing.module.ts b/npm/ng-packs/packages/theme-shared/testing/src/lib/theme-shared-testing.module.ts index 629ebaad79..52abb12ffe 100644 --- a/npm/ng-packs/packages/theme-shared/testing/src/lib/theme-shared-testing.module.ts +++ b/npm/ng-packs/packages/theme-shared/testing/src/lib/theme-shared-testing.module.ts @@ -3,7 +3,6 @@ import { DateParserFormatter, DEFAULT_VALIDATION_BLUEPRINTS, THEME_SHARED_ROUTE_PROVIDERS, - LOADER_DELAY, } from '@abp/ng.theme.shared'; import { ModuleWithProviders, NgModule } from '@angular/core'; import { RouterTestingModule } from '@angular/router/testing'; @@ -47,10 +46,6 @@ export class ThemeSharedTestingModule { provide: VALIDATION_VALIDATE_ON_SUBMIT, useValue: validation.validateOnSubmit, }, - { - provide: LOADER_DELAY, - useValue: 0, - }, ], }; } From fe50c6c8c0f6421d5828d4d3eff908981ce11ba8 Mon Sep 17 00:00:00 2001 From: muhammedaltug Date: Tue, 5 Jan 2021 23:57:38 +0300 Subject: [PATCH 211/217] - fix import --- .../packages/core/testing/src/lib/core-testing.module.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/core/testing/src/lib/core-testing.module.ts b/npm/ng-packs/packages/core/testing/src/lib/core-testing.module.ts index ec48b740f7..1718946cab 100644 --- a/npm/ng-packs/packages/core/testing/src/lib/core-testing.module.ts +++ b/npm/ng-packs/packages/core/testing/src/lib/core-testing.module.ts @@ -4,6 +4,7 @@ import { CORE_OPTIONS, coreOptionsFactory, LIST_QUERY_DEBOUNCE_TIME, + LOADER_DELAY, PermissionService, RestService, } from '@abp/ng.core'; @@ -14,7 +15,6 @@ import { provideRoutes } from '@angular/router'; import { RouterTestingModule } from '@angular/router/testing'; import { MockPermissionService } from './services/mock-permission.service'; import { MockRestService } from './services/mock-rest.service'; -import { LOADER_DELAY } from '../../../src/lib/tokens/lodaer-delay.token'; /** * CoreTestingModule is the module that will be used in tests From 1e88a5c057509150da6b88995e1dff796f41e469 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Wed, 6 Jan 2021 00:12:11 +0300 Subject: [PATCH 212/217] update toolbar action extensions document --- docs/en/UI/Angular/Page-Toolbar-Extensions.md | 126 ++++++++---------- .../toolbar-action-extensions---click-me.gif | Bin 0 -> 104440 bytes ...r-action-extensions---custom-component.gif | Bin 0 -> 107466 bytes 3 files changed, 54 insertions(+), 72 deletions(-) create mode 100644 docs/en/UI/Angular/images/toolbar-action-extensions---click-me.gif create mode 100644 docs/en/UI/Angular/images/toolbar-action-extensions---custom-component.gif diff --git a/docs/en/UI/Angular/Page-Toolbar-Extensions.md b/docs/en/UI/Angular/Page-Toolbar-Extensions.md index 187ac9387d..7e63950224 100644 --- a/docs/en/UI/Angular/Page-Toolbar-Extensions.md +++ b/docs/en/UI/Angular/Page-Toolbar-Extensions.md @@ -4,7 +4,7 @@ Page toolbar extension system allows you to add a new action to the toolbar of a page. A "Click Me" action was added to the user management page below: -![Page Toolbar Extension Example: "Click Me!" Action](images/user-page-toolbar-extension-click-me-ng.png) +Page Toolbar Extension Example: 'Click Me!' Action You can take any action (open a modal, make an HTTP API call, redirect to another page... etc) by writing your custom code. You can also access to page data (the main record, usually an entity list) in your code. Additionally, you can pass in custom components instead of using the default button. @@ -17,10 +17,14 @@ In this example, we will add a "Click Me!" action and log `userName` of all user The following code prepares a constant named `identityToolbarActionContributors`, ready to be imported and used in your root module: ```js -// toolbar-action-contributors.ts +// src/app/toolbar-action-contributors.ts -import { ToolbarActionList, ToolbarAction } from '@abp/ng.theme.shared/extensions'; -import { IdentityToolbarActionContributors, IdentityUserDto } from '@volo/abp.ng.identity'; +import { + eIdentityComponents, + IdentityToolbarActionContributors, + IdentityUserDto, +} from '@abp/ng.identity'; +import { ToolbarAction, ToolbarActionList } from '@abp/ng.theme.shared/extensions'; const logUserNames = new ToolbarAction({ text: 'Click Me!', @@ -31,9 +35,7 @@ const logUserNames = new ToolbarAction({ // See ToolbarActionOptions in API section for all options }); -export function logUserNamesContributor( - actionList: ToolbarActionList -) { +export function logUserNamesContributor(actionList: ToolbarActionList) { actionList.addHead(logUserNames); } @@ -49,33 +51,30 @@ export const identityToolbarActionContributors: IdentityToolbarActionContributor The list of actions, conveniently named as `actionList`, is a **doubly linked list**. That is why we have used the `addHead` method, which adds the given value to the beginning of the list. You may find [all available methods here](../Common/Utils/Linked-List.md). -> **Important Note:** AoT compilation does not support function calls in decorator metadata. This is why we have defined `logUserNamesContributor` as an exported function declaration here. Please do not forget exporting your contributor callbacks and forget about lambda functions (a.k.a. arrow functions). Please refer to [AoT metadata errors](https://angular.io/guide/aot-metadata-errors#function-calls-not-supported) for details. - ### Step 2. Import and Use Toolbar Action Contributors Import `identityToolbarActionContributors` in your routing module and pass it to the static `forLazy` method of `IdentityModule` as seen below: ```js +// src/app/app-routing.module.ts + +// other imports import { identityToolbarActionContributors } from './toolbar-action-contributors'; const routes: Routes = [ + // other routes + { - path: '', - component: DynamicLayoutComponent, - children: [ - { - path: 'identity', - loadChildren: () => - import('@volo/abp.ng.identity').then(m => - m.IdentityModule.forLazy({ - toolbarActionContributors: identityToolbarActionContributors, - }), - ), - }, - // other child routes - ], - // other routes - } + path: 'identity', + loadChildren: () => + import('@abp/ng.identity').then(m => + m.IdentityModule.forLazy({ + toolbarActionContributors: identityToolbarActionContributors, + }) + ), + }, + + // other routes ]; ``` @@ -85,22 +84,22 @@ That is it, `logUserNames` toolbar action will be added as the first action on t In this example, we will add a custom "Click Me!" button and log `userName` of all users in the user management page of the [Identity Module](../../Modules/Identity.md) to the console. +Page Toolbar Extension Example: Custom Component + ### Step 1. Create A Custom Component We need to have a component before we can pass it to the toolbar action contributors: ```js -// click-me-button.component.ts +// src/app/click-me-button.component.ts -import { Component, Inject } from '@angular/core'; +import { IdentityUserDto } from '@abp/ng.identity'; import { ActionData, EXTENSIONS_ACTION_DATA } from '@abp/ng.theme.shared/extensions'; -import { IdentityUserDto } from '@volo/abp.ng.identity'; +import { Component, Inject } from '@angular/core'; @Component({ selector: 'app-click-me-button', - template: ` - - `, + template: ``, }) export class ClickMeButtonComponent { constructor( @@ -112,6 +111,7 @@ export class ClickMeButtonComponent { this.data.record.forEach(user => console.log(user.userName)); } } + ``` Here, `EXTENSIONS_ACTION_DATA` token provides us the context from the page toolbar. Therefore, we are able to reach the page data via `record`, which is an array of users, i.e. `IdentityUserDto[]`. @@ -123,11 +123,14 @@ Here, `EXTENSIONS_ACTION_DATA` token provides us the context from the page toolb The following code prepares a constant named `identityToolbarActionContributors`, ready to be imported and used in your root module. When `ToolbarComponent` is used instead of `ToolbarAction`, we can pass a component in: ```js -// toolbar-action-contributors.ts +// src/app/toolbar-action-contributors.ts +import { + eIdentityComponents, + IdentityToolbarActionContributors, + IdentityUserDto, +} from '@abp/ng.identity'; import { ToolbarActionList, ToolbarComponent } from '@abp/ng.theme.shared/extensions'; -import { IdentityUserDto } from '@volo/abp.ng.identity'; -import { IdentityToolbarActionContributors } from '@volo/abp.ng.identity/config'; import { ClickMeButtonComponent } from './click-me-button.component'; const logUserNames = new ToolbarComponent({ @@ -135,9 +138,7 @@ const logUserNames = new ToolbarComponent({ // See ToolbarActionOptions in API section for all options }); -export function logUserNamesContributor( - actionList: ToolbarActionList -) { +export function logUserNamesContributor(actionList: ToolbarActionList) { actionList.addHead(logUserNames); } @@ -153,54 +154,35 @@ export const identityToolbarActionContributors: IdentityToolbarActionContributor The list of actions, conveniently named as `actionList`, is a **doubly linked list**. That is why we have used the `addHead` method, which adds the given value to the beginning of the list. You may find [all available methods here](../Common/Utils/Linked-List.md). -> **Important Note 1:** AoT compilation does not support function calls in decorator metadata. This is why we have defined `logUserNamesContributor` as an exported function declaration here. Please do not forget exporting your contributor callbacks and forget about lambda functions (a.k.a. arrow functions). Please refer to [AoT metadata errors](https://angular.io/guide/aot-metadata-errors#function-calls-not-supported) for details. - -> **Important Note 2:** Please use one of the following if Ivy is not enabled in your project. Otherwise, you will get an "Expression form not supported." error. - -```js -export const identityToolbarActionContributors: IdentityToolbarActionContributors = { - 'Identity.UsersComponent': [ logUserNamesContributor ], -}; - -/* OR */ - -const identityContributors: IdentityToolbarActionContributors = {}; -identityContributors[eIdentityComponents.Users] = [ logUserNamesContributor ]; -export const identityToolbarActionContributors = identityContributors; -``` - ### Step 3. Import and Use Toolbar Action Contributors -Import `identityToolbarActionContributors` in your routing module and pass it to the static `forLazy` method of `IdentityModule` as seen below. If Ivy is not enabled in your project, do not forget putting `ClickMeButtonComponent` into `entryComponents`: +Import `identityToolbarActionContributors` in your routing module and pass it to the static `forLazy` method of `IdentityModule` as seen below. ```js +// src/app/app-routing.module.ts + +// other imports import { identityToolbarActionContributors } from './toolbar-action-contributors'; const routes: Routes = [ + // other routes + { - path: '', - component: DynamicLayoutComponent, - children: [ - { - path: 'identity', - loadChildren: () => - import('@volo/abp.ng.identity').then(m => - m.IdentityModule.forLazy({ - toolbarActionContributors: identityToolbarActionContributors, - }), - ), - }, - // other child routes - ], - // other routes - } + path: 'identity', + loadChildren: () => + import('@abp/ng.identity').then(m => + m.IdentityModule.forLazy({ + toolbarActionContributors: identityToolbarActionContributors, + }) + ), + }, + + // other routes ]; ``` That is it, `logUserNames` toolbar action will be added as the first action on the page toolbar in the users page (`UsersComponent`) of the `IdentityModule` and it will be triggered by a custom button, i.e. `ClickMeButtonComponent`. Please note that **component projection is not limited to buttons** and you may use other UI components. -![Page Toolbar Extension Example: Custom "Click Me!" Button](images/user-page-toolbar-extension-custom-click-me-ng.png) - ## How to Place a Custom Modal and Trigger It by Toolbar Actions Please check the same topic in [entity action extensions document](Entity-Action-Extensions.md) and replace entity action with a toolbar action. diff --git a/docs/en/UI/Angular/images/toolbar-action-extensions---click-me.gif b/docs/en/UI/Angular/images/toolbar-action-extensions---click-me.gif new file mode 100644 index 0000000000000000000000000000000000000000..b6585184f1ba37a62cdf9292616ac9e589f0f916 GIT binary patch literal 104440 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 literal 0 HcmV?d00001 diff --git a/docs/en/UI/Angular/images/toolbar-action-extensions---custom-component.gif b/docs/en/UI/Angular/images/toolbar-action-extensions---custom-component.gif new file mode 100644 index 0000000000000000000000000000000000000000..9775dbd1f022dc1ab133db8fa5e38d3fac5429ea GIT binary patch literal 107466 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 Date: Wed, 6 Jan 2021 00:12:46 +0300 Subject: [PATCH 213/217] escape interpolation brackets --- .../en/UI/Angular/Entity-Action-Extensions.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/en/UI/Angular/Entity-Action-Extensions.md b/docs/en/UI/Angular/Entity-Action-Extensions.md index 8918bc37a6..fd22e293fd 100644 --- a/docs/en/UI/Angular/Entity-Action-Extensions.md +++ b/docs/en/UI/Angular/Entity-Action-Extensions.md @@ -153,27 +153,27 @@ Let's employ dependency injection to extend the functionality of `IdentityModule -