'use client'; import { useState, useEffect } from 'react'; import { Card, CardContent, CardHeader, CardTitle } from "@workspace/ui/components/card" import { Button } from "@workspace/ui/components/button" import { Badge } from "@workspace/ui/components/badge" import { Input } from "@workspace/ui/components/input" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@workspace/ui/components/select" import { Building2, MapPin, DollarSign, Calendar, Clock, Search, Filter, Bookmark, Share2, Eye, ArrowRight, Briefcase, Users, Star, CheckCircle, ExternalLink, Loader2, AlertCircle } from "lucide-react" import { getAvailableJobs } from "../actions" import JobApplicationModal from "../../../components/job-application-modal" interface Job { id: number; title: string; company: { name: string; email: string; }; location: string; salary: string; description: string; applicationDeadline: Date; minCGPA: number; active: boolean; link?: string; } export default function JobsPage() { const [jobs, setJobs] = useState([]); const [filteredJobs, setFilteredJobs] = useState([]); const [isLoading, setIsLoading] = useState(true); const [error, setError] = useState(null); const [searchTerm, setSearchTerm] = useState(''); const [locationFilter, setLocationFilter] = useState('all'); const [jobTypeFilter, setJobTypeFilter] = useState('all'); const [showLoadMore, setShowLoadMore] = useState(false); // Mock data for demonstration const mockJobs: Job[] = [ { id: 1, title: "Software Engineer Intern", company: { name: "TechCorp Solutions", email: "careers@techcorp.com" }, location: "San Francisco, CA", salary: "$25/hour", description: "Join our dynamic team and work on cutting-edge projects. We're looking for passionate developers who love to learn and grow.", applicationDeadline: new Date("2024-02-15"), minCGPA: 7.5, active: true, link: "https://techcorp.com/careers" }, { id: 2, title: "Data Analyst", company: { name: "DataFlow Inc", email: "hr@dataflow.com" }, location: "New York, NY", salary: "$30/hour", description: "Analyze large datasets and provide insights to drive business decisions. Experience with Python and SQL required.", applicationDeadline: new Date("2024-02-10"), minCGPA: 7.0, active: true, link: "https://dataflow.com/jobs" }, { id: 3, title: "Frontend Developer", company: { name: "WebSolutions", email: "jobs@websolutions.com" }, location: "Remote", salary: "$28/hour", description: "Build beautiful and responsive user interfaces. Strong knowledge of React, TypeScript, and modern CSS required.", applicationDeadline: new Date("2024-02-05"), minCGPA: 7.2, active: true, link: "https://websolutions.com/careers" }, { id: 4, title: "Product Manager Intern", company: { name: "InnovateTech", email: "careers@innovatetech.com" }, location: "Seattle, WA", salary: "$32/hour", description: "Work closely with cross-functional teams to define product requirements and drive product development.", applicationDeadline: new Date("2024-02-01"), minCGPA: 7.8, active: true, link: "https://innovatetech.com/jobs" }, { id: 5, title: "DevOps Engineer", company: { name: "CloudTech Systems", email: "hr@cloudtech.com" }, location: "Austin, TX", salary: "$35/hour", description: "Manage cloud infrastructure and deployment pipelines. Experience with AWS, Docker, and Kubernetes preferred.", applicationDeadline: new Date("2024-02-20"), minCGPA: 7.0, active: true, link: "https://cloudtech.com/careers" }, { id: 6, title: "UX/UI Designer", company: { name: "DesignStudio", email: "jobs@designstudio.com" }, location: "Los Angeles, CA", salary: "$26/hour", description: "Create intuitive and beautiful user experiences. Proficiency in Figma, Adobe Creative Suite, and user research methods.", applicationDeadline: new Date("2024-02-12"), minCGPA: 7.5, active: true, link: "https://designstudio.com/jobs" } ]; useEffect(() => { loadJobs(); }, []); const loadJobs = async () => { try { const result = await getAvailableJobs(); if (result.success && result.jobs) { setJobs(result.jobs as any); setFilteredJobs(result.jobs as any); } else { setJobs(mockJobs); setFilteredJobs(mockJobs); setError(result.error || 'Using demo data'); } } catch (err) { setJobs(mockJobs); setFilteredJobs(mockJobs); setError('Failed to load jobs, using demo data'); } finally { setIsLoading(false); } }; useEffect(() => { filterJobs(); }, [jobs, searchTerm, locationFilter, jobTypeFilter]); const filterJobs = () => { let filtered = [...jobs]; // Search filter if (searchTerm) { filtered = filtered.filter(job => job.title.toLowerCase().includes(searchTerm.toLowerCase()) || job.company.name.toLowerCase().includes(searchTerm.toLowerCase()) || job.description.toLowerCase().includes(searchTerm.toLowerCase()) ); } // Location filter if (locationFilter && locationFilter !== 'all') { filtered = filtered.filter(job => job.location.toLowerCase().includes(locationFilter.toLowerCase()) ); } // Job type filter (simplified - could be enhanced with job type field) if (jobTypeFilter && jobTypeFilter !== 'all') { filtered = filtered.filter(job => job.title.toLowerCase().includes(jobTypeFilter.toLowerCase()) ); } setFilteredJobs(filtered); setShowLoadMore(filtered.length > 6); }; const handleSearch = (value: string) => { setSearchTerm(value); }; const handleLocationFilter = (value: string) => { setLocationFilter(value); }; const handleJobTypeFilter = (value: string) => { setJobTypeFilter(value); }; const clearFilters = () => { setSearchTerm(''); setLocationFilter('all'); setJobTypeFilter('all'); }; const displayedJobs = filteredJobs.slice(0, showLoadMore ? 6 : filteredJobs.length); if (isLoading) { return (

Loading jobs...

); } return (
{/* Header */}

Browse Jobs

Find the perfect opportunity that matches your skills and aspirations

{error && (
{error}
)}
{/* Search and Filter Section */}
handleSearch(e.target.value)} />
{(searchTerm || (locationFilter && locationFilter !== 'all') || (jobTypeFilter && jobTypeFilter !== 'all')) && (
{filteredJobs.length} of {jobs.length} jobs
)}
{/* Stats */}

Total Jobs

{jobs.length}

Active Companies

{new Set(jobs.map(job => job.company.name)).size}

Remote Jobs

{jobs.filter(job => job.location.toLowerCase().includes('remote')).length}

Avg Salary

$28/hr

{/* Jobs Grid */}
{displayedJobs.map((job) => (

{job.title}

{job.company.name}

{job.location} {job.salary}
Active

{job.description}

Deadline: {job.applicationDeadline.toLocaleDateString()}
Min CGPA: {job.minCGPA}
{job.link && ( )}
))}
{/* Load More */} {showLoadMore && (
)} {/* Empty State */} {filteredJobs.length === 0 && (

No jobs found

Try adjusting your search criteria or check back later for new opportunities

)}
) }