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