mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2025-11-17 18:21:28 +10:00
40 lines
1021 B
TypeScript
40 lines
1021 B
TypeScript
import dayjs from "dayjs";
|
|
|
|
export const sortByDate = <T>(a: T, b: T, key: keyof T, desc = true) => {
|
|
if (!a[key] || !b[key]) return 0;
|
|
if (!(a[key] instanceof Date) || !(b[key] instanceof Date)) return 0;
|
|
|
|
if (desc) return dayjs(a[key] as Date).isBefore(dayjs(b[key] as Date)) ? 1 : -1;
|
|
else return dayjs(a[key] as Date).isBefore(dayjs(b[key] as Date)) ? -1 : 1;
|
|
};
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
export const deepSearchAndParseDates = (obj: any, dateKeys: string[]): any => {
|
|
if (typeof obj !== "object" || obj === null) {
|
|
return obj;
|
|
}
|
|
|
|
const keys = Object.keys(obj);
|
|
|
|
if (keys.length === 0) {
|
|
return obj;
|
|
}
|
|
|
|
for (const key of keys) {
|
|
let value = obj[key];
|
|
|
|
if (dateKeys.includes(key)) {
|
|
if (typeof value === "string") {
|
|
const parsedDate = new Date(value);
|
|
if (!isNaN(parsedDate.getTime())) {
|
|
value = parsedDate;
|
|
}
|
|
}
|
|
}
|
|
|
|
obj[key] = deepSearchAndParseDates(value, dateKeys);
|
|
}
|
|
|
|
return obj;
|
|
};
|