[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/DMPRoadmap/roadmap/api-patch/app/javascript/src/usage/index.js [Back]  [Original]

import { isObject, isUndefined } from '../utils/isType';
import { initializeCharts, createChart, drawHorizontalBar } from '../utils/charts';

$(() => {
  // handles the checkbox for filtered-plans
  $('#filter_plans_form').on('click, change', 'input[type="checkbox"]', (e) => {
    const form = $(e.target).closest('form');
    form.submit();
  });

  // fns to handle the separator character menu
  // for CSV download
  const changeStatFnGen = (str) => {
    const fn = (item) => {
      /* eslint no-param-reassign: ["error", { "props": false }] */
      item.href = item.href.replace(/sep=.*/, str);
    };
    return fn;
  };

  // attach listener to separator select menu
  // on change look for "stat" elements and chnage their query param
  const fieldSep = document.getElementById('csv-field-sep');
  if (fieldSep !== null) {
    fieldSep.addEventListener('click', (e) => {
      const statElems = document.getElementsByClassName('stat');
      const newSep = 'sep='.concat(encodeURIComponent(e.target.value));
      const changeStatFn = changeStatFnGen(newSep);
      Array.from(statElems).forEach(changeStatFn);
    });
  }

  initializeCharts();

  const labelToUrl = (label) => {
    const parts = label.split('-');
    return `search=${parts[0]} 20${parts[1]}&commit=Search&click_through=true`;
  };

  // Create the Users joined chart
  if (!isUndefined($('#users_joined').val())) {
    const usersData = JSON.parse($('#users_joined').val());
    if (isObject(usersData)) {
      const chart = createChart('#yearly_users', usersData, '', (event) => {
        const points = chart.getElementsAtEventForMode(event, 'nearest', { intersect: true }, true);
        const segment = points[0];
        if (!isUndefined(segment)) {
          const target = $('#users_click_target').val();
          /* eslint-disable no-restricted-globals */
          const label = chart.data.labels[segment.index];
          $(location).attr('href', `${target}?${labelToUrl(label)}`);
          /* eslint-enable no-restricted-globals */
        }
      });
    }
  }

  // Create the Plans created chart
  if (!isUndefined($('#plans_created').val())) {
    const plansData = JSON.parse($('#plans_created').val());
    if (isObject(plansData)) {
      const chart = createChart('#yearly_plans', plansData, '', (event) => {
        const points = chart.getElementsAtEventForMode(event, 'nearest', { intersect: true }, true);
        const segment = points[0];
        if (!isUndefined(segment)) {
          const target = $('#plans_click_target').val();
          /* eslint-disable no-restricted-globals */
          const label = chart.data.labels[segment.index];
          $(location).attr('href', `${target}?${labelToUrl(label)}`);
          /* eslint-enable no-restricted-globals */
        }
      });
    }
  }
  // TODO: Most of these event listeners would not be necessary if JQuery and
  //       all other JS libraries were available to the js.erb files. Reevaluate
  //       this JS once we move to Rails 5 and properly configure webpacker
  let drawnChartByTemplate = null;
  const monthlyPlanTemplatesChart = document.getElementById('monthly_plans_by_template');
  // Add event listeners that draw and destroy the chart
  if (isObject(monthlyPlanTemplatesChart)) {
    monthlyPlanTemplatesChart.addEventListener('renderChart', (e) => {
      drawnChartByTemplate = drawHorizontalBar($('#monthly_plans_by_template'), e.detail);
      // Assigning the chart to a window variable here so that we can fire
      // the events from the js.erb
      window.templatePlansChart = document.getElementById('monthly_plans_by_template');
    });
    monthlyPlanTemplatesChart.addEventListener('destroyChart', () => {
      if (drawnChartByTemplate) {
        drawnChartByTemplate.destroy();
      }
    });
  }

  const monthlyPlanUsingTemplatesChart = document.getElementById('monthly_plans_using_template');
  // Add event listeners that draw the chart if it exists
  if (isObject(monthlyPlanUsingTemplatesChart)) {
    monthlyPlanUsingTemplatesChart.addEventListener('renderChart', (e) => {
      drawHorizontalBar($('#monthly_plans_using_template'), e.detail);
    });
  }

  // Create the initial Plans per template chart if the chart exists
  if (isObject(monthlyPlanTemplatesChart)) {
    const templatePlansData = JSON.parse($('#plans_by_template').val());
    const drawPer = new CustomEvent('renderChart', { detail: templatePlansData });
    document.getElementById('monthly_plans_by_template').dispatchEvent(drawPer);
  }
  // Create the initial Plans using template chart if the chart exists
  if (isObject(monthlyPlanUsingTemplatesChart)) {
    const usingTemplatePlansData = JSON.parse($('#plans_using_template').val());
    const drawUsing = new CustomEvent('renderChart', { detail: usingTemplatePlansData });
    document.getElementById('monthly_plans_using_template').dispatchEvent(drawUsing);
  }
});

Web Proxy Viewer  |  New URL  |  Original Page