function ticket_to_row()

in static/plugins/jira_stats.js [12:67]


function ticket_to_row(data) {
    // Converts a ticket data entry to a row in the 'open tickets' table
    let ticket_status = 0; // Default to WFI
    if (data.paused) ticket_status = 1; // WFU, paused
    if (data.issuetype === "Planned Work") ticket_status = 2; // Planned work, paused


    const hours_spent_wfi = Math.round(data.sla_time_counted/3600);
    let response_time = Math.round(data.response_time/3600);
    if (!data.first_response) response_time = Math.round(data.sla_time_counted/3600);

    let response_time_text = "N/A";
    let resolve_time_text = "N/A";
    if (data.sla && ticket_status != 2) {  // Disregard planned work
        response_time_text = `${response_time} / ${data.sla.respond} hours`
        resolve_time_text = `${hours_spent_wfi} / ${data.sla.resolve} hours`
    }

    const response_time_div = document.createElement('div');
    response_time_div.className = (data.sla_met_respond === false && ticket_status !== 2) ? 'badge text-danger' : 'badge bg-transparent text-reset';
    response_time_div.innerText = response_time_text;
    response_time_div.style.width = "120px";

    const resolve_time_div = document.createElement('div');
    resolve_time_div.className = (data.sla_met_resolve === false && ticket_status !== 2) ? 'badge text-danger' : 'badge bg-transparent text-reset';
    resolve_time_div.innerText = resolve_time_text;
    resolve_time_div.style.width = "120px";

    const title_cell = document.createElement('a');
    title_cell.className = "text-truncate"
    title_cell.href = data.url;
    title_cell.target = "_blank";
    title_cell.innerText = `${data.key}: ${data.summary}`;
    title_cell.style.overflow = "hidden";
    title_cell.style.whiteSpace = "nowrap";
    title_cell.style.textOverflow = "ellipsis";

    title_cell.style.maxWidth = "calc(100vw - 590px - var(--sidebar))";
    title_cell.style.display = "inline-block";
    title_cell.title = data.summary;

    const status_div = document.createElement('div');
    status_div.style.height = "100%";
    status_div.style.minWidth = "100px";
    status_div.style.maxWidth = "7vw";
    status_div.className = `badge px-1 text-bg-${ticket_status_colors[ticket_status]}`;
    status_div.innerText = ticket_status_enum[ticket_status];
    return [
        ticket_status,
        status_div,
        title_cell,
        response_time_div,
        resolve_time_div,
        data.assignee || "Unassigned"
    ];
}