in torchci/pages/minihud.tsx [31:119]
function FailedJob({ job }: { job: JobData }) {
const [jobFilter, setJobFilter] = useContext(JobFilterContext);
const [jobHoverContext, setJobHoverContext] = useContext(JobHoverContext);
const [highlighted, setHighlighted] = useState(false);
const [thisJobHovered, setThisJobHovered] = useState(false);
const router = useRouter();
useEffect(() => {
const onHashChanged = () => {
if (window.location.hash === "") {
return;
}
const hash = window.location.hash.slice(1);
setHighlighted(hash === job.id?.toString());
};
onHashChanged();
window.addEventListener("hashchange", onHashChanged);
return () => {
window.removeEventListener("hashchange", onHashChanged);
};
}, [job.id]);
function toggleJobFilter() {
if (jobFilter === job.name) {
router.push("/minihud", undefined, { shallow: true });
setJobFilter(null);
} else {
router.push(`/minihud?name_filter=${job.name}`, undefined, {
shallow: true,
});
setJobFilter(job.name!);
}
}
const linkStyle: CSSProperties = { cursor: "pointer", marginRight: "0.5em" };
if (job.name === jobHoverContext) {
linkStyle.backgroundColor = "khaki";
}
let jobStyle = styles.failedJob;
if (highlighted) {
jobStyle = `${styles.failedJob} ${styles.failedJobHighlighted}`;
}
return (
<div
className={jobStyle}
id={job.id}
onMouseEnter={() => {
setThisJobHovered(true);
setJobHoverContext(job.name!);
}}
onMouseLeave={() => {
setThisJobHovered(false);
setJobHoverContext(null);
}}
>
<div>
<JobConclusion conclusion={job.conclusion} />
<a
target="_blank"
rel="noreferrer"
style={linkStyle}
href={job.htmlUrl}
>
{" "}
{job.name}
</a>
{thisJobHovered && (
<a href={`#${job.id}`} className={styles.extraShaInfo}>
link to this job
</a>
)}
</div>
<div className={styles.failedJobLinks}>
<input
type="checkbox"
id="setfilterbox"
checked={jobFilter === job.name}
onChange={() => toggleJobFilter()}
/>
<label htmlFor="setfilterbox">Set filter | </label>
<JobLinks job={job} />
</div>
<LogViewer job={job} />
</div>
);
}