export async function renderTimeToConfirmChart()

in ui/changes/src/common.js [1355:1453]


export async function renderTimeToConfirmChart(chartEl, bugSummaries) {
  bugSummaries = bugSummaries.filter(
    (bugSummary) => bugSummary.time_to_confirm !== null
  );

  if (bugSummaries.length == 0) {
    return;
  }

  let minDate = getPlainDate(
    bugSummaries.reduce((minSummary, summary) =>
      Temporal.PlainDate.compare(
        getPlainDate(summary.creation_date),
        getPlainDate(minSummary.creation_date)
      ) < 0
        ? summary
        : minSummary
    ).creation_date
  );

  let summaryData = await getSummaryData(
    bugSummaries,
    getOption("grouping"),
    minDate,
    (counterObj, bug) => {
      counterObj.times_to_confirm.push(bug.time_to_confirm);
    },
    null,
    (summary) => summary.creation_date,
    () => []
  );

  let categories = [];
  let ninthdecile_time_to_confirm = [];
  let median_time_to_confirm = [];
  const bugs_number = [];
  for (let date in summaryData) {
    categories.push(date);
    ninthdecile_time_to_confirm.push(
      quantile(summaryData[date].times_to_confirm, 0.9).toFixed(1)
    );
    median_time_to_confirm.push(
      median(summaryData[date].times_to_confirm).toFixed(1)
    );
    bugs_number.push(summaryData[date].times_to_confirm.length);
  }

  renderChart(
    chartEl,
    [
      {
        name: "90% time to confirm",
        data: ninthdecile_time_to_confirm,
      },
      {
        name: "Median time to confirm",
        data: median_time_to_confirm,
      },
    ],
    categories,
    "Time to confirm",
    "Days",
    {},
    {
      custom: function ({ series, seriesIndex, dataPointIndex, w }) {
        return (
          `<div class="apexcharts-tooltip-title">${categories[dataPointIndex]}</div>` +
          `<div class="apexcharts-tooltip-series-group apexcharts-active" style="order: 1; display: flex;">` +
          `<span class="apexcharts-tooltip-marker" style="background-color: rgb(0, 143, 251);"></span>` +
          `<div class="apexcharts-tooltip-text" style="font-family: Helvetica, Arial, sans-serif; font-size: 12px;">` +
          `<div class="apexcharts-tooltip-y-group">` +
          `<span class="apexcharts-tooltip-text-label">90% time to confirm: </span>` +
          `<span class="apexcharts-tooltip-text-value">${ninthdecile_time_to_confirm[dataPointIndex]}</span>` +
          `</div>` +
          `</div>` +
          `</div>` +
          `<div class="apexcharts-tooltip-series-group apexcharts-active" style="order: 2; display: flex;">` +
          `<span class="apexcharts-tooltip-marker" style="background-color: rgb(0, 227, 150);"></span>` +
          `<div class="apexcharts-tooltip-text" style="font-family: Helvetica, Arial, sans-serif; font-size: 12px;">` +
          `<div class="apexcharts-tooltip-y-group">` +
          `<span class="apexcharts-tooltip-text-label">Median time to confirm: </span>` +
          `<span class="apexcharts-tooltip-text-value">${median_time_to_confirm[dataPointIndex]}</span>` +
          `</div>` +
          `</div>` +
          `</div>` +
          `<div class="apexcharts-tooltip-series-group apexcharts-active" style="order: 3; display: flex;">` +
          `<span class="apexcharts-tooltip-marker" style=""></span>` +
          `<div class="apexcharts-tooltip-text" style="font-family: Helvetica, Arial, sans-serif; font-size: 12px;">` +
          `<div class="apexcharts-tooltip-y-group">` +
          `<span class="apexcharts-tooltip-text-label">Number of bugs: </span>` +
          `<span class="apexcharts-tooltip-text-value">${bugs_number[dataPointIndex]}</span>` +
          `</div>` +
          `</div>` +
          `</div>`
        );
      },
    }
  );
}