mirror of https://github.com/abpframework/abp.git
1 changed files with 8 additions and 6 deletions
@ -1,15 +1,17 @@ |
|||
import { Injectable, TrackByFunction } from '@angular/core'; |
|||
import { O } from 'ts-toolbelt'; |
|||
|
|||
export const trackBy = <T = any>(key: keyof T): TrackByFunction<T> => (_, item) => item[key]; |
|||
|
|||
export const trackByDeep = <T = any>( |
|||
...keys: T extends object ? O.Paths<T> : never |
|||
): TrackByFunction<T> => (_, item) => keys.reduce((acc, key) => acc[key], item); |
|||
|
|||
@Injectable({ |
|||
providedIn: 'root', |
|||
}) |
|||
export class TrackByService<ItemType = any> { |
|||
by<T = ItemType>(key: keyof T): TrackByFunction<T> { |
|||
return (_, item) => item[key]; |
|||
} |
|||
by = trackBy; |
|||
|
|||
byDeep<T = ItemType>(...keys: T extends object ? O.Paths<T> : never): TrackByFunction<T> { |
|||
return (_, item) => keys.reduce((acc, key) => acc[key], item); |
|||
} |
|||
byDeep = trackByDeep; |
|||
} |
|||
|
|||
Loading…
Reference in new issue