UNPKG

@allurereport/web-allure2

Version:

The static files for Allure Classic Report

64 lines (55 loc) 1.76 kB
import { values } from "@/utils/statuses.js"; function byOrder(a, b) { return a.order < b.order ? -1 : 1; } function byName(a, b) { return String(a.name).toLowerCase() < String(b.name).toLowerCase() ? -1 : 1; } function byDuration(a, b) { if (a.time && a.time.duration && b.time && b.time.duration) { return a.time.duration < b.time.duration ? -1 : 1; } return 1; } function byMaxDuration(a, b) { if (a.time && a.time.maxDuration && b.time && b.time.maxDuration) { return a.time.maxDuration < b.time.maxDuration ? -1 : 1; } return 1; } function byNodeStatus(a, b) { return values.indexOf(a.status) > values.indexOf(b.status) ? -1 : 1; } function byGroupStatuses(a, b) { return values.reduce((all, cur) => { return a.statistic[cur] !== b.statistic[cur] && all === 0 ? a.statistic[cur] - b.statistic[cur] : all; }, 0); } function compare(a, b, nodeCmp, groupCmp, direction) { if (a.children && !b.children) { return -1; } else if (!a.children && b.children) { return 1; } else if (a.children && b.children) { return direction * groupCmp(a, b); } else if (!a.children && !b.children) { return direction * nodeCmp(a, b); } else { return 0; } } export default function getComparator({ sorter, ascending }) { const direction = ascending ? 1 : -1; switch (sorter) { case "sorter.order": return (a, b) => compare(a, b, byOrder, byName, direction); case "sorter.name": return (a, b) => compare(a, b, byName, byName, direction); case "sorter.duration": return (a, b) => compare(a, b, byDuration, byMaxDuration, direction); case "sorter.status": return (a, b) => compare(a, b, byNodeStatus, byGroupStatuses, direction); default: return 0; } }