All files / app/assets/javascripts/milestones milestone.js

0% Statements 0/14
0% Branches 0/4
0% Functions 0/6
0% Lines 0/14

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44                                                                                       
import { createAlert } from '~/alert';
import { sanitize } from '~/lib/dompurify';
import axios from '~/lib/utils/axios_utils';
import { __ } from '~/locale';
import { GlTabsBehavior, TAB_SHOWN_EVENT, HISTORY_TYPE_HASH } from '~/tabs';
 
export default class Milestone {
  constructor() {
    this.tabsEl = document.querySelector('.js-milestone-tabs');
    this.loadedTabs = new WeakSet();
 
    this.bindTabsSwitching();
    // eslint-disable-next-line no-new
    new GlTabsBehavior(this.tabsEl, { history: HISTORY_TYPE_HASH });
  }
 
  bindTabsSwitching() {
    this.tabsEl.addEventListener(TAB_SHOWN_EVENT, (event) => {
      const tab = event.target;
      const { activeTabPanel } = event.detail;
      this.loadTab(tab, activeTabPanel);
    });
  }
 
  loadTab(tab, tabPanel) {
    const { endpoint } = tab.dataset;
 
    if (endpoint && !this.loadedTabs.has(tab)) {
      axios
        .get(endpoint)
        .then(({ data }) => {
          // eslint-disable-next-line no-param-reassign
          tabPanel.innerHTML = sanitize(data.html);
          this.loadedTabs.add(tab);
        })
        .catch(() =>
          createAlert({
            message: __('Error loading milestone tab'),
          }),
        );
    }
  }
}