42 lines
1.0 KiB
JavaScript
42 lines
1.0 KiB
JavaScript
function filter(elements, filters) {
|
|
const compareDate = (dateA, dateB) => {
|
|
const dA = new Date(dateA);
|
|
const dB = new Date(dateB);
|
|
|
|
if (filters.yearOrder === "asc") {
|
|
return dB - dA;
|
|
} else {
|
|
return dA - dB;
|
|
}
|
|
};
|
|
|
|
|
|
return [...elements].sort((a, b) => {
|
|
const sortedATasks = a.tasks.sort((taskA, taskB) =>
|
|
compareDate(taskA.start, taskB.start)
|
|
);
|
|
const sortedBTasks = b.tasks.sort((taskA, taskB) =>
|
|
compareDate(taskA.start, taskB.start)
|
|
);
|
|
|
|
const timeComparison = compareDate(
|
|
sortedATasks[0].start,
|
|
sortedBTasks[0].start
|
|
);
|
|
|
|
if (timeComparison !== 0) {
|
|
return timeComparison;
|
|
}
|
|
|
|
if (filters.alphabetical !== null) {
|
|
return filters.alphabetical === "asc"
|
|
? a.name.localeCompare(b.name)
|
|
: b.name.localeCompare(a.name);
|
|
}
|
|
|
|
return 0;
|
|
});
|
|
}
|
|
|
|
|
|
export default filter; |