projects/swimlane/ngx-datatable/src/lib/utils/selection.ts
export function selectRows(selected: any[], row: any, comparefn: any) {
const selectedIndex = comparefn(row, selected);
if (selectedIndex > -1) {
selected.splice(selectedIndex, 1);
} else {
selected.push(row);
}
return selected;
}
export function selectRowsBetween(
selected: any[],
rows: any[],
index: number,
prevIndex: number,
comparefn: any
): any[] {
const reverse = index < prevIndex;
for (let i = 0; i < rows.length; i++) {
const row = rows[i];
const greater = i >= prevIndex && i <= index;
const lesser = i <= prevIndex && i >= index;
let range = { start: 0, end: 0 };
if (reverse) {
range = {
start: index,
end: prevIndex
};
} else {
range = {
start: prevIndex,
end: index + 1
};
}
if ((reverse && lesser) || (!reverse && greater)) {
// if in the positive range to be added to `selected`, and
// not already in the selected array, add it
if (i >= range.start && i <= range.end) {
selected.push(row);
}
}
}
return selected;
}