UNPKG

@revolist/revogrid

Version:

Virtual reactive data grid spreadsheet component - RevoGrid.

51 lines (50 loc) 1.82 kB
/*! * 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); } }