src/content/components/UnassignedView/UnassignedView.tsx (127 lines of code) (raw):
import React from "react";
import { GlobalContext } from "../GlobalContext/GlobalContext";
import { BugList } from "../BugList/BugList";
import { useBugFetcher, BugQuery } from "../../hooks/useBugFetcher";
import { Container } from "../ui/Container/Container";
import { MiniLoader } from "../Loader/Loader";
const COLUMNS = [
"id",
"type",
"summary",
"assigned_to",
"priority",
"cf_fx_iteration",
"last_change_time",
];
function sortBugs(bugs: any[]): any[] {
return bugs.sort((a, b) => {
let priorityComparison =
a.priority && b.priority && a.priority.localeCompare(b.priority);
if (priorityComparison) {
return priorityComparison;
}
let iterationComparison = 0;
if (a.cf_fx_iteration != b.cf_fx_iteration) {
let aIteration = parseFloat(a.cf_fx_iteration);
let bIteration = parseFloat(b.cf_fx_iteration);
if (isNaN(aIteration)) {
iterationComparison = Number(!isNaN(bIteration));
} else if (isNaN(bIteration)) {
iterationComparison = -1;
} else {
iterationComparison = aIteration - bIteration;
}
}
return (
iterationComparison ||
Date.parse(b.last_change_time) - Date.parse(a.last_change_time)
);
});
}
export const UnassignedView: React.FunctionComponent = () => {
const { qm } = React.useContext(GlobalContext);
const query = React.useMemo(
(): BugQuery => ({
include_fields: [
"id",
"summary",
"assigned_to",
"priority",
"status",
"keywords",
"type",
"component",
"cf_fx_iteration",
"last_change_time",
],
rules: [
{
key: "component",
operator: "anyexact",
value: "Messaging System",
},
{
operator: "OR",
rules: [
{
key: "priority",
operator: "equals",
value: "P1",
},
{
key: "priority",
operator: "equals",
value: "P2",
},
],
},
{
rules: [
{
key: "assigned_to",
operator: "equals",
value: "nobody@mozilla.org",
},
],
},
{ key: "keywords", operator: "notsubstring", value: "meta" },
],
}),
[]
);
const state = useBugFetcher({ query, qm });
const sortedBugs = sortBugs(state.bugs);
const isLoaded = state.status === "loaded";
return (
<Container
loaded={isLoaded}
heading={"Unassigned P1/P2 Bugs"}
subHeading={
<React.Fragment>
This list includes unassigned P1 and P2 bugs in Messaging System {"("}
<a
href={`https://bugzilla.mozilla.org/buglist.cgi?cmdtype=dorem&remaction=run&namedcmd=Messaging%20System%20Unassigned%20P1%2FP2&sharer_id=125983&list_id=16386089`}>
query
</a>
{")"}
</React.Fragment>
}>
<div style={{ marginTop: "20px" }}>
<BugList
key={0}
compact={true}
subtitle={"Messaging System Unassigned P1/P2"}
tags={true}
bulkEdit={true}
showHeaderIfEmpty={false}
bugs={sortedBugs}
columns={COLUMNS}
showResolved={false}
showResolvedOption={false}
visibleIfEmpty={false}
/>
</div>
<MiniLoader hidden={!state.awaitingNetwork} />
</Container>
);
};