Files
2026-10-29 11:57:29 +01:00

62 lines
2.3 KiB
JavaScript

// Generated, do not edit. sha256:6f5f28d079f7f6e64bd296677a36276bfb053415d4ab690712c66e663e2b15d6
export const valueOf = (col, row) => (col.sortValue ? col.sortValue(row) : row[col.key]);
export function compare(a, b, dir) {
if (a == null && b == null) return 0;
if (a == null) return 1;
if (b == null) return -1;
const r = (typeof a === 'number' && typeof b === 'number')
? a - b
: String(a).localeCompare(String(b), 'nl', { numeric: true });
return dir === 'desc' ? -r : r;
}
export function sortRows(rows, columns, sort) {
if (!sort) return rows.slice();
const col = columns.find(c => c.key === sort.key);
if (!col) return rows.slice();
return rows.slice().sort((x, y) => compare(valueOf(col, x), valueOf(col, y), sort.dir));
}
export function rowText(row, columns) {
return columns.map(c => {
const v = c.render ? c.render(row) : valueOf(c, row);
return String(v == null ? '' : v).replace(/<[^>]*>/g, ' ');
}).join(' ').toLowerCase();
}
export function filterRows(rows, columns, { search = '', groupKey = null, hidden = new Set() } = {}) {
const q = search.trim().toLowerCase();
let out = q ? rows.filter(r => rowText(r, columns).includes(q)) : rows;
if (groupKey && hidden.size) {
const col = columns.find(c => c.key === groupKey);
if (col) out = out.filter(r => !hidden.has(String(col.group.value(r))));
}
return out;
}
export function groupValues(rows, col, order = 'asc') {
const seen = new Map();
for (const r of rows) {
const v = col.group.value(r);
const tok = String(v);
if (!seen.has(tok)) seen.set(tok, v);
}
return [...seen.entries()]
.map(([token, value]) => ({ token, value, label: col.group.label ? col.group.label(value) : value }))
.sort((a, b) => compare(a.value, b.value, order));
}
export const toggleToken = (token, list = []) =>
(list.includes(token) ? list.filter(t => t !== token) : [...list, token]);
export function cycleGroupToken(token, hiddenList = [], collapsedList = []) {
const hidden = new Set(hiddenList);
const collapsed = new Set(collapsedList);
const shown = !hidden.has(token);
if (shown && !collapsed.has(token)) collapsed.add(token);
else if (shown) { collapsed.delete(token); hidden.add(token); }
else { hidden.delete(token); collapsed.delete(token); }
return { hidden: [...hidden], collapsed: [...collapsed] };
}