From fc00f57d96713a13b616963fc5cc5db7f98b740c Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Fri, 13 Mar 2020 16:46:01 +0300 Subject: [PATCH 1/2] fix: return empty object from getSettings when keyword is not found --- .../core/src/lib/states/config.state.ts | 30 ++++++++----------- .../core/src/lib/tests/config.state.spec.ts | 25 ++++++++-------- 2 files changed, 26 insertions(+), 29 deletions(-) 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 f424d83cb2..5fed4b9816 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 @@ -1,11 +1,12 @@ +import { Injectable } from '@angular/core'; import { Action, createSelector, Selector, State, StateContext, Store } from '@ngxs/store'; import { of } from 'rxjs'; import { switchMap, tap } from 'rxjs/operators'; import snq from 'snq'; import { + AddRoute, GetAppConfiguration, PatchRouteByName, - AddRoute, SetEnvironment, } from '../actions/config.actions'; import { SetLanguage } from '../actions/session.actions'; @@ -14,7 +15,6 @@ import { Config } from '../models/config'; import { ApplicationConfigurationService } from '../services/application-configuration.service'; import { organizeRoutes } from '../utils/route-utils'; import { SessionState } from './session.state'; -import { Injectable } from '@angular/core'; @State({ name: 'ConfigState', @@ -88,28 +88,24 @@ export class ConfigState { } static getSetting(key: string) { - const selector = createSelector([ConfigState], (state: Config.State) => { + return createSelector([ConfigState], (state: Config.State) => { return snq(() => state.setting.values[key]); }); - return selector; } static getSettings(keyword?: string) { - const selector = createSelector([ConfigState], (state: Config.State) => { - if (keyword) { - const keys = snq( - () => Object.keys(state.setting.values).filter(key => key.indexOf(keyword) > -1), - [], - ); - - if (keys.length) { - return keys.reduce((acc, key) => ({ ...acc, [key]: state.setting.values[key] }), {}); - } - } + return createSelector([ConfigState], (state: Config.State) => { + const settings = snq(() => state.setting.values, {}); - return snq(() => state.setting.values, {}); + if (!keyword) return settings; + + const keysFound = Object.keys(settings).filter(key => key.indexOf(keyword) > -1); + + return keysFound.reduce((acc, key) => { + acc[key] = settings[key]; + return acc; + }, {}); }); - return selector; } static getGrantedPolicy(key: string) { 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 635ca1d8b1..07baed4c14 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 @@ -1,12 +1,12 @@ import { createServiceFactory, SpectatorService, SpyObject } from '@ngneat/spectator/jest'; import { Store } from '@ngxs/store'; -import { ReplaySubject, timer, Subject, of } from 'rxjs'; +import clone from 'just-clone'; +import { of, ReplaySubject, timer } from 'rxjs'; +import { AddRoute, PatchRouteByName, SetLanguage } from '../actions'; +import { ABP } from '../models'; import { Config } from '../models/config'; import { ApplicationConfigurationService, ConfigStateService } from '../services'; import { ConfigState } from '../states'; -import { SetLanguage, PatchRouteByName, AddRoute } from '../actions'; -import clone from 'just-clone'; -import { ABP } from '../models'; export const CONFIG_STATE_DATA = { environment: { @@ -116,6 +116,7 @@ export const CONFIG_STATE_DATA = { }, setting: { values: { + 'Abp.Custom.SomeSetting': 'X', 'Abp.Localization.DefaultLanguage': 'en', }, }, @@ -218,14 +219,14 @@ describe('ConfigState', () => { }); describe('#getSettings', () => { - it('should return settings', () => { - expect(ConfigState.getSettings('Localization')(CONFIG_STATE_DATA)).toEqual({ - 'Abp.Localization.DefaultLanguage': 'en', - }); - - expect(ConfigState.getSettings('AllSettings')(CONFIG_STATE_DATA)).toEqual( - CONFIG_STATE_DATA.setting.values, - ); + test.each` + keyword | expected + ${undefined} | ${CONFIG_STATE_DATA.setting.values} + ${'Localization'} | ${{ 'Abp.Localization.DefaultLanguage': 'en' }} + ${'X'} | ${{}} + ${'localization'} | ${{}} + `('should return $expected when keyword is given as $keyword', ({ keyword, expected }) => { + expect(ConfigState.getSettings(keyword)(CONFIG_STATE_DATA)).toEqual(expected); }); }); From 7035168861cef6e1913113e331cfb2c5dc47768e Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Fri, 13 Mar 2020 16:56:05 +0300 Subject: [PATCH 2/2] fix: assign createSelector return value to a variable before returning (ng-packagr) --- npm/ng-packs/packages/core/src/lib/states/config.state.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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 5fed4b9816..5269946391 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 @@ -88,13 +88,15 @@ export class ConfigState { } static getSetting(key: string) { - return createSelector([ConfigState], (state: Config.State) => { + const selector = createSelector([ConfigState], (state: Config.State) => { return snq(() => state.setting.values[key]); }); + + return selector; } static getSettings(keyword?: string) { - return createSelector([ConfigState], (state: Config.State) => { + const selector = createSelector([ConfigState], (state: Config.State) => { const settings = snq(() => state.setting.values, {}); if (!keyword) return settings; @@ -106,6 +108,8 @@ export class ConfigState { return acc; }, {}); }); + + return selector; } static getGrantedPolicy(key: string) {