UNPKG

@adaptabletools/adaptable

Version:

Powerful data-agnostic HTML5 AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements

65 lines (64 loc) 2.64 kB
export const FLASHING_CELL_ROW_KEY = '__ROW'; /** * This service manages Flashing Cells */ export class FlashingCellService { constructor(api) { this.api = api; this.gridCellsCurrentlyFlashing = {}; this.flashingCellsMapping = {}; } destroy() { this.gridCellsCurrentlyFlashing = {}; this.flashingCellsMapping = {}; } addGridCellFlash(flashingCell) { const { rowPrimaryKey } = flashingCell; this.gridCellsCurrentlyFlashing[rowPrimaryKey] = this.gridCellsCurrentlyFlashing[rowPrimaryKey] || {}; const columnIds = Object.keys(flashingCell.flashColumnIds); if (flashingCell.flashTarget === 'row' || flashingCell.flashTarget.includes('row')) { columnIds.push(FLASHING_CELL_ROW_KEY); } columnIds.forEach((colId) => { this.gridCellsCurrentlyFlashing[rowPrimaryKey][colId] = flashingCell.Uuid; }); this.flashingCellsMapping[flashingCell.Uuid] = flashingCell; this.refreshGridCells(flashingCell); } clearGridCellFlash(flashingCell) { const { rowPrimaryKey } = flashingCell; const columnIds = Object.keys(flashingCell.flashColumnIds); if (flashingCell.flashTarget === 'row' || flashingCell.flashTarget.includes('row')) { columnIds.push(FLASHING_CELL_ROW_KEY); } // for high frequency rates, we might have multiple flashes for the same cell if (this.gridCellsCurrentlyFlashing[rowPrimaryKey]) { columnIds.forEach((colId) => { if (this.gridCellsCurrentlyFlashing[rowPrimaryKey][colId] === flashingCell.Uuid) { delete this.gridCellsCurrentlyFlashing[rowPrimaryKey][colId]; } }); if (!Object.keys(this.gridCellsCurrentlyFlashing[rowPrimaryKey]).length) { delete this.gridCellsCurrentlyFlashing[rowPrimaryKey]; } } delete this.flashingCellsMapping[flashingCell.Uuid]; this.refreshGridCells(flashingCell); } clearAllGridCellFlashes() { this.gridCellsCurrentlyFlashing = {}; this.flashingCellsMapping = {}; this.api.gridApi.refreshAllCells(true); } isAnyFlashingCellActive() { return Object.keys(this.gridCellsCurrentlyFlashing).length > 0; } refreshGridCells(flashingCell) { const { cellDataChangedInfo } = flashingCell; if (!cellDataChangedInfo) { return; } this.api.gridApi.refreshCells(cellDataChangedInfo.rowNode, Object.keys(flashingCell.flashColumnIds), true); } }