Skip to content

Commit

Permalink
make sure to unhover old hovered rows
Browse files Browse the repository at this point in the history
  • Loading branch information
sgratzl committed Mar 14, 2019
1 parent fcd5f08 commit eb3b8fb
Showing 1 changed file with 19 additions and 6 deletions.
25 changes: 19 additions & 6 deletions src/ui/EngineRanking.ts
Original file line number Diff line number Diff line change
Expand Up @@ -110,30 +110,43 @@ export default class EngineRanking extends ACellTableSection<RenderColumn> imple

private readonly canvasMouseHandler = {
timer: new Set<number>(),
hoveredRows: new Set<HTMLElement>(),
cleanUp: () => {
const c = this.canvasMouseHandler;
c.timer.forEach((timer) => {
self.clearTimeout(timer);
});
c.timer.clear();
for (const row of Array.from(c.hoveredRows)) {
c.unhover(row);
}
},
enter: (evt: MouseEvent) => {
const c = this.canvasMouseHandler;
c.cleanUp();
const row = <HTMLElement>evt.currentTarget;
row.addEventListener('mouseleave', c.leave, PASSIVE);
c.timer.add(self.setTimeout(() => this.updateHoveredRow(row, true), HOVER_DELAY_SHOW_DETAIL));
c.timer.add(self.setTimeout(() => {
c.hoveredRows.add(row);
this.updateHoveredRow(row, true);
}, HOVER_DELAY_SHOW_DETAIL));
},
leave: (evt: MouseEvent) => {
leave: (evt: MouseEvent | HTMLElement) => {
// on row to survive canvas removal
const c = this.canvasMouseHandler;
const row = <HTMLElement>((typeof (<MouseEvent>evt).currentTarget !== 'undefined') ? (<MouseEvent>evt).currentTarget : evt);
c.unhover(row);

c.cleanUp();
const row = <HTMLElement>evt.currentTarget;
if (!EngineRanking.isCanvasRenderedRow(row)) {
self.setTimeout(() => this.updateHoveredRow(row, false));
}
},
unhover: (row: HTMLElement) => {
// remove self
const c = this.canvasMouseHandler;
c.hoveredRows.delete(row);
row.removeEventListener('mouseleave', c.leave);
if (!EngineRanking.isCanvasRenderedRow(row) && row.parentElement) { // and part of dom
self.setTimeout(() => this.updateHoveredRow(row, false));
}
}
};

Expand Down

0 comments on commit eb3b8fb

Please sign in to comment.