From a7090d928a6adf4eef1ae4a7503497fedc104d03 Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Mon, 9 Sep 2019 13:57:53 +0300 Subject: [PATCH 1/8] feature(theme-shared): add style class to confirmation and toast components --- .../confirmation/confirmation.component.ts | 17 ++- .../lib/components/toast/toast.component.ts | 2 +- .../theme-shared/src/lib/contants/styles.ts | 105 ++++++++++++++++++ 3 files changed, 114 insertions(+), 10 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts index 917e981338..39cf9b73a2 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts @@ -11,26 +11,25 @@ import { Toaster } from '../../models/toaster'; (onClose)="close(dismiss)" [modal]="true" [baseZIndex]="1000" - styleClass="" + styleClass="abp-confirm" > - diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts index dd66eec05c..e2646b5128 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts @@ -119,11 +119,16 @@ export class ModalComponent implements OnDestroy { this.visibleChange.emit(value); this.showModal = value; - value - ? timer(ANIMATION_TIMEOUT + 100) - .pipe(take(1)) - .subscribe(_ => (this.closable = true)) - : (this.closable = false); + if (value) { + timer(ANIMATION_TIMEOUT + 100) + .pipe(take(1)) + .subscribe(_ => (this.closable = true)); + + this.renderer.addClass(document.body, 'modal-open'); + } else { + this.closable = false; + this.renderer.removeClass(document.body, 'modal-open'); + } } listen() { diff --git a/npm/ng-packs/packages/theme-shared/src/lib/contants/styles.ts b/npm/ng-packs/packages/theme-shared/src/lib/contants/styles.ts index 7291eb0ab9..16c6433362 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/contants/styles.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/contants/styles.ts @@ -32,6 +32,11 @@ export default ` background-color: rgba(0, 0, 0, .6); } +.modal.show { + overflow-x: hidden !important; + overflow-y: auto !important; +} + .abp-ellipsis-inline { display: inline-block; overflow: hidden; 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 6d31540305..49269b59d9 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 @@ -18,22 +18,26 @@ import { ChangePasswordComponent } from './components/change-password/change-pas import { ProfileComponent } from './components/profile/profile.component'; import { BreadcrumbComponent } from './components/breadcrumb/breadcrumb.component'; -export function appendScript(injector: Injector) { - const fn = function() { - const lazyLoadService: LazyLoadService = injector.get(LazyLoadService); +export function appendScript(styles) { + const higher = (injector: Injector) => { + const fn = function() { + const lazyLoadService: LazyLoadService = injector.get(LazyLoadService); - return forkJoin( - lazyLoadService.load( - null, - 'style', - styles, - 'head', - 'afterbegin', - ) /* lazyLoadService.load(null, 'script', scripts) */, - ).pipe(take(1)); + return forkJoin( + lazyLoadService.load( + null, + 'style', + styles, + 'head', + 'afterbegin', + ) /* lazyLoadService.load(null, 'script', scripts) */, + ).pipe(take(1)); + }; + + return fn; }; - return fn; + return higher; } @NgModule({ @@ -87,7 +91,7 @@ export class ThemeSharedModule { provide: APP_INITIALIZER, multi: true, deps: [Injector, ErrorHandler], - useFactory: appendScript, + useFactory: appendScript(styles), }, { provide: MessageService, useClass: MessageService }, ], From 70ec0b3a63c001f94e7eb5de4b1be6fefb625869 Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Mon, 9 Sep 2019 16:55:44 +0300 Subject: [PATCH 4/8] fix(theme-shared): remove unnecessary css style --- .../packages/theme-shared/src/lib/contants/styles.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/contants/styles.ts b/npm/ng-packs/packages/theme-shared/src/lib/contants/styles.ts index 16c6433362..7291eb0ab9 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/contants/styles.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/contants/styles.ts @@ -32,11 +32,6 @@ export default ` background-color: rgba(0, 0, 0, .6); } -.modal.show { - overflow-x: hidden !important; - overflow-y: auto !important; -} - .abp-ellipsis-inline { display: inline-block; overflow: hidden; From e4d82550a94500cbf5630b1d3e53ca4e91a3a5f9 Mon Sep 17 00:00:00 2001 From: abp modules <51013007+abphub@users.noreply.github.com> Date: Tue, 10 Sep 2019 09:42:05 +0800 Subject: [PATCH 5/8] Modify an error description MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Inheritance interface is not “ITenantResolver”,modified “ITenantResolveContributor”. See lines 118 and 134. --- docs/zh-Hans/Multi-Tenancy.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/zh-Hans/Multi-Tenancy.md b/docs/zh-Hans/Multi-Tenancy.md index 911803b1be..259cfeda9f 100644 --- a/docs/zh-Hans/Multi-Tenancy.md +++ b/docs/zh-Hans/Multi-Tenancy.md @@ -115,7 +115,7 @@ namespace MyCompany.MyProject { Configure(options => { - options.TenantResolvers.Add(new MyCustomTenantResolver()); + options.TenantResolvers.Add(new MyCustomTenantResolveContributor()); }); //... @@ -124,14 +124,14 @@ namespace MyCompany.MyProject } ```` -MyCustomTenantResolver必须像下面这样实现**ITenantResolver**接口: +MyCustomTenantResolveContributor必须像下面这样实现**ITenantResolveContributor**接口: ````C# using Volo.Abp.MultiTenancy; namespace MyCompany.MyProject { - public class MyCustomTenantResolver : ITenantResolver + public class MyCustomTenantResolveContributor : ITenantResolveContributor { public void Resolve(ITenantResolveContext context) { From 62f21424c1e64f8d3560e00684cbc6f135a23645 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 10 Sep 2019 14:23:55 +0800 Subject: [PATCH 6/8] Update Multi-Tenancy.md --- docs/en/Multi-Tenancy.md | 6 +++--- docs/zh-Hans/Multi-Tenancy.md | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/en/Multi-Tenancy.md b/docs/en/Multi-Tenancy.md index f5510a82db..0ad3c66b26 100644 --- a/docs/en/Multi-Tenancy.md +++ b/docs/en/Multi-Tenancy.md @@ -114,7 +114,7 @@ namespace MyCompany.MyProject { Configure(options => { - options.TenantResolvers.Add(new MyCustomTenantResolver()); + options.TenantResolvers.Add(new MyCustomTenantResolveContributor()); }); //... @@ -123,14 +123,14 @@ namespace MyCompany.MyProject } ```` -MyCustomTenantResolver must implement **ITenantResolver** as shown below: +`MyCustomTenantResolveContributor` must implement **ITenantResolveContributor** as shown below: ````C# using Volo.Abp.MultiTenancy; namespace MyCompany.MyProject { - public class MyCustomTenantResolver : ITenantResolver + public class MyCustomTenantResolveContributor : ITenantResolveContributor { public void Resolve(ITenantResolveContext context) { diff --git a/docs/zh-Hans/Multi-Tenancy.md b/docs/zh-Hans/Multi-Tenancy.md index 259cfeda9f..352190d5cd 100644 --- a/docs/zh-Hans/Multi-Tenancy.md +++ b/docs/zh-Hans/Multi-Tenancy.md @@ -124,7 +124,7 @@ namespace MyCompany.MyProject } ```` -MyCustomTenantResolveContributor必须像下面这样实现**ITenantResolveContributor**接口: +`MyCustomTenantResolveContributor`必须像下面这样实现**ITenantResolveContributor**接口: ````C# using Volo.Abp.MultiTenancy; From 9574d002deda4472835f1e22ee66227e3faaf5e1 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 10 Sep 2019 09:27:33 +0300 Subject: [PATCH 7/8] Show information when no features resolved https://github.com/volosoft/volo/issues/570 --- .../Localization/Domain/en.json | 3 +- .../FeatureManagementModal.cshtml | 87 ++++++++++--------- 2 files changed, 50 insertions(+), 40 deletions(-) diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/en.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/en.json index 68af08b6a1..2e8812968d 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/en.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/en.json @@ -1,6 +1,7 @@ { "culture": "en", "texts": { - "Features": "Features" + "Features": "Features", + "NoFeatureFoundMessage": "There is't any available feature." } } \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml index b52ea264b4..59e80e236c 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml @@ -12,49 +12,58 @@
- - - - @for (var i = 0; i < Model.FeatureListDto.Features.Count; i++) - { - var feature = Model.FeatureListDto.Features[i]; -
+ @if (Model.FeatureListDto?.Features != null && Model.FeatureListDto.Features.Any()) + { + + + + @for (var i = 0; i < Model.FeatureListDto.Features.Count; i++) + { + var feature = Model.FeatureListDto.Features[i]; +
- @feature.Name + @feature.Name - - @if (feature.ValueType is FreeTextStringValueType) - { - - - } - @if (feature.ValueType is SelectionStringValueType) - { - - + @if (feature.ValueType is FreeTextStringValueType) + { + + + } + @if (feature.ValueType is SelectionStringValueType) + { + + - } - @if (feature.ValueType is ToggleStringValueType) - { - - - } -
- } -
- + + } + @if (feature.ValueType is ToggleStringValueType) + { + + + } +
+ } +
+ + } + else + { + + @L["NoFeatureFoundMessage"] + + }
From 80d9105d2ef7f8ce747564f9be9a9e9321492fa9 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 10 Sep 2019 13:28:44 +0300 Subject: [PATCH 8/8] added CheckNameExistAsync methods to api and identity resources --- ...olo.Abp.IdentityServer.Domain.Shared.csproj | 8 ++++++++ .../AbpIdentityServerDomainSharedModule.cs | 18 +++++++++++++++++- .../Localization/Resources/en.json | 7 +++++++ .../ApiResources/IApiResourceRepository.cs | 5 +++++ .../IIdentityResourceRepository.cs | 5 +++++ .../ApiResources/ApiResourceRepository.cs | 5 +++++ .../IdentityResourceRepository.cs | 5 +++++ .../MongoDB/MongoApiResourceRepository.cs | 5 +++++ .../MongoDB/MongoIdentityResourceRepository.cs | 5 +++++ 9 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/en.json diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo.Abp.IdentityServer.Domain.Shared.csproj b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo.Abp.IdentityServer.Domain.Shared.csproj index 6894c3f60b..bcd99cd524 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo.Abp.IdentityServer.Domain.Shared.csproj +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo.Abp.IdentityServer.Domain.Shared.csproj @@ -13,6 +13,14 @@ + + + + + + + + diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/AbpIdentityServerDomainSharedModule.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/AbpIdentityServerDomainSharedModule.cs index 141bd1a5fb..8d2bf66576 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/AbpIdentityServerDomainSharedModule.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/AbpIdentityServerDomainSharedModule.cs @@ -1,6 +1,9 @@ using Volo.Abp.IdentityServer.Localization; using Volo.Abp.Localization; +using Volo.Abp.Localization.ExceptionHandling; +using Volo.Abp.Localization.Resources.AbpValidation; using Volo.Abp.Modularity; +using Volo.Abp.VirtualFileSystem; namespace Volo.Abp.IdentityServer { @@ -11,9 +14,22 @@ namespace Volo.Abp.IdentityServer { public override void ConfigureServices(ServiceConfigurationContext context) { + Configure(options => + { + options.FileSets.AddEmbedded(); + }); + Configure(options => { - options.Resources.Add("en"); + options.Resources.Add("en") + .AddBaseTypes( + typeof(AbpValidationResource) + ).AddVirtualJson("/Volo/Abp/IdentityServer/Localization/Resources"); + }); + + Configure(options => + { + options.MapCodeNamespace("Volo.IdentityServer", typeof(AbpIdentityServerResource)); }); } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/en.json b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/en.json new file mode 100644 index 0000000000..89ffea534c --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/en.json @@ -0,0 +1,7 @@ +{ + "culture": "en", + "texts": { + "Volo.IdentityServer:DuplicateIdentityResourceName": "Identity Resource name already exist: {Name}", + "Volo.IdentityServer:DuplicateApiResourceName": "Api Resource name already exist: {Name}" + } +} \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/IApiResourceRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/IApiResourceRepository.cs index e229f361d5..6eead2f2dd 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/IApiResourceRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/IApiResourceRepository.cs @@ -32,5 +32,10 @@ namespace Volo.Abp.IdentityServer.ApiResources bool includeDetails = false, CancellationToken cancellationToken = default ); + + Task CheckNameExistAsync( + string name, + Guid? expectedId = null + ); } } \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IIdentityResourceRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IIdentityResourceRepository.cs index 0ae9754b91..2b569a84e4 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IIdentityResourceRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IIdentityResourceRepository.cs @@ -27,5 +27,10 @@ namespace Volo.Abp.IdentityServer.IdentityResources bool includeDetails = true, CancellationToken cancellationToken = default ); + + Task CheckNameExistAsync( + string name, + Guid? expectedId = null + ); } } \ No newline at end of file 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 7b6acd495a..9ba8f19b14 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 @@ -61,6 +61,11 @@ namespace Volo.Abp.IdentityServer.ApiResources .ToListAsync(GetCancellationToken(cancellationToken)); } + public async Task CheckNameExistAsync(string name, Guid? expectedId = null) + { + return await DbSet.AnyAsync(ar => ar.Id != expectedId && ar.Name == name); + } + public override async Task DeleteAsync(Guid id, bool autoSave = false, CancellationToken cancellationToken = default) { var scopeClaims = DbContext.Set().Where(sc => sc.ApiResourceId == id); 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 a5237a6cc8..5c6de3ffac 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 @@ -56,5 +56,10 @@ namespace Volo.Abp.IdentityServer.IdentityResources .Where(x => x.Name == name) .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); } + + public async Task CheckNameExistAsync(string name, Guid? expectedId = null) + { + return await DbSet.AnyAsync(ir => ir.Id != expectedId && ir.Name == name); + } } } 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 81ea680720..7cd9147889 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 @@ -47,5 +47,10 @@ namespace Volo.Abp.IdentityServer.MongoDB { return await GetCountAsync(); } + + public async Task CheckNameExistAsync(string name, Guid? expectedId = null) + { + return await GetMongoQueryable().AnyAsync(ar => ar.Id != expectedId && ar.Name == name); + } } } 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 85505c2987..4ab1ee91c0 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 @@ -50,5 +50,10 @@ namespace Volo.Abp.IdentityServer.MongoDB { return await GetCountAsync(); } + + public async Task CheckNameExistAsync(string name, Guid? expectedId = null) + { + return await GetMongoQueryable().AnyAsync(ir => ir.Id != expectedId && ir.Name == name); + } } }