Browse Source

Merge pull request #3996 from abpframework/feat/3995

Added Localization Methods w/ Fallback to the Localization Service
pull/4016/head
Mehmet Erim 6 years ago
committed by GitHub
parent
commit
510f4859e2
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 56
      npm/ng-packs/packages/core/src/lib/services/localization.service.ts
  2. 140
      npm/ng-packs/packages/core/src/lib/tests/localization-utils.spec.ts
  3. 176
      npm/ng-packs/packages/core/src/lib/tests/localization.service.spec.ts
  4. 1
      npm/ng-packs/packages/core/src/lib/utils/index.ts
  5. 56
      npm/ng-packs/packages/core/src/lib/utils/localization-utils.ts
  6. 8
      npm/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts

56
npm/ng-packs/packages/core/src/lib/services/localization.service.ts

@ -2,11 +2,12 @@ import { Injectable, NgZone, Optional, SkipSelf } from '@angular/core';
import { ActivatedRouteSnapshot, Router } from '@angular/router';
import { Actions, ofActionSuccessful, Store } from '@ngxs/store';
import { noop, Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { SetLanguage } from '../actions/session.actions';
import { ApplicationConfiguration } from '../models/application-configuration';
import { Config } from '../models/config';
import { ConfigState } from '../states/config.state';
import { registerLocale } from '../utils/initial-utils';
import { createLocalizer, createLocalizerWithFallback } from '../utils/localization-utils';
type ShouldReuseRoute = (future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot) => boolean;
@ -19,6 +20,10 @@ export class LocalizationService {
return this.store.selectSnapshot(state => state.SessionState.language);
}
get languageChange(): Observable<SetLanguage> {
return this.actions.pipe(ofActionSuccessful(SetLanguage));
}
constructor(
private actions: Actions,
private store: Store,
@ -34,9 +39,7 @@ export class LocalizationService {
}
private listenToSetLanguage() {
this.actions
.pipe(ofActionSuccessful(SetLanguage))
.subscribe(({ payload }) => this.registerLocale(payload));
this.languageChange.subscribe(({ payload }) => this.registerLocale(payload));
}
setRouteReuse(reuse: ShouldReuseRoute) {
@ -77,30 +80,31 @@ export class LocalizationService {
return this.store.selectSnapshot(ConfigState.getLocalization(key, ...interpolateParams));
}
isLocalized(key, sourceName) {
if (sourceName === '_') {
// A convention to suppress the localization
return true;
}
const localization = this.store.selectSnapshot(
ConfigState.getOne('localization'),
) as ApplicationConfiguration.Localization;
sourceName = sourceName || localization.defaultResourceName;
if (!sourceName) {
return false;
}
localize(resourceName: string, key: string, defaultValue: string): Observable<string> {
return this.store.select(ConfigState.getOne('localization')).pipe(
map(createLocalizer),
map(localize => localize(resourceName, key, defaultValue)),
);
}
const source = localization.values[sourceName];
if (!source) {
return false;
}
localizeSync(resourceName: string, key: string, defaultValue: string): string {
const localization = this.store.selectSnapshot(ConfigState.getOne('localization'));
return createLocalizer(localization)(resourceName, key, defaultValue);
}
const value = source[key];
if (value === undefined) {
return false;
}
localizeWithFallback(
resourceNames: string[],
keys: string[],
defaultValue: string,
): Observable<string> {
return this.store.select(ConfigState.getOne('localization')).pipe(
map(createLocalizerWithFallback),
map(localizeWithFallback => localizeWithFallback(resourceNames, keys, defaultValue)),
);
}
return true;
localizeWithFallbackSync(resourceNames: string[], keys: string[], defaultValue: string): string {
const localization = this.store.selectSnapshot(ConfigState.getOne('localization'));
return createLocalizerWithFallback(localization)(resourceNames, keys, defaultValue);
}
}

140
npm/ng-packs/packages/core/src/lib/tests/localization-utils.spec.ts

@ -0,0 +1,140 @@
import {
createLocalizationPipeKeyGenerator,
createLocalizer,
createLocalizerWithFallback,
} from '../utils/localization-utils';
describe('Localization Utils', () => {
describe('#createLocalizer', () => {
const localize = createLocalizer({
values: { foo: { bar: 'baz' }, x: { y: 'z' } },
defaultResourceName: 'x',
currentCulture: null,
languages: [],
});
test.each`
resource | key | defaultValue | expected
${'_'} | ${'TEST'} | ${'DEFAULT'} | ${'TEST'}
${'foo'} | ${'bar'} | ${'DEFAULT'} | ${'baz'}
${'x'} | ${'bar'} | ${'DEFAULT'} | ${'DEFAULT'}
${'a'} | ${'bar'} | ${'DEFAULT'} | ${'DEFAULT'}
${''} | ${'bar'} | ${'DEFAULT'} | ${'DEFAULT'}
${undefined} | ${'bar'} | ${'DEFAULT'} | ${'DEFAULT'}
${'foo'} | ${'y'} | ${'DEFAULT'} | ${'DEFAULT'}
${'x'} | ${'y'} | ${'DEFAULT'} | ${'z'}
${'a'} | ${'y'} | ${'DEFAULT'} | ${'DEFAULT'}
${''} | ${'y'} | ${'DEFAULT'} | ${'DEFAULT'}
${undefined} | ${'y'} | ${'DEFAULT'} | ${'DEFAULT'}
${'foo'} | ${''} | ${'DEFAULT'} | ${'DEFAULT'}
${'x'} | ${''} | ${'DEFAULT'} | ${'DEFAULT'}
${'a'} | ${''} | ${'DEFAULT'} | ${'DEFAULT'}
${''} | ${''} | ${'DEFAULT'} | ${'DEFAULT'}
${undefined} | ${''} | ${'DEFAULT'} | ${'DEFAULT'}
${'foo'} | ${undefined} | ${'DEFAULT'} | ${'DEFAULT'}
${'x'} | ${undefined} | ${'DEFAULT'} | ${'DEFAULT'}
${'a'} | ${undefined} | ${'DEFAULT'} | ${'DEFAULT'}
${''} | ${undefined} | ${'DEFAULT'} | ${'DEFAULT'}
${undefined} | ${undefined} | ${'DEFAULT'} | ${'DEFAULT'}
`(
'should return $expected when resource name is $resource and key is $key',
({ resource, key, defaultValue, expected }) => {
const result = localize(resource, key, defaultValue);
expect(result).toBe(expected);
},
);
});
describe('#createLocalizerWithFallback', () => {
const localizeWithFallback = createLocalizerWithFallback({
values: { foo: { bar: 'baz' }, x: { y: 'z' } },
defaultResourceName: 'x',
currentCulture: null,
languages: [],
});
test.each`
resources | keys | defaultValue | expected
${['', '_']} | ${['TEST', 'OTHER']} | ${'DEFAULT'} | ${'TEST'}
${['foo']} | ${['bar']} | ${'DEFAULT'} | ${'baz'}
${['x']} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'}
${['a', 'b', 'c']} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'}
${['']} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'}
${[]} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'}
${['foo']} | ${['y']} | ${'DEFAULT'} | ${'z'}
${['x']} | ${['y']} | ${'DEFAULT'} | ${'z'}
${['a', 'b', 'c']} | ${['y']} | ${'DEFAULT'} | ${'z'}
${['']} | ${['y']} | ${'DEFAULT'} | ${'z'}
${[]} | ${['y']} | ${'DEFAULT'} | ${'z'}
${['foo']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'baz'}
${['x']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'z'}
${['a', 'b', 'c']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'z'}
${['']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'z'}
${[]} | ${['bar', 'y']} | ${'DEFAULT'} | ${'z'}
${['foo']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'}
${['x']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'}
${['a', 'b', 'c']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'}
${['']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'}
${[]} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'}
${['foo']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'}
${['x']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'}
${['a', 'b', 'c']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'}
${['']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'}
${[]} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'}
`(
'should return $expected when resource names are $resources and keys are $keys',
({ resources, keys, defaultValue, expected }) => {
const result = localizeWithFallback(resources, keys, defaultValue);
expect(result).toBe(expected);
},
);
});
describe('#createLocalizationPipeKeyGenerator', () => {
const generateLocalizationPipeKey = createLocalizationPipeKeyGenerator({
values: { foo: { bar: 'baz' }, x: { y: 'z' } },
defaultResourceName: 'x',
currentCulture: null,
languages: [],
});
test.each`
resources | keys | defaultKey | expected
${['', '_']} | ${['TEST', 'OTHER']} | ${'DEFAULT'} | ${'TEST'}
${['foo']} | ${['bar']} | ${'DEFAULT'} | ${'foo::bar'}
${['x']} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'}
${['a', 'b', 'c']} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'}
${['']} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'}
${[]} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'}
${['foo']} | ${['y']} | ${'DEFAULT'} | ${'x::y'}
${['x']} | ${['y']} | ${'DEFAULT'} | ${'x::y'}
${['a', 'b', 'c']} | ${['y']} | ${'DEFAULT'} | ${'x::y'}
${['']} | ${['y']} | ${'DEFAULT'} | ${'x::y'}
${[]} | ${['y']} | ${'DEFAULT'} | ${'x::y'}
${['foo']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'foo::bar'}
${['x']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'x::y'}
${['a', 'b', 'c']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'x::y'}
${['']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'x::y'}
${[]} | ${['bar', 'y']} | ${'DEFAULT'} | ${'x::y'}
${['foo']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'}
${['x']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'}
${['a', 'b', 'c']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'}
${['']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'}
${[]} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'}
${['foo']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'}
${['x']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'}
${['a', 'b', 'c']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'}
${['']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'}
${[]} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'}
`(
'should return $expected when resource names are $resources and keys are $keys',
({ resources, keys, defaultKey, expected }) => {
const result = generateLocalizationPipeKey(resources, keys, defaultKey);
expect(result).toBe(expected);
},
);
});
});

176
npm/ng-packs/packages/core/src/lib/tests/localization.service.spec.ts

@ -1,7 +1,7 @@
import { Router } from '@angular/router';
import { createServiceFactory, SpectatorService, SpyObject } from '@ngneat/spectator/jest';
import { Store, Actions } from '@ngxs/store';
import { Observable, of, Subject } from 'rxjs';
import { Actions, Store } from '@ngxs/store';
import { of, Subject } from 'rxjs';
import { LocalizationService } from '../services/localization.service';
describe('LocalizationService', () => {
@ -75,4 +75,176 @@ describe('LocalizationService', () => {
}
});
});
describe('#localize', () => {
test.each`
resource | key | defaultValue | expected
${'_'} | ${'TEST'} | ${'DEFAULT'} | ${'TEST'}
${'foo'} | ${'bar'} | ${'DEFAULT'} | ${'baz'}
${'x'} | ${'bar'} | ${'DEFAULT'} | ${'DEFAULT'}
${'a'} | ${'bar'} | ${'DEFAULT'} | ${'DEFAULT'}
${''} | ${'bar'} | ${'DEFAULT'} | ${'DEFAULT'}
${undefined} | ${'bar'} | ${'DEFAULT'} | ${'DEFAULT'}
${'foo'} | ${'y'} | ${'DEFAULT'} | ${'DEFAULT'}
${'x'} | ${'y'} | ${'DEFAULT'} | ${'z'}
${'a'} | ${'y'} | ${'DEFAULT'} | ${'DEFAULT'}
${''} | ${'y'} | ${'DEFAULT'} | ${'DEFAULT'}
${undefined} | ${'y'} | ${'DEFAULT'} | ${'DEFAULT'}
${'foo'} | ${''} | ${'DEFAULT'} | ${'DEFAULT'}
${'x'} | ${''} | ${'DEFAULT'} | ${'DEFAULT'}
${'a'} | ${''} | ${'DEFAULT'} | ${'DEFAULT'}
${''} | ${''} | ${'DEFAULT'} | ${'DEFAULT'}
${undefined} | ${''} | ${'DEFAULT'} | ${'DEFAULT'}
${'foo'} | ${undefined} | ${'DEFAULT'} | ${'DEFAULT'}
${'x'} | ${undefined} | ${'DEFAULT'} | ${'DEFAULT'}
${'a'} | ${undefined} | ${'DEFAULT'} | ${'DEFAULT'}
${''} | ${undefined} | ${'DEFAULT'} | ${'DEFAULT'}
${undefined} | ${undefined} | ${'DEFAULT'} | ${'DEFAULT'}
`(
'should return observable $expected when resource name is $resource and key is $key',
async ({ resource, key, defaultValue, expected }) => {
store.select.andReturn(
of({
values: { foo: { bar: 'baz' }, x: { y: 'z' } },
defaultResourceName: 'x',
}),
);
const result = await service.localize(resource, key, defaultValue).toPromise();
expect(result).toBe(expected);
},
);
});
describe('#localizeSync', () => {
test.each`
resource | key | defaultValue | expected
${'_'} | ${'TEST'} | ${'DEFAULT'} | ${'TEST'}
${'foo'} | ${'bar'} | ${'DEFAULT'} | ${'baz'}
${'x'} | ${'bar'} | ${'DEFAULT'} | ${'DEFAULT'}
${'a'} | ${'bar'} | ${'DEFAULT'} | ${'DEFAULT'}
${''} | ${'bar'} | ${'DEFAULT'} | ${'DEFAULT'}
${undefined} | ${'bar'} | ${'DEFAULT'} | ${'DEFAULT'}
${'foo'} | ${'y'} | ${'DEFAULT'} | ${'DEFAULT'}
${'x'} | ${'y'} | ${'DEFAULT'} | ${'z'}
${'a'} | ${'y'} | ${'DEFAULT'} | ${'DEFAULT'}
${''} | ${'y'} | ${'DEFAULT'} | ${'DEFAULT'}
${undefined} | ${'y'} | ${'DEFAULT'} | ${'DEFAULT'}
${'foo'} | ${''} | ${'DEFAULT'} | ${'DEFAULT'}
${'x'} | ${''} | ${'DEFAULT'} | ${'DEFAULT'}
${'a'} | ${''} | ${'DEFAULT'} | ${'DEFAULT'}
${''} | ${''} | ${'DEFAULT'} | ${'DEFAULT'}
${undefined} | ${''} | ${'DEFAULT'} | ${'DEFAULT'}
${'foo'} | ${undefined} | ${'DEFAULT'} | ${'DEFAULT'}
${'x'} | ${undefined} | ${'DEFAULT'} | ${'DEFAULT'}
${'a'} | ${undefined} | ${'DEFAULT'} | ${'DEFAULT'}
${''} | ${undefined} | ${'DEFAULT'} | ${'DEFAULT'}
${undefined} | ${undefined} | ${'DEFAULT'} | ${'DEFAULT'}
`(
'should return $expected when resource name is $resource and key is $key',
({ resource, key, defaultValue, expected }) => {
store.selectSnapshot.andReturn({
values: { foo: { bar: 'baz' }, x: { y: 'z' } },
defaultResourceName: 'x',
});
const result = service.localizeSync(resource, key, defaultValue);
expect(result).toBe(expected);
},
);
});
describe('#localizeWithFallback', () => {
test.each`
resources | keys | defaultValue | expected
${['', '_']} | ${['TEST', 'OTHER']} | ${'DEFAULT'} | ${'TEST'}
${['foo']} | ${['bar']} | ${'DEFAULT'} | ${'baz'}
${['x']} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'}
${['a', 'b', 'c']} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'}
${['']} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'}
${[]} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'}
${['foo']} | ${['y']} | ${'DEFAULT'} | ${'z'}
${['x']} | ${['y']} | ${'DEFAULT'} | ${'z'}
${['a', 'b', 'c']} | ${['y']} | ${'DEFAULT'} | ${'z'}
${['']} | ${['y']} | ${'DEFAULT'} | ${'z'}
${[]} | ${['y']} | ${'DEFAULT'} | ${'z'}
${['foo']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'baz'}
${['x']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'z'}
${['a', 'b', 'c']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'z'}
${['']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'z'}
${[]} | ${['bar', 'y']} | ${'DEFAULT'} | ${'z'}
${['foo']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'}
${['x']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'}
${['a', 'b', 'c']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'}
${['']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'}
${[]} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'}
${['foo']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'}
${['x']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'}
${['a', 'b', 'c']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'}
${['']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'}
${[]} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'}
`(
'should return observable $expected when resource names are $resources and keys are $keys',
async ({ resources, keys, defaultValue, expected }) => {
store.select.andReturn(
of({
values: { foo: { bar: 'baz' }, x: { y: 'z' } },
defaultResourceName: 'x',
}),
);
const result = await service
.localizeWithFallback(resources, keys, defaultValue)
.toPromise();
expect(result).toBe(expected);
},
);
});
describe('#localizeWithFallbackSync', () => {
test.each`
resources | keys | defaultValue | expected
${['', '_']} | ${['TEST', 'OTHER']} | ${'DEFAULT'} | ${'TEST'}
${['foo']} | ${['bar']} | ${'DEFAULT'} | ${'baz'}
${['x']} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'}
${['a', 'b', 'c']} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'}
${['']} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'}
${[]} | ${['bar']} | ${'DEFAULT'} | ${'DEFAULT'}
${['foo']} | ${['y']} | ${'DEFAULT'} | ${'z'}
${['x']} | ${['y']} | ${'DEFAULT'} | ${'z'}
${['a', 'b', 'c']} | ${['y']} | ${'DEFAULT'} | ${'z'}
${['']} | ${['y']} | ${'DEFAULT'} | ${'z'}
${[]} | ${['y']} | ${'DEFAULT'} | ${'z'}
${['foo']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'baz'}
${['x']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'z'}
${['a', 'b', 'c']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'z'}
${['']} | ${['bar', 'y']} | ${'DEFAULT'} | ${'z'}
${[]} | ${['bar', 'y']} | ${'DEFAULT'} | ${'z'}
${['foo']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'}
${['x']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'}
${['a', 'b', 'c']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'}
${['']} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'}
${[]} | ${['']} | ${'DEFAULT'} | ${'DEFAULT'}
${['foo']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'}
${['x']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'}
${['a', 'b', 'c']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'}
${['']} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'}
${[]} | ${[]} | ${'DEFAULT'} | ${'DEFAULT'}
`(
'should return $expected when resource names are $resources and keys are $keys',
({ resources, keys, defaultValue, expected }) => {
store.selectSnapshot.andReturn({
values: { foo: { bar: 'baz' }, x: { y: 'z' } },
defaultResourceName: 'x',
});
const result = service.localizeWithFallbackSync(resources, keys, defaultValue);
expect(result).toBe(expected);
},
);
});
});

1
npm/ng-packs/packages/core/src/lib/utils/index.ts

@ -3,6 +3,7 @@ export * from './form-utils';
export * from './generator-utils';
export * from './initial-utils';
export * from './lazy-load-utils';
export * from './localization-utils';
export * from './number-utils';
export * from './route-utils';
export * from './rxjs-utils';

56
npm/ng-packs/packages/core/src/lib/utils/localization-utils.ts

@ -0,0 +1,56 @@
import { ApplicationConfiguration } from '../models/application-configuration';
export function createLocalizer(localization: ApplicationConfiguration.Localization) {
return (resourceName: string, key: string, defaultValue: string) => {
if (resourceName === '_') return key;
const resource = localization.values[resourceName];
if (!resource) return defaultValue;
return resource[key] || defaultValue;
};
}
export function createLocalizerWithFallback(localization: ApplicationConfiguration.Localization) {
const findLocalization = createLocalizationFinder(localization);
return (resourceNames: string[], keys: string[], defaultValue: string) => {
const { localized } = findLocalization(resourceNames, keys);
return localized || defaultValue;
};
}
export function createLocalizationPipeKeyGenerator(
localization: ApplicationConfiguration.Localization,
) {
const findLocalization = createLocalizationFinder(localization);
return (resourceNames: string[], keys: string[], defaultKey: string) => {
const { resourceName, key } = findLocalization(resourceNames, keys);
return !resourceName ? defaultKey : resourceName === '_' ? key : `${resourceName}::${key}`;
};
}
function createLocalizationFinder(localization: ApplicationConfiguration.Localization) {
const localize = createLocalizer(localization);
return (resourceNames: string[], keys: string[]) => {
resourceNames = resourceNames.concat(localization.defaultResourceName).filter(Boolean);
const resourceCount = resourceNames.length;
const keyCount = keys.length;
for (let i = 0; i < resourceCount; i++) {
const resourceName = resourceNames[i];
for (let j = 0; j < keyCount; j++) {
const key = keys[j];
const localized = localize(resourceName, key, null);
if (localized) return { resourceName, key, localized };
}
}
return { resourceName: undefined, key: undefined, localized: undefined };
};
}

8
npm/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts

@ -30,10 +30,6 @@ export class LoaderBarComponent implements OnDestroy, OnInit {
@Input()
color = '#77b6ff';
@Input()
filter = (action: StartLoader | StopLoader) =>
action.payload.url.indexOf('openid-configuration') < 0;
@Input()
isLoading = false;
@ -47,6 +43,10 @@ export class LoaderBarComponent implements OnDestroy, OnInit {
stopDelay = 800;
@Input()
filter = (action: StartLoader | StopLoader) =>
action.payload.url.indexOf('openid-configuration') < 0;
private readonly clearProgress = () => {
this.progressLevel = 0;
this.cdRef.detectChanges();

Loading…
Cancel
Save