import { Card, CardContent, CardFooter, CardHeader, CardTitle } from '@workspace/ui/components/card'; import { Input } from '@workspace/ui/components/input'; import { Textarea } from '@workspace/ui/components/textarea'; import { Button } from '@workspace/ui/components/button'; import Link from 'next/link'; import { revalidatePath } from 'next/cache'; import { db, companies, jobs } from '@workspace/db'; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger, DialogDescription } from '@workspace/ui/components/dialog'; import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@workspace/ui/components/accordion'; import { Badge } from '@workspace/ui/components/badge'; // ----------------------- // Server Actions // ----------------------- async function createCompany(formData: FormData) { 'use server'; const name = String(formData.get('name') ?? '').trim(); const email = String(formData.get('email') ?? '').trim(); const link = String(formData.get('link') ?? '').trim(); const description = String(formData.get('description') ?? '').trim() || 'N/A'; const imageURL = String(formData.get('imageURL') ?? '').trim() || 'https://via.placeholder.com/200x200?text=Company'; if (!name) return; await db.insert(companies).values({ name, email, link, description, imageURL }); revalidatePath('/'); } async function createJob(formData: FormData) { 'use server'; const companyId = Number(formData.get('companyId')); const title = String(formData.get('title') ?? '').trim(); const link = String(formData.get('jobLink') ?? '').trim(); const description = String(formData.get('jobDescription') ?? '').trim() || 'N/A'; const location = String(formData.get('location') ?? '').trim() || 'N/A'; const imageURL = String(formData.get('jobImageURL') ?? '').trim() || 'https://via.placeholder.com/100x100?text=Job'; const salary = String(formData.get('salary') ?? '').trim() || 'N/A'; const deadlineRaw = formData.get('deadline'); const applicationDeadline = deadlineRaw ? new Date(String(deadlineRaw)) : new Date(); if (!companyId || !title) return; await db.insert(jobs).values({ companyId, title, link, description, location, imageURL, salary, applicationDeadline, active: true, }); revalidatePath('/'); } // ----------------------- // Component Helpers // ----------------------- async function getDashboardData() { const comps = await db.select().from(companies); const allJobs = await db.select().from(jobs); return comps.map((comp) => ({ ...comp, jobs: allJobs.filter((j) => j.companyId === comp.id), })); } export default async function DashboardPage() { const data = await getDashboardData(); return (
Manage companies and their job openings.
No jobs yet.
} {company.jobs.map((job) => ( {job.title}