import React, { useState, useEffect, useMemo } from 'react'; import { Head, Link, router } from '@inertiajs/react'; import EmployerLayout from '../../Layouts/EmployerLayout'; import { useTranslation } from '../../lib/LanguageContext'; import { MessageSquare, UserCheck, Search, Filter, MoreHorizontal, MapPin, Briefcase, Home, Globe2, Plane } from 'lucide-react'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger } from '@/components/ui/dropdown-menu'; import FilterDrawer, { FilterSection, FilterSelect, FilterInput, FilterChips, FilterCheckboxList } from '../../components/Employer/FilterDrawer'; export default function SelectedCandidates({ selectedWorkers, allNationalities, skills = ['cooking', 'driving', 'childcare', 'cleaning', 'elderly care', 'gardening'], languages = ['English', 'Arabic', 'Hindi', 'Tagalog'] }) { const { t } = useTranslation(); const [workers, setWorkers] = useState((selectedWorkers || []).filter(w => w.status !== 'Searching')); const [searchTerm, setSearchTerm] = useState(''); // Drawer state const [drawerOpen, setDrawerOpen] = useState(false); // Filter States const [filterProfession, setFilterProfession] = useState('All Professions'); const [filterLocation, setFilterLocation] = useState('All'); const [filterJobType, setFilterJobType] = useState('All'); const [filterAccommodation, setFilterAccommodation] = useState('All'); const [filterNationalities, setFilterNationalities] = useState([]); const [filterGender, setFilterGender] = useState('All'); const [filterInCountry, setFilterInCountry] = useState('All'); const [filterVisaType, setFilterVisaType] = useState('All'); const [filterSkills, setFilterSkills] = useState([]); const [filterLanguages, setFilterLanguages] = useState([]); const [maxSalary, setMaxSalary] = useState(5000); const toggleMultiSelect = (item, setSelectedList) => { setSelectedList(prev => prev.includes(item) ? prev.filter(x => x !== item) : [...prev, item] ); }; useEffect(() => { setWorkers((selectedWorkers || []).filter(w => w.status !== 'Searching')); }, [selectedWorkers]); const changeStatus = (id, newStatus) => { setWorkers(workers.map(w => w.id === id ? { ...w, status: newStatus } : w)); router.post(`/employer/candidates/${id}/status`, { status: newStatus }, { preserveScroll: true }); }; // Extract unique nationalities for filter dropdown const nationalities = useMemo(() => { if (allNationalities && allNationalities.length > 0) { return allNationalities; } const nats = (selectedWorkers || []).map(w => w.nationality).filter(Boolean); return [...new Set(nats)]; }, [selectedWorkers, allNationalities]); // Apply Client-Side Filters const filteredWorkers = useMemo(() => { let list = (workers || []).filter(w => w.status !== 'Searching'); if (searchTerm.trim() !== '') { const query = searchTerm.toLowerCase(); list = list.filter(w => w.name.toLowerCase().includes(query)); } if (filterProfession !== 'All Professions') { list = list.filter(w => w.main_profession && w.main_profession.toLowerCase() === filterProfession.toLowerCase()); } if (filterLocation !== 'All' && filterLocation.trim() !== '') { const locKey = filterLocation.toLowerCase(); const locationMapping = { 'dubai': ['dubai', 'marina', 'barsha', 'nahda', 'jumeirah', 'deira', 'downtown', 'silicon', 'sports', 'motor', 'jlt', 'jbr', 'meydan', 'ranches', 'bay', 'mirdif', 'quoz'], 'abu dhabi': ['abu dhabi', 'yas', 'khalifa', 'reem', 'saadiyat', 'raha', 'mussafah', 'zahiyah', 'karamah'], 'oman': ['oman', 'muscat', 'salalah', 'sohar', 'nizwa', 'sur', 'ibri', 'rustaq'] }; const allowedKeywords = locationMapping[locKey] || [locKey]; list = list.filter(w => { if (!w.preferred_location) return false; const wLoc = w.preferred_location.toLowerCase(); return allowedKeywords.some(keyword => wLoc.includes(keyword)); }); } if (filterJobType !== 'All') { list = list.filter(w => w.preferred_job_type && w.preferred_job_type.toLowerCase() === filterJobType.toLowerCase()); } if (filterAccommodation !== 'All') { list = list.filter(w => w.live_in_out && w.live_in_out.toLowerCase() === filterAccommodation.toLowerCase()); } if (filterNationalities.length > 0) { list = list.filter(w => w.nationality && filterNationalities.map(n => n.toLowerCase()).includes(w.nationality.toLowerCase())); } if (filterGender !== 'All') { list = list.filter(w => w.gender && w.gender.toLowerCase() === filterGender.toLowerCase()); } if (filterInCountry !== 'All') { const wantInCountry = filterInCountry === 'In Country'; list = list.filter(w => { const wVal = w.in_country; return (wVal === true || wVal === '1' || wVal === 1) === wantInCountry; }); } if (filterInCountry === 'In Country' && filterVisaType !== 'All') { list = list.filter(w => w.visa_status && w.visa_status.toLowerCase().includes(filterVisaType.toLowerCase())); } if (filterSkills.length > 0) { list = list.filter(w => w.skills && w.skills.some(s => filterSkills.includes(s.toLowerCase()))); } if (filterLanguages.length > 0) { list = list.filter(w => w.languages && w.languages.some(l => filterLanguages.includes(l))); } if (maxSalary < 5000) { list = list.filter(w => w.salary && Number(w.salary) <= maxSalary); } return list; }, [workers, searchTerm, filterProfession, filterLocation, filterJobType, filterAccommodation, filterNationalities, filterGender, filterInCountry, filterVisaType, filterSkills, filterLanguages, maxSalary]); const resetFilters = () => { setFilterProfession('All Professions'); setFilterLocation('All'); setFilterJobType('All'); setFilterAccommodation('All'); setFilterNationalities([]); setFilterGender('All'); setFilterInCountry('All'); setFilterVisaType('All'); setFilterSkills([]); setFilterLanguages([]); setMaxSalary(5000); }; const activeFilterCount = useMemo(() => { let count = 0; if (filterProfession !== 'All Professions') count++; if (filterLocation !== 'All' && filterLocation.trim() !== '') count++; if (filterJobType !== 'All') count++; if (filterAccommodation !== 'All') count++; if (filterNationalities.length > 0) count++; if (filterGender !== 'All') count++; if (filterInCountry !== 'All') count++; if (filterInCountry === 'In Country' && filterVisaType !== 'All') count++; if (filterSkills.length > 0) count++; if (filterLanguages.length > 0) count++; if (maxSalary < 5000) count++; return count; }, [filterProfession, filterLocation, filterJobType, filterAccommodation, filterNationalities, filterGender, filterInCountry, filterVisaType, filterSkills, filterLanguages, maxSalary]); // Active filter tags for display const activeFilterTags = useMemo(() => { const tags = []; if (filterProfession !== 'All Professions') tags.push({ key: 'profession', label: `πŸ§‘β€πŸ”§ ${filterProfession}`, clear: () => setFilterProfession('All Professions') }); if (filterLocation !== 'All' && filterLocation.trim()) tags.push({ key: 'location', label: `πŸ“ ${filterLocation}`, clear: () => setFilterLocation('All') }); if (filterJobType !== 'All') tags.push({ key: 'job', label: `πŸ’Ό ${filterJobType}`, clear: () => setFilterJobType('All') }); if (filterAccommodation !== 'All') tags.push({ key: 'acc', label: `🏠 ${filterAccommodation.replace('_', '-')}`, clear: () => setFilterAccommodation('All') }); if (filterNationalities.length > 0) tags.push({ key: 'nat', label: `🌍 ${filterNationalities.length} Nat`, clear: () => setFilterNationalities([]) }); if (filterGender !== 'All') tags.push({ key: 'gender', label: `🚻 ${filterGender}`, clear: () => setFilterGender('All') }); if (filterInCountry !== 'All') tags.push({ key: 'country', label: `✈️ ${filterInCountry}`, clear: () => { setFilterInCountry('All'); setFilterVisaType('All'); } }); if (filterInCountry === 'In Country' && filterVisaType !== 'All') tags.push({ key: 'visa', label: `πŸͺͺ ${filterVisaType}`, clear: () => setFilterVisaType('All') }); if (filterSkills.length > 0) tags.push({ key: 'skills', label: `πŸ›  ${filterSkills.length} skill${filterSkills.length > 1 ? 's' : ''}`, clear: () => setFilterSkills([]) }); if (filterLanguages.length > 0) tags.push({ key: 'lang', label: `πŸ—£ ${filterLanguages.length} lang`, clear: () => setFilterLanguages([]) }); if (maxSalary < 5000) tags.push({ key: 'salary', label: `πŸ’° ≀${maxSalary} AED`, clear: () => setMaxSalary(5000) }); return tags; }, [filterProfession, filterLocation, filterJobType, filterAccommodation, filterNationalities, filterGender, filterInCountry, filterVisaType, filterSkills, filterLanguages, maxSalary]); return ( {/* ── Filter Drawer ── */} setDrawerOpen(false)} onReset={resetFilters} activeCount={activeFilterCount} title="Filter Hired Workers" > {/* Profession */} setFilterProfession(e.target.value)} > {/* Preferred Location */} setFilterLocation(e.target.value)} > {/* Job Type */} {/* Accommodation */} {/* Nationality */} {nationalities.length > 0 && ( toggleMultiSelect(nat, setFilterNationalities)} /> )} {/* Gender */} {/* Country Status */} { setFilterInCountry(val); if (val !== 'In Country') setFilterVisaType('All'); }} /> {/* Visa Type */}
setFilterVisaType(e.target.value)} disabled={filterInCountry !== 'In Country'} > {filterInCountry !== 'In Country' && (

Select "In Country" to enable this filter

)}
{/* Skills */} {skills && skills.length > 0 && ( toggleMultiSelect(skill, setFilterSkills)} /> )} {/* Languages */} {languages && languages.length > 0 && ( toggleMultiSelect(lang, setFilterLanguages)} /> )} {/* Salary Range */} setMaxSalary(Number(e.target.value))} className="w-full accent-[#185FA5]" />
500 AED 5,000 AED
{/* Header Section */}

{t('candidates_pipeline', 'Hired Workers')}

{t('candidates_pipeline_desc', 'Manage your workforce recruitment pipeline')}

{/* Table Section */}
{/* Toolbar */}
{/* Search */}
setSearchTerm(e.target.value)} />
{/* Results count */} {filteredWorkers.length} result{filteredWorkers.length !== 1 ? 's' : ''} {/* Export actions */}
{['COPY', 'CSV', 'PDF', 'PRINT'].map(action => ( ))}
{/* Filter button */}
{/* Active filter tags */} {activeFilterTags.length > 0 && (
Active: {activeFilterTags.map(tag => ( ))}
)} {/* Table */}
{filteredWorkers.length > 0 ? ( filteredWorkers.map((worker) => ( )) ) : ( )}
{t('candidate_header', 'Candidate')} {t('selected_header', 'Selected')} {t('salary_header', 'Salary')} {t('status_header', 'Status')} {t('actions_header', 'Actions')}
{worker.name.charAt(0)}
{worker.name}
{worker.nationality || 'β€”'} {worker.main_profession && ( <> β€’ {worker.main_profession} )}
{worker.applied_at || 'β€”'} {worker.salary} AED {t('hired', 'Hired').toUpperCase()}
{t('no_candidates_found', 'No candidates found')}
{activeFilterCount > 0 && ( )}
{/* Footer */}
Showing {filteredWorkers.length} of {(selectedWorkers || []).filter(w => w.status !== 'Searching').length} hired workers
); }