@trail-ui/react
Version:
77 lines (75 loc) • 1.89 kB
JavaScript
// src/editable-table/helpers.tsx
function multiSelectFilter(row, columnId, filterValue) {
if (!Array.isArray(filterValue)) {
return true;
}
const rowValue = row.getValue(columnId);
return filterValue.includes(rowValue);
}
function dateSortingFn(rowA, rowB, columnId) {
const dateStringA = rowA.getValue(columnId);
const dateStringB = rowB.getValue(columnId);
const parseCustomDate = (dateStr) => {
if (!dateStr) {
return new Date(Number.NaN);
}
const parts = dateStr.trim().split(" ");
if (parts.length !== 3) {
return new Date(Number.NaN);
}
const [day, month, year] = parts;
const months = {
Jan: "01",
Feb: "02",
Mar: "03",
Apr: "04",
May: "05",
Jun: "06",
Jul: "07",
Aug: "08",
Sep: "09",
Oct: "10",
Nov: "11",
Dec: "12"
};
const monthNum = months[month];
if (!monthNum) {
return new Date(Number.NaN);
}
const isoDate = `${year}-${monthNum}-${day.padStart(2, "0")}`;
return new Date(isoDate);
};
const dateA = parseCustomDate(dateStringA);
const dateB = parseCustomDate(dateStringB);
if (Number.isNaN(dateA.getTime()) && Number.isNaN(dateB.getTime())) {
return 0;
}
if (Number.isNaN(dateA.getTime())) {
return 1;
}
if (Number.isNaN(dateB.getTime())) {
return -1;
}
return dateA.getTime() - dateB.getTime();
}
function areArraysSame(a, b) {
if (a.length !== b.length)
return false;
const countMap = /* @__PURE__ */ new Map();
for (const value of a) {
countMap.set(value, (countMap.get(value) || 0) + 1);
}
for (const value of b) {
if (!countMap.has(value))
return false;
countMap.set(value, countMap.get(value) - 1);
if (countMap.get(value) < 0)
return false;
}
return true;
}
export {
multiSelectFilter,
dateSortingFn,
areArraysSame
};