Browse Source

enhancement(angular/core): Returning empty string if key is not present in localization service, improving sort compare function

pull/19700/head
Yusuf Çırak 2 years ago
parent
commit
20687e85de
  1. 22
      npm/ng-packs/packages/core/src/lib/services/localization.service.ts
  2. 21
      npm/ng-packs/packages/core/src/lib/tokens/compare-func.token.ts

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

@ -99,7 +99,7 @@ export class LocalizationService {
return local; return local;
}), }),
filter(Boolean) filter(Boolean),
) )
.subscribe(val => this.localizations$.next(val)); .subscribe(val => this.localizations$.next(val));
} }
@ -211,9 +211,12 @@ export class LocalizationService {
key: string | LocalizationWithDefault, key: string | LocalizationWithDefault,
...interpolateParams: string[] ...interpolateParams: string[]
) { ) {
if (!key) key = '';
let defaultValue = ''; let defaultValue = '';
if (!key) {
return defaultValue;
}
if (typeof key !== 'string') { if (typeof key !== 'string') {
defaultValue = key.defaultValue; defaultValue = key.defaultValue;
key = key.key; key = key.key;
@ -265,7 +268,10 @@ export class LocalizationService {
} }
} }
function recursivelyMergeBaseResources(baseResourceName: string, source: ResourceDto): ApplicationLocalizationResourceDto { function recursivelyMergeBaseResources(
baseResourceName: string,
source: ResourceDto,
): ApplicationLocalizationResourceDto {
const item = source[baseResourceName]; const item = source[baseResourceName];
if (item.baseResources.length === 0) { if (item.baseResources.length === 0) {
@ -280,10 +286,12 @@ function recursivelyMergeBaseResources(baseResourceName: string, source: Resourc
} }
function mergeResourcesWithBaseResource(resource: ResourceDto): ResourceDto { function mergeResourcesWithBaseResource(resource: ResourceDto): ResourceDto {
const entities: Array<[string, ApplicationLocalizationResourceDto]> = Object.keys(resource).map(key => { const entities: Array<[string, ApplicationLocalizationResourceDto]> = Object.keys(resource).map(
const newValue = recursivelyMergeBaseResources(key, resource); key => {
return [key, newValue]; const newValue = recursivelyMergeBaseResources(key, resource);
}); return [key, newValue];
},
);
return entities.reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {}); return entities.reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {});
} }

21
npm/ng-packs/packages/core/src/lib/tokens/compare-func.token.ts

@ -1,5 +1,5 @@
import { InjectionToken, inject } from '@angular/core'; import { InjectionToken, inject } from '@angular/core';
import { SortableItem } from '../models'; import type { SortableItem } from '../models';
import { LocalizationService } from '../services'; import { LocalizationService } from '../services';
export const SORT_COMPARE_FUNC = new InjectionToken<(a: SortableItem, b: SortableItem) => number>( export const SORT_COMPARE_FUNC = new InjectionToken<(a: SortableItem, b: SortableItem) => number>(
@ -9,23 +9,28 @@ export const SORT_COMPARE_FUNC = new InjectionToken<(a: SortableItem, b: Sortabl
export function compareFuncFactory() { export function compareFuncFactory() {
const localizationService = inject(LocalizationService); const localizationService = inject(LocalizationService);
const fn = (a: SortableItem, b: SortableItem) => { const fn = (a: SortableItem, b: SortableItem) => {
const aName = localizationService.instant(a.name);
const bName = localizationService.instant(b.name);
const aNumber = a.order; const aNumber = a.order;
const bNumber = b.order; const bNumber = b.order;
if (aNumber > bNumber) return 1;
if (aNumber < bNumber) return -1;
if (a.id > b.id) return 1;
if (a.id < b.id) return -1;
if (!Number.isInteger(aNumber)) return 1; if (!Number.isInteger(aNumber)) return 1;
if (!Number.isInteger(bNumber)) return -1; if (!Number.isInteger(bNumber)) return -1;
if (aNumber > bNumber) return 1; if (!a?.name || !b?.name) {
if (aNumber < bNumber) return -1; return -1;
}
const aName = localizationService.instant(a.name);
const bName = localizationService.instant(b.name);
if (aName > bName) return 1; if (aName > bName) return 1;
if (aName < bName) return -1; if (aName < bName) return -1;
if (a.id > b.id) return 1;
if (a.id < b.id) return -1;
return 0; return 0;
}; };

Loading…
Cancel
Save