frontend: get rid of evil eval function in table sorting
This commit is contained in:
@@ -18,3 +18,29 @@ export function newChapterCount(entry: ViewEntry): number {
|
||||
const max = entry.media?.chapters || entry.chapters.reduce((l, r) => Math.max(l, r.chapter), 0);
|
||||
return Math.max(0, max - entry.entry.progress);
|
||||
}
|
||||
|
||||
/**
|
||||
* Dynamically get a nested value from an array or
|
||||
* object with a string.
|
||||
*
|
||||
* @example get(person, 'friends[0].name')
|
||||
* @link https://github.com/rayepps/radash/blob/master/src/object.ts#L214
|
||||
*/
|
||||
export const get = <TDefault = unknown>(
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
value: any,
|
||||
path: string,
|
||||
defaultValue?: TDefault
|
||||
): TDefault => {
|
||||
const segments = path.split(/[.[\]]/g)
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
let current: any = value
|
||||
for (const key of segments) {
|
||||
if (current === null) return defaultValue as TDefault
|
||||
if (current === undefined) return defaultValue as TDefault
|
||||
if (key.trim() === '') continue
|
||||
current = current[key]
|
||||
}
|
||||
if (current === undefined) return defaultValue as TDefault
|
||||
return current
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user