import Combobox from '@/components/combobox'; import { DateTimePicker } from '@/components/datetime-picker'; import InputError from '@/components/input-error'; import Switch from '@/components/switch'; import TagInput from '@/components/tag-input'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import currencies from '@/data/currencies'; import { generateSlug } from '@/lib/utils'; import { SharedData } from '@/types/global'; import { Link, useForm, usePage } from '@inertiajs/react'; import { Briefcase, DollarSign, FileText, Save } from 'lucide-react'; import { FormEvent, useEffect } from 'react'; import { Editor } from 'richtor'; import 'richtor/styles'; interface FormProps extends SharedData { jobTypes: Record; workTypes: Record; experienceLevels: Record; statuses: Record; } const JobCircularForm = ({ jobCircular }: { jobCircular?: JobCircular }) => { const { props } = usePage(); const { jobTypes, workTypes, experienceLevels, statuses, translate } = props; const { dashboard, input, button } = translate; const { data, setData, post, put, processing, errors } = useForm({ title: jobCircular ? jobCircular.title : '', slug: jobCircular ? jobCircular.slug : '', description: jobCircular ? jobCircular.description : '', experience_level: jobCircular ? jobCircular.experience_level : 'mid', location: jobCircular ? jobCircular.location : '', salary_min: jobCircular ? jobCircular.salary_min?.toString() : '', salary_max: jobCircular ? jobCircular.salary_max?.toString() : '', salary_currency: jobCircular ? jobCircular.salary_currency : '', salary_negotiable: jobCircular ? jobCircular.salary_negotiable : false, application_deadline: jobCircular ? new Date(jobCircular.application_deadline) : new Date(), contact_email: jobCircular ? jobCircular.contact_email : '', skills_required: jobCircular ? jobCircular.skills_required : [''], positions_available: jobCircular ? jobCircular.positions_available : 1, job_type: jobCircular ? jobCircular.job_type : 'full-time', work_type: jobCircular ? jobCircular.work_type : 'on-site', status: jobCircular ? jobCircular.status : 'draft', }); const handleSubmit = (e: FormEvent) => { e.preventDefault(); if (jobCircular) { put(route('job-circulars.update', jobCircular.id)); } else { post(route('job-circulars.store')); } }; useEffect(() => { setData('slug', generateSlug(data.title)); }, [data.title]); return (
{/* Basic Information */} {dashboard.basic_information} {dashboard.provide_essential_job_details}
setData('title', e.target.value)} placeholder={input.job_title_placeholder} />
setData('slug', e.target.value)} placeholder={input.url_slug_placeholder} />
setData((prev) => ({ ...prev, description: value as string, })) } />
setData('contact_email', e.target.value)} placeholder={input.contact_email_placeholder} />
{/* Job Details */} {dashboard.job_details} {dashboard.job_details_title}
setData('positions_available', parseInt(e.target.value) || 1)} />
setData('location', e.target.value)} placeholder={input.location_placeholder} />
setData('application_deadline', date)} />
setData('skills_required', values)} />
{/* Salary Information */} {dashboard.salary_information} {dashboard.salary_information_title}
setData('salary_negotiable', checked as any)} />
{!data.salary_negotiable && (
setData('salary_currency', selected.value)} />
setData('salary_min', e.target.value)} placeholder={input.minimum_salary_placeholder} />
setData('salary_max', e.target.value)} placeholder={input.maximum_salary_placeholder} />
)}
{/* Submit Buttons */}
); }; export default JobCircularForm;