|
|
|
@ -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<T extends { [key: string | number | symbol]: any }> { |
|
|
|
@ -158,14 +159,26 @@ export abstract class AbstractNavTreeService<T extends ABP.Nav> |
|
|
|
{ |
|
|
|
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<T extends ABP.Nav> |
|
|
|
.createOnUpdateStream(state => state) |
|
|
|
.subscribe(() => this.refresh()); |
|
|
|
this.permissionService = injector.get(PermissionService); |
|
|
|
this.localizationService = injector.get(LocalizationService); |
|
|
|
this.othersGroup = injector.get(OTHERS_GROUP); |
|
|
|
} |
|
|
|
|
|
|
|
|