65 lines
1.8 KiB
JavaScript
65 lines
1.8 KiB
JavaScript
import server from "/@server/server.js"
|
|
|
|
css(`
|
|
jobcard- p {
|
|
font-size: 0.85em;
|
|
color: var(--text);
|
|
}
|
|
`)
|
|
|
|
class JobCard extends Shadow {
|
|
constructor(job) {
|
|
super()
|
|
this.job = job
|
|
}
|
|
|
|
render() {
|
|
VStack(() => {
|
|
HStack(() => {
|
|
h3(this.job.title)
|
|
.color("var(--headertext)")
|
|
.fontSize(1.3, em)
|
|
.fontWeight("normal")
|
|
.margin(0, em)
|
|
})
|
|
.justifyContent("space-between")
|
|
.verticalAlign("center")
|
|
|
|
p(this.job.company ?? "No company added")
|
|
.marginTop(0.75, em)
|
|
p(this.job.location ?? "No location added")
|
|
.marginTop(0.25, em)
|
|
p(this.job.salary_number ? this.salaryLabel(this.job.salary_number, this.job.salary_period) : "No salary added")
|
|
.marginTop(0.75, em)
|
|
})
|
|
.paddingVertical(1.5, em)
|
|
.paddingHorizontal(3.5, em)
|
|
.marginHorizontal(1, em)
|
|
.borderRadius(10, px)
|
|
.background("var(--desktop-item-background)")
|
|
.border("1px solid var(--desktop-item-border)")
|
|
.boxSizing("border-box")
|
|
}
|
|
|
|
salaryLabel(number, period) {
|
|
const formattedNumber = new Intl.NumberFormat('en-US', {
|
|
minimumFractionDigits: 2,
|
|
maximumFractionDigits: 2
|
|
}).format(Number(number));
|
|
|
|
if (period === "one-time") {
|
|
return `One-time payment of $${formattedNumber}`
|
|
} else {
|
|
return `$${formattedNumber}/${period}`
|
|
}
|
|
}
|
|
|
|
async deleteJob(job) {
|
|
const result = await server.deleteJob(job.id, job.network_id, global.profile.id)
|
|
if (result === null) {
|
|
console.log("Failed to delete job")
|
|
}
|
|
}
|
|
}
|
|
|
|
register(JobCard) |