"use client" import type React from "react" import { useState, useTransition } from "react" import { useForm } from "react-hook-form" import { zodResolver } from "@hookform/resolvers/zod" import { Input } from "@workspace/ui/components/input" import { Textarea } from "@workspace/ui/components/textarea" import { Button } from "@workspace/ui/components/button" import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@workspace/ui/components/form" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@workspace/ui/components/select" import { Card, CardContent } from "@workspace/ui/components/card" import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from "@workspace/ui/components/dialog" import { Checkbox } from "@workspace/ui/components/checkbox" import { jobSchema, type JobFormData } from "./schema" import { createJob, createCompany } from "./actions" import { Popover, PopoverTrigger, PopoverContent } from "@workspace/ui/components/popover" import { Calendar } from "@workspace/ui/components/calendar" import { format } from "date-fns" import { CalendarIcon, Plus, Building2, Briefcase, MapPin, DollarSign, GraduationCap, CheckCircle, AlertCircle, LinkIcon, } from "lucide-react" import { cn } from "@workspace/ui/lib/utils" import { Alert, AlertDescription } from "@workspace/ui/components/alert" function NewJobForm({ companies }: { companies: { id: number; name: string }[] }) { const [success, setSuccess] = useState(false) const [error, setError] = useState(null) const [isPending, startTransition] = useTransition() const [showModal, setShowModal] = useState(false) const [addingCompany, setAddingCompany] = useState(false) const [companyList, setCompanyList] = useState(companies) const [newCompanyName, setNewCompanyName] = useState("") const [newCompanyEmail, setNewCompanyEmail] = useState("") const [newCompanyLink, setNewCompanyLink] = useState("") const [newCompanyDescription, setNewCompanyDescription] = useState("") const [newCompanyImageURL, setNewCompanyImageURL] = useState("") const [companyError, setCompanyError] = useState(null) const form = useForm({ resolver: zodResolver(jobSchema), defaultValues: { companyId: companies[0]?.id ?? 0, title: "", link: "", description: "", location: "", imageURL: "", salary: "", applicationDeadline: new Date(), minCGPA: 0, minSSC: 0, minHSC: 0, allowDeadKT: true, allowLiveKT: true, }, }) async function handleSubmit(formData: FormData) { setError(null) setSuccess(false) startTransition(async () => { const result = await createJob(formData) if (result?.success) { setSuccess(true) form.reset(form.formState.defaultValues) } else { setError(result?.error || "Failed to create job") } }) } async function handleAddCompany(e: React.FormEvent) { e.preventDefault() setCompanyError(null) if (!newCompanyName.trim() || !newCompanyEmail.trim() || !newCompanyLink.trim() || !newCompanyDescription.trim()) { setCompanyError("Please fill in all required fields") return } setAddingCompany(true) const formData = new FormData() formData.append("name", newCompanyName.trim()) formData.append("email", newCompanyEmail.trim()) formData.append("link", newCompanyLink.trim()) formData.append("description", newCompanyDescription.trim()) formData.append("imageURL", newCompanyImageURL.trim()) const result = await createCompany(formData) if (result?.success && result.company) { setCompanyList((prev) => [...prev, result.company]) form.setValue("companyId", result.company.id) setNewCompanyName("") setNewCompanyEmail("") setNewCompanyLink("") setNewCompanyDescription("") setNewCompanyImageURL("") setShowModal(false) } else { setCompanyError(result?.error || "Failed to add company") } setAddingCompany(false) } return (
{/* Header */}

Create New Job Listing

Fill in the details below to post a new job opportunity

{/* Success/Error Messages */} {success && ( Job created successfully! You can create another one or go back to the dashboard. )} {error && ( {error} )} {/* Company Selection Section */}

Company Information

( Select Company *
Add New Company
setNewCompanyName(e.target.value)} placeholder="Enter company name" required />
setNewCompanyEmail(e.target.value)} placeholder="contact@company.com" type="email" required />
setNewCompanyLink(e.target.value)} placeholder="https://company.com" required />
setNewCompanyImageURL(e.target.value)} placeholder="https://example.com/logo.png" />