@revolist/revogrid
Version:
Virtual reactive data grid spreadsheet component - RevoGrid.
52 lines (51 loc) • 1.87 kB
JavaScript
/*!
* Built by Revolist OU ❤️
*/
import { ROW_FOCUSED_CLASS } from "../../utils/consts";
/**
* Class is responsible for highlighting rows in a table.
*/
export class RowHighlightPlugin {
constructor() {
this.currentRange = null;
}
selectionChange(e, renderedRows) {
// clear previous range
if (this.currentRange) {
renderedRows.forEach((row, y) => {
var _a;
// skip current range
if (e && y >= e.y && y <= e.y1) {
return;
}
// clear previous range
if (row &&
row.$elm$ instanceof HTMLElement &&
row.$elm$.classList.contains(ROW_FOCUSED_CLASS)) {
row.$elm$.classList.remove(ROW_FOCUSED_CLASS);
if ((_a = row.$attrs$) === null || _a === void 0 ? void 0 : _a.class.includes(ROW_FOCUSED_CLASS)) {
row.$attrs$.class = row.$attrs$.class.replace(ROW_FOCUSED_CLASS, '');
}
}
});
}
// apply new range
if (e) {
for (let y = e.y; y <= e.y1; y++) {
const row = renderedRows.get(y);
if (row &&
row.$elm$ instanceof HTMLElement &&
!row.$elm$.classList.contains(ROW_FOCUSED_CLASS)) {
const attrs = (row.$attrs$ = row.$attrs$ || {});
attrs.class = (attrs.class || '') + ' ' + ROW_FOCUSED_CLASS;
row.$elm$.classList.add(ROW_FOCUSED_CLASS);
}
}
}
this.currentRange = e;
}
isRowFocused(y) {
return (this.currentRange && y >= this.currentRange.y && y <= this.currentRange.y1);
}
}
//# sourceMappingURL=row-highlight.plugin.js.map