62 lines
1.9 KiB
JavaScript
62 lines
1.9 KiB
JavaScript
class JobsGrid extends Shadow {
|
|
jobs;
|
|
|
|
constructor(jobs) {
|
|
super()
|
|
this.jobs = jobs
|
|
}
|
|
|
|
boldUntilFirstSpace(text) {
|
|
const index = text.indexOf(' ');
|
|
if (index === -1) {
|
|
// No spaces — bold the whole thing
|
|
return `<b>${text}</b>`;
|
|
}
|
|
return `<b>${text.slice(0, index)}</b>${text.slice(index)}`;
|
|
}
|
|
|
|
render() {
|
|
VStack(() => {
|
|
h3("Results")
|
|
.marginTop(0.1, em)
|
|
.marginBottom(1, em)
|
|
.marginLeft(0.4, em)
|
|
.color("var(--periwinkle)")
|
|
|
|
if (this.jobs.length > 0) {
|
|
ZStack(() => {
|
|
for (let i = 0; i < this.jobs.length; i++) {
|
|
VStack(() => {
|
|
p(this.jobs[i].title)
|
|
.fontSize(1.2, em)
|
|
.fontWeight("bold")
|
|
.marginBottom(0.5, em)
|
|
p(this.jobs[i].company)
|
|
p(this.jobs[i].city + ", " + this.jobs[i].state)
|
|
.marginBottom(0.5, em)
|
|
p(this.boldUntilFirstSpace(this.jobs[i].salary))
|
|
})
|
|
.padding(1, em)
|
|
.border("1px solid var(--periwinkle)")
|
|
.borderRadius(5, "px")
|
|
}
|
|
})
|
|
.display("grid")
|
|
.gridTemplateColumns("repeat(auto-fill, minmax(250px, 1fr))")
|
|
.gap(1, em)
|
|
} else {
|
|
p("No Jobs!")
|
|
}
|
|
})
|
|
.height(100, vh)
|
|
.paddingLeft(2, em)
|
|
.paddingRight(2, em)
|
|
.paddingTop(2, em)
|
|
.gap(0, em)
|
|
.width(100, "%")
|
|
.borderTop("1px solid var(--periwinkle)")
|
|
}
|
|
}
|
|
|
|
register(JobsGrid)
|