/**
 * @module modules/element-doc-sk
 * @description Sub class of ElementSK that remembers and cleans up document event listeners.
 * Extended by all modules of debuugger. TODO(nifong): merge into ElementSk
 */

import { ElementSk } from '../../../infra-sk/modules/ElementSk';

export class ElementDocSk extends ElementSk {
  constructor(templateFn?: (el: any) => unknown) {
    super(templateFn);
  }

  private _documentEventListeners = new Map<string, (e: Event) => void>();

  disconnectedCallback() {
    for (const [key, val] of this._documentEventListeners.entries()) {
      document.removeEventListener(key, val);
    }
    super.disconnectedCallback();
  }

  addDocumentEventListener(
    name: string,
    fn: (e: any) => void,
    useCapture: boolean = false
  ) {
    this._documentEventListeners.set(name, fn);
    document.addEventListener(name, fn, useCapture);
  }
}
