From e5d453046ebc481ad2c14b14576804a80ea434ae Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 20 Jul 2020 15:49:32 +0300 Subject: [PATCH 1/3] feat(core): add a new selector named getFeature to the ConfigState resolves #4812 --- .../core/src/lib/services/config-state.service.ts | 4 ++++ npm/ng-packs/packages/core/src/lib/states/config.state.ts | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/npm/ng-packs/packages/core/src/lib/services/config-state.service.ts b/npm/ng-packs/packages/core/src/lib/services/config-state.service.ts index fe10f9ddf0..027c284f52 100644 --- a/npm/ng-packs/packages/core/src/lib/services/config-state.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/config-state.service.ts @@ -29,6 +29,10 @@ export class ConfigStateService { return this.store.selectSnapshot(ConfigState.getApiUrl(...args)); } + getFeature(...args: Parameters) { + return this.store.selectSnapshot(ConfigState.getFeature(...args)); + } + getSetting(...args: Parameters) { return this.store.selectSnapshot(ConfigState.getSetting(...args)); } diff --git a/npm/ng-packs/packages/core/src/lib/states/config.state.ts b/npm/ng-packs/packages/core/src/lib/states/config.state.ts index d9793529aa..713eb336e1 100644 --- a/npm/ng-packs/packages/core/src/lib/states/config.state.ts +++ b/npm/ng-packs/packages/core/src/lib/states/config.state.ts @@ -65,6 +65,14 @@ export class ConfigState { return selector; } + static getFeature(key: string) { + const selector = createSelector([ConfigState], (state: Config.State) => { + return snq(() => state.features.values[key]); + }); + + return selector; + } + static getSetting(key: string) { const selector = createSelector([ConfigState], (state: Config.State) => { return snq(() => state.setting.values[key]); From 96ee4a7dadc558369199765122c7f7e6525b1354 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 20 Jul 2020 15:50:01 +0300 Subject: [PATCH 2/3] docs: update the Config-State.md for new method #4812 --- docs/en/UI/Angular/Config-State.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/en/UI/Angular/Config-State.md b/docs/en/UI/Angular/Config-State.md index 089697f064..bda3250b32 100644 --- a/docs/en/UI/Angular/Config-State.md +++ b/docs/en/UI/Angular/Config-State.md @@ -127,6 +127,17 @@ const defaultLang = this.config.getSetting("Abp.Localization.DefaultLanguage"); // 'en' ``` +### How to Get a Specific Feature From the Store + +You can use the `getFeature` method of `ConfigStateService` to get a specific feature from the configuration state. Here is an example: + +```js +// this.config is instance of ConfigStateService + +const isChatEnabled = this.config.getFeature("Chat.Enable"); +// 'en' +``` + ### How to Get a Specific Permission From the Store You can use the `getGrantedPolicy` method of `ConfigStateService` to get a specific permission from the configuration state. For that, you should pass a policy key as parameter to the method. From a2a495a6bb03b558269336dd5daef7a86c32da30 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 20 Jul 2020 15:50:41 +0300 Subject: [PATCH 3/3] test: add a test for getFeature selector #4812 --- .../packages/core/src/lib/tests/config.state.spec.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/core/src/lib/tests/config.state.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/config.state.spec.ts index d48fd4dde2..e30a55635b 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/config.state.spec.ts +++ b/npm/ng-packs/packages/core/src/lib/tests/config.state.spec.ts @@ -93,7 +93,9 @@ export const CONFIG_STATE_DATA = { roles: [], }, features: { - values: {}, + values: { + 'Chat.Enable': 'True', + }, }, } as Config.State; @@ -163,6 +165,14 @@ describe('ConfigState', () => { }); }); + describe('#getFeature', () => { + it('should return a setting', () => { + expect(ConfigState.getFeature('Chat.Enable')(CONFIG_STATE_DATA)).toEqual( + CONFIG_STATE_DATA.features.values['Chat.Enable'], + ); + }); + }); + describe('#getSetting', () => { it('should return a setting', () => { expect(ConfigState.getSetting('Abp.Localization.DefaultLanguage')(CONFIG_STATE_DATA)).toEqual(