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;
}),
filter(Boolean)
filter(Boolean),
)
.subscribe(val => this.localizations$.next(val));
}
@ -211,9 +211,12 @@ export class LocalizationService {
key: string | LocalizationWithDefault,
...interpolateParams: string[]
) {
if (!key) key = '';
let defaultValue = '';
if (!key) {
return defaultValue;
}
if (typeof key !== 'string') {
defaultValue = key.defaultValue;
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];
if (item.baseResources.length === 0) {
@ -280,10 +286,12 @@ function recursivelyMergeBaseResources(baseResourceName: string, source: Resourc
}
function mergeResourcesWithBaseResource(resource: ResourceDto): ResourceDto {
const entities: Array<[string, ApplicationLocalizationResourceDto]> = Object.keys(resource).map(key => {
const newValue = recursivelyMergeBaseResources(key, resource);
return [key, newValue];
});
const entities: Array<[string, ApplicationLocalizationResourceDto]> = Object.keys(resource).map(
key => {
const newValue = recursivelyMergeBaseResources(key, resource);
return [key, newValue];
},
);
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 { SortableItem } from '../models';
import type { SortableItem } from '../models';
import { LocalizationService } from '../services';
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() {
const localizationService = inject(LocalizationService);
const fn = (a: SortableItem, b: SortableItem) => {
const aName = localizationService.instant(a.name);
const bName = localizationService.instant(b.name);
const aNumber = a.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(bNumber)) return -1;
if (aNumber > bNumber) return 1;
if (aNumber < bNumber) return -1;
if (!a?.name || !b?.name) {
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 (a.id > b.id) return 1;
if (a.id < b.id) return -1;
return 0;
};

Loading…
Cancel
Save