|
27 | 27 | let isLoading = $state(true); |
28 | 28 | let eventContainer: HTMLDivElement; |
29 | 29 |
|
| 30 | + // Registry of event DOM elements keyed by `event-<SEVERITY>-<INDEX>` for scrolling after toggling duplicates |
| 31 | + let eventElements: Map<string, HTMLElement> = new Map(); |
| 32 | +
|
| 33 | + // register anchors for scrolling back to parent event after toggling duplicates |
| 34 | + const registerEventAnchor = (node: HTMLElement, key: string) => { |
| 35 | + eventElements.set(key, node); |
| 36 | + return { |
| 37 | + destroy() { |
| 38 | + eventElements.delete(key); |
| 39 | + } |
| 40 | + }; |
| 41 | + }; |
| 42 | +
|
30 | 43 | const displayCategories = $state({ |
31 | 44 | CRITICAL: { |
32 | 45 | show: true, |
|
286 | 299 | let relativeOffset: number | null = null; |
287 | 300 |
|
288 | 301 | if (eventContainer) { |
289 | | - const target = eventContainer.querySelector<HTMLElement>(`[data-event-key="${anchorKey}"]`); |
| 302 | + const target = eventElements.get(anchorKey); |
290 | 303 | if (target) { |
291 | 304 | const containerScrollTop = eventContainer.scrollTop; |
292 | 305 | relativeOffset = target.offsetTop - containerScrollTop; |
|
324 | 337 |
|
325 | 338 | if (relativeOffset !== null && eventContainer) { |
326 | 339 | await tick(); |
327 | | - const updatedTarget = eventContainer.querySelector<HTMLElement>(`[data-event-key="${anchorKey}"]`); |
| 340 | + const updatedTarget = eventElements.get(anchorKey); |
328 | 341 | if (updatedTarget) { |
329 | 342 | eventContainer.scrollTop = Math.max(updatedTarget.offsetTop - relativeOffset, 0); |
330 | 343 | } |
|
371 | 384 | return; |
372 | 385 | } |
373 | 386 | const anchorKey = `event-${target.severity}-${target.index}`; |
374 | | - const targetElement = eventContainer.querySelector<HTMLElement>(`[data-event-key="${anchorKey}"]`); |
| 387 | + const targetElement = eventElements.get(anchorKey); |
375 | 388 | if (targetElement) { |
376 | 389 | targetElement.scrollIntoView({ behavior: "smooth", block: "center" }); |
377 | 390 | } |
|
543 | 556 | duplicateParent={event.duplicateParent} |
544 | 557 | {toggleDuplicates} |
545 | 558 | {scrollToEvent} |
| 559 | + registerAnchor={registerEventAnchor} |
546 | 560 | on:issueAttach |
547 | 561 | /> |
548 | 562 | {:else} |
|
0 commit comments