62 lines
2.3 KiB
JavaScript
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] };
|
|
}
|