forked from numfocus/jobs-board
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJob.jsx
More file actions
71 lines (65 loc) · 2.08 KB
/
Job.jsx
File metadata and controls
71 lines (65 loc) · 2.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import React from "react";
import { Link } from "gatsby";
import Badge from "./Badge";
import jobToMarkdown from "../jobToMarkdown.mjs";
import { isJobExpired } from "../utils.mjs";
const Job = ({ job }) => {
const processedJob = React.useMemo(() => jobToMarkdown(job), [job]);
const isExpired = React.useMemo(() => {
return isJobExpired(job);
}, [job]);
if (processedJob === undefined) {
console.log("We don't expect an empty job posting; aborting");
return <div>Empty job posting</div>;
}
return (
<div className={`job${isExpired ? " expired" : ""}`}>
<div className="badges">
{ processedJob.badges &&
processedJob.badges.map((badge) =>
<Badge key={badge} type={badge}/>
)
}
{ (processedJob.percentOSS === 100) &&
<Badge type="Pure OSS"/>
}
</div>
<Link to={`/job/${processedJob.id}`}>
<div className="title">{ processedJob.entity } / { processedJob.title }</div>
</Link>
<div className="meta">
{ processedJob.percentTime &&
<div className="percentTime">This job is <b>{ processedJob.percentTime }%</b> time.</div>
}
<div className="percentOSS">
<b>{ processedJob.percentOSS }%</b> of time is on <b>open source</b>.
</div>
{ processedJob.deadline &&
<div className="deadline">
Application deadline: <b>{ processedJob.deadline }</b>
</div>
}
{ processedJob.location &&
<div className="location">
Location: { processedJob.location }
</div>
}
{ processedJob.url &&
<div className="url">
URL: <a href={processedJob.url}>{ processedJob.url }</a>
</div>
}
</div>
{isExpired && (
<div className="expired-banner">
This job post has expired and is no longer open for applications.
</div>
)}
<div
className="description"
dangerouslySetInnerHTML={{__html: processedJob.description}}
/>
</div>
);
};
export default Job;