import { db, jobs, companies } from '@workspace/db'; import { eq } from '@workspace/db/drizzle'; import Link from 'next/link'; import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@workspace/ui/components/card'; import { Button } from '@workspace/ui/components/button'; import { Input } from '@workspace/ui/components/input'; import { Badge } from '@workspace/ui/components/badge'; import { Search, MapPin, DollarSign, Calendar, GraduationCap, Building2, ExternalLink, Plus, Filter, Briefcase } from 'lucide-react'; export const dynamic = 'force-dynamic'; async function getAllJobsWithCompany() { return await db.query.jobs.findMany({ with: { company: true }, }); } export default async function JobsListPage({ searchParams, }: { searchParams?: { q?: string; status?: string; companyId?: string }; }) { const jobsWithCompany = await getAllJobsWithCompany(); const companiesList = await db.query.companies.findMany({ columns: { id: true, name: true } }); const q = (searchParams?.q ?? '').toLowerCase(); const status = searchParams?.status ?? 'all'; const companyId = Number(searchParams?.companyId ?? '0'); const filteredJobs = jobsWithCompany.filter((job) => { if (status === 'active' && !job.active) return false; if (status === 'inactive' && job.active) return false; if (!Number.isNaN(companyId) && companyId > 0 && job.companyId !== companyId) return false; if (q) { const hay = `${job.title} ${job.company?.name ?? ''} ${job.location}`.toLowerCase(); if (!hay.includes(q)) return false; } return true; }); return (
Manage and monitor all job opportunities
Get started by creating your first job listing
{job.description}