From 8197eb1289a1c935c5e32b5f0fcf481e0c420293 Mon Sep 17 00:00:00 2001 From: Sinan997 Date: Mon, 31 Jul 2023 12:57:37 +0300 Subject: [PATCH 1/4] settings tab re-order --- .../src/lib/providers/feature-management-settings.provider.ts | 2 +- .../config/src/lib/providers/setting-tab.provider.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/feature-management/src/lib/providers/feature-management-settings.provider.ts b/npm/ng-packs/packages/feature-management/src/lib/providers/feature-management-settings.provider.ts index 2d7664bb46..30d6701d4b 100644 --- a/npm/ng-packs/packages/feature-management/src/lib/providers/feature-management-settings.provider.ts +++ b/npm/ng-packs/packages/feature-management/src/lib/providers/feature-management-settings.provider.ts @@ -17,7 +17,7 @@ export function configureSettingTabs(settingtabs: SettingTabsService) { settingtabs.add([ { name: eFeatureManagementTabNames.FeatureManagement, - order: 104, + order: 120, requiredPolicy: 'FeatureManagement.ManageHostFeatures', component: FeatureManagementTabComponent, }, diff --git a/npm/ng-packs/packages/setting-management/config/src/lib/providers/setting-tab.provider.ts b/npm/ng-packs/packages/setting-management/config/src/lib/providers/setting-tab.provider.ts index f05104c177..91a31f70cc 100644 --- a/npm/ng-packs/packages/setting-management/config/src/lib/providers/setting-tab.provider.ts +++ b/npm/ng-packs/packages/setting-management/config/src/lib/providers/setting-tab.provider.ts @@ -17,7 +17,7 @@ export function configureSettingTabs(settingTabs: SettingTabsService) { settingTabs.add([ { name: eSettingManamagementSettingTabNames.EmailSettingGroup, - order: 100, + order: 110, requiredPolicy: 'SettingManagement.Emailing', component: EmailSettingGroupComponent, }, From 9b778069fdcc7e1079d40ddcba55b3758ca028ab Mon Sep 17 00:00:00 2001 From: Sinan997 Date: Mon, 31 Jul 2023 17:50:39 +0300 Subject: [PATCH 2/4] re-setting order to default value and new sorting compare function --- .../core/src/lib/services/routes.service.ts | 22 +++++++++++++++---- .../feature-management-settings.provider.ts | 2 +- .../src/lib/providers/setting-tab.provider.ts | 2 +- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/services/routes.service.ts b/npm/ng-packs/packages/core/src/lib/services/routes.service.ts index 329d2a370c..ec8ee4c4e5 100644 --- a/npm/ng-packs/packages/core/src/lib/services/routes.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/routes.service.ts @@ -12,6 +12,7 @@ import { } from '../utils/tree-utils'; import { ConfigStateService } from './config-state.service'; import { PermissionService } from './permission.service'; +import { LocalizationService } from './localization.service'; // eslint-disable-next-line @typescript-eslint/ban-types export abstract class AbstractTreeService { @@ -158,14 +159,26 @@ export abstract class AbstractNavTreeService { private subscription: Subscription; private permissionService: PermissionService; + private localizationService: LocalizationService readonly id = 'name'; readonly parentId = 'parentName'; readonly hide = (item: T) => item.invisible || !this.isGranted(item); readonly sort = (a: T, b: T) => { - if (!Number.isInteger(a.order)) return 1; - if (!Number.isInteger(b.order)) return -1; - - return (a.order as number) - (b.order as number); + const aName = this.localizationService.instant(a.name); + const bName = this.localizationService.instant(b.name); + const aNumber = a.order; + const bNumber = b.order; + + if (!Number.isInteger(aNumber)) return 1; + if (!Number.isInteger(bNumber)) return -1; + + if (aNumber > bNumber) return 1 + if (aNumber < bNumber) return -1 + + if ( aName > bName ) return 1; + if ( aName < bName ) return -1; + + return 0 }; constructor(protected injector: Injector) { @@ -175,6 +188,7 @@ export abstract class AbstractNavTreeService .createOnUpdateStream(state => state) .subscribe(() => this.refresh()); this.permissionService = injector.get(PermissionService); + this.localizationService = injector.get(LocalizationService); this.othersGroup = injector.get(OTHERS_GROUP); } diff --git a/npm/ng-packs/packages/feature-management/src/lib/providers/feature-management-settings.provider.ts b/npm/ng-packs/packages/feature-management/src/lib/providers/feature-management-settings.provider.ts index 30d6701d4b..64bbfb9932 100644 --- a/npm/ng-packs/packages/feature-management/src/lib/providers/feature-management-settings.provider.ts +++ b/npm/ng-packs/packages/feature-management/src/lib/providers/feature-management-settings.provider.ts @@ -17,7 +17,7 @@ export function configureSettingTabs(settingtabs: SettingTabsService) { settingtabs.add([ { name: eFeatureManagementTabNames.FeatureManagement, - order: 120, + order: 100, requiredPolicy: 'FeatureManagement.ManageHostFeatures', component: FeatureManagementTabComponent, }, diff --git a/npm/ng-packs/packages/setting-management/config/src/lib/providers/setting-tab.provider.ts b/npm/ng-packs/packages/setting-management/config/src/lib/providers/setting-tab.provider.ts index 91a31f70cc..f05104c177 100644 --- a/npm/ng-packs/packages/setting-management/config/src/lib/providers/setting-tab.provider.ts +++ b/npm/ng-packs/packages/setting-management/config/src/lib/providers/setting-tab.provider.ts @@ -17,7 +17,7 @@ export function configureSettingTabs(settingTabs: SettingTabsService) { settingTabs.add([ { name: eSettingManamagementSettingTabNames.EmailSettingGroup, - order: 110, + order: 100, requiredPolicy: 'SettingManagement.Emailing', component: EmailSettingGroupComponent, }, From 939f116ebcfe01dc2e2fb90ddaefbb783d2fb30a Mon Sep 17 00:00:00 2001 From: Sinan997 Date: Tue, 1 Aug 2023 12:14:00 +0300 Subject: [PATCH 3/4] moving logic to compare func --- .../packages/core/src/lib/services/routes.service.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/core/src/lib/services/routes.service.ts b/npm/ng-packs/packages/core/src/lib/services/routes.service.ts index ec8ee4c4e5..5f05eaa8ab 100644 --- a/npm/ng-packs/packages/core/src/lib/services/routes.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/routes.service.ts @@ -164,6 +164,10 @@ export abstract class AbstractNavTreeService readonly parentId = 'parentName'; readonly hide = (item: T) => item.invisible || !this.isGranted(item); readonly sort = (a: T, b: T) => { + return this.compareFunc(a,b) + }; + + readonly compareFunc = (a: T, b: T) => { const aName = this.localizationService.instant(a.name); const bName = this.localizationService.instant(b.name); const aNumber = a.order; @@ -179,7 +183,7 @@ export abstract class AbstractNavTreeService if ( aName < bName ) return -1; return 0 - }; + } constructor(protected injector: Injector) { super(); From 2f112e136726e7340727f704da3d6567f73ebfe1 Mon Sep 17 00:00:00 2001 From: Sinan997 Date: Wed, 2 Aug 2023 13:54:32 +0300 Subject: [PATCH 4/4] SORT_COMPARE_FUNC injection token added --- .../packages/core/src/lib/core.module.ts | 5 ++++ .../core/src/lib/services/routes.service.ts | 24 +++-------------- .../core/src/lib/tokens/compare-func.token.ts | 27 +++++++++++++++++++ 3 files changed, 35 insertions(+), 21 deletions(-) create mode 100644 npm/ng-packs/packages/core/src/lib/tokens/compare-func.token.ts diff --git a/npm/ng-packs/packages/core/src/lib/core.module.ts b/npm/ng-packs/packages/core/src/lib/core.module.ts index c2d497ae7b..c4f7c78fa7 100644 --- a/npm/ng-packs/packages/core/src/lib/core.module.ts +++ b/npm/ng-packs/packages/core/src/lib/core.module.ts @@ -38,6 +38,7 @@ import { SafeHtmlPipe } from './pipes/safe-html.pipe'; import { QUEUE_MANAGER } from './tokens/queue.token'; import { DefaultQueueManager } from './utils/queue'; import { IncludeLocalizationResourcesProvider } from './providers/include-localization-resources.provider'; +import { SORT_COMPARE_FUNC, compareFuncFactory } from './tokens/compare-func.token'; /** * BaseCoreModule is the module that holds @@ -176,6 +177,10 @@ export class CoreModule { useValue: localizationContributor(options.localizations), deps: [LocalizationService], }, + { + provide: SORT_COMPARE_FUNC, + useFactory: compareFuncFactory + }, { provide: QUEUE_MANAGER, useClass: DefaultQueueManager, diff --git a/npm/ng-packs/packages/core/src/lib/services/routes.service.ts b/npm/ng-packs/packages/core/src/lib/services/routes.service.ts index 5f05eaa8ab..c3a1ffe07f 100644 --- a/npm/ng-packs/packages/core/src/lib/services/routes.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/routes.service.ts @@ -12,7 +12,7 @@ import { } from '../utils/tree-utils'; import { ConfigStateService } from './config-state.service'; import { PermissionService } from './permission.service'; -import { LocalizationService } from './localization.service'; +import { SORT_COMPARE_FUNC } from '../tokens/compare-func.token'; // eslint-disable-next-line @typescript-eslint/ban-types export abstract class AbstractTreeService { @@ -159,7 +159,7 @@ export abstract class AbstractNavTreeService { private subscription: Subscription; private permissionService: PermissionService; - private localizationService: LocalizationService + private compareFunc; readonly id = 'name'; readonly parentId = 'parentName'; readonly hide = (item: T) => item.invisible || !this.isGranted(item); @@ -167,24 +167,6 @@ export abstract class AbstractNavTreeService return this.compareFunc(a,b) }; - readonly compareFunc = (a: T, b: T) => { - const aName = this.localizationService.instant(a.name); - const bName = this.localizationService.instant(b.name); - const aNumber = a.order; - const bNumber = b.order; - - if (!Number.isInteger(aNumber)) return 1; - if (!Number.isInteger(bNumber)) return -1; - - if (aNumber > bNumber) return 1 - if (aNumber < bNumber) return -1 - - if ( aName > bName ) return 1; - if ( aName < bName ) return -1; - - return 0 - } - constructor(protected injector: Injector) { super(); const configState = this.injector.get(ConfigStateService); @@ -192,8 +174,8 @@ export abstract class AbstractNavTreeService .createOnUpdateStream(state => state) .subscribe(() => this.refresh()); this.permissionService = injector.get(PermissionService); - this.localizationService = injector.get(LocalizationService); this.othersGroup = injector.get(OTHERS_GROUP); + this.compareFunc = injector.get(SORT_COMPARE_FUNC); } protected isGranted({ requiredPolicy }: T): boolean { diff --git a/npm/ng-packs/packages/core/src/lib/tokens/compare-func.token.ts b/npm/ng-packs/packages/core/src/lib/tokens/compare-func.token.ts new file mode 100644 index 0000000000..bf66ec2b54 --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/tokens/compare-func.token.ts @@ -0,0 +1,27 @@ +import { InjectionToken, inject } from '@angular/core'; +import { LocalizationService } from '../services'; + +export const SORT_COMPARE_FUNC = new InjectionToken< 0 | 1 | -1 >('SORT_COMPARE_FUNC'); + +export function compareFuncFactory() { + const localizationService = inject(LocalizationService) + const fn = (a,b) => { + const aName = localizationService.instant(a.name); + const bName = localizationService.instant(b.name); + const aNumber = a.order; + const bNumber = b.order; + + if (!Number.isInteger(aNumber)) return 1; + if (!Number.isInteger(bNumber)) return -1; + + if (aNumber > bNumber) return 1 + if (aNumber < bNumber) return -1 + + if ( aName > bName ) return 1; + if ( aName < bName ) return -1; + + return 0 + } + + return fn +} \ No newline at end of file