import React, { useState, useMemo, useEffect } from 'react'; import { Head, Link, router } from '@inertiajs/react'; import EmployerLayout from '../../../Layouts/EmployerLayout'; import { Search, SlidersHorizontal, CheckCircle2, MapPin, Briefcase, DollarSign, Calendar, Bookmark, RotateCcw, HeartHandshake, Globe2, Sparkles, Filter, ArrowUpDown, Check, X, Eye, ChevronDown, Layers, AlertTriangle, Star, CheckCircle, ShieldCheck, User } from 'lucide-react'; const getLanguageFlag = (lang) => { const flags = { 'English': '🇬🇧', 'Arabic': '🇦🇪', 'Tagalog': '🇵🇭', 'Hindi': '🇮🇳', 'Swahili': '🇰🇪', 'French': '🇫🇷', 'Indonesian': '🇮🇩' }; return flags[lang] || '🌐'; }; export default function Index({ initialWorkers = [], initialShortlistedIds = [], filtersMetadata = {} }) { // Basic Filters const [searchQuery, setSearchQuery] = useState(''); const [selectedCategory, setSelectedCategory] = useState('All Categories'); const [selectedNationality, setSelectedNationality] = useState('All Nationalities'); const [selectedAvailability, setSelectedAvailability] = useState('All Availabilities'); const [selectedExperience, setSelectedExperience] = useState('All Experience'); const [selectedReligion, setSelectedReligion] = useState('All Religions'); const [maxSalary, setMaxSalary] = useState(3000); // Advanced Multi-Select Filters & Sorting const [selectedLanguages, setSelectedLanguages] = useState([]); const [selectedVisaStatuses, setSelectedVisaStatuses] = useState([]); const [selectedSkills, setSelectedSkills] = useState([]); const [selectedWorkTypes, setSelectedWorkTypes] = useState([]); const [sortBy, setSortBy] = useState('default'); // UI Helpers const [isLangOpen, setIsLangOpen] = useState(false); const [isVisaOpen, setIsVisaOpen] = useState(false); const [isSkillsOpen, setIsSkillsOpen] = useState(false); const [isWorkTypeOpen, setIsWorkTypeOpen] = useState(false); // Pagination const [visibleCount, setVisibleCount] = useState(6); // Shortlist / Favorites const [shortlistedIds, setShortlistedIds] = useState(initialShortlistedIds || []); // Saved Presets const [savedPresets, setSavedPresets] = useState([ { id: 1, name: 'Live-in Baby Care', category: 'Childcare', workType: 'Live-in', minSalary: 1200 }, { id: 2, name: 'Experienced Driver', category: 'Driver', experience: '5+ Years' } ]); const [presetNameInput, setPresetNameInput] = useState(''); const [showPresetModal, setShowPresetModal] = useState(false); // Worker Comparison & Quick Preview const [comparisonIds, setComparisonIds] = useState([]); const [previewWorker, setPreviewWorker] = useState(null); // Retrieve active preset query if present useEffect(() => { const params = new URLSearchParams(window.location.search); const cat = params.get('category'); const nat = params.get('nationality'); const avail = params.get('availability'); const sal = params.get('max_salary'); if (cat) setSelectedCategory(cat); if (nat) setSelectedNationality(nat); if (avail) setSelectedAvailability(avail); if (sal) setMaxSalary(Number(sal)); }, []); const toggleShortlist = (id) => { if (shortlistedIds.includes(id)) { setShortlistedIds(shortlistedIds.filter(i => i !== id)); } else { setShortlistedIds([...shortlistedIds, id]); } router.post('/employer/shortlist/toggle', { worker_id: id }, { preserveScroll: true, onSuccess: (page) => { if (page.props.initialShortlistedIds) { setShortlistedIds(page.props.initialShortlistedIds); } } }); }; const toggleMultiSelect = (item, selectedList, setSelectedList) => { if (selectedList.includes(item)) { setSelectedList(selectedList.filter(x => x !== item)); } else { setSelectedList([...selectedList, item]); } }; const applyPreset = (preset) => { resetFilters(); if (preset.category) setSelectedCategory(preset.category); if (preset.workType) setSelectedWorkTypes([preset.workType]); if (preset.experience) setSelectedExperience(preset.experience); }; const saveCurrentPreset = (e) => { e.preventDefault(); if (!presetNameInput.trim()) return; const newPreset = { id: Date.now(), name: presetNameInput, category: selectedCategory !== 'All Categories' ? selectedCategory : null, workType: selectedWorkTypes.length > 0 ? selectedWorkTypes[0] : null, experience: selectedExperience !== 'All Experience' ? selectedExperience : null, }; setSavedPresets([...savedPresets, newPreset]); setPresetNameInput(''); setShowPresetModal(false); }; const resetFilters = () => { setSearchQuery(''); setSelectedCategory('All Categories'); setSelectedNationality('All Nationalities'); setSelectedAvailability('All Availabilities'); setSelectedExperience('All Experience'); setSelectedReligion('All Religions'); setMaxSalary(3000); setSelectedLanguages([]); setSelectedVisaStatuses([]); setSelectedSkills([]); setSelectedWorkTypes([]); setSortBy('default'); setVisibleCount(6); }; // Filter and Sort Worker List const filteredWorkers = useMemo(() => { let workers = initialWorkers.filter(worker => { // Search Query if (searchQuery.trim() !== '') { const query = searchQuery.toLowerCase(); const matchName = worker.name.toLowerCase().includes(query); const matchBio = worker.bio?.toLowerCase().includes(query) || false; const matchSkills = worker.skills?.some(s => s.toLowerCase().includes(query)) || false; if (!matchName && !matchBio && !matchSkills) return false; } // Dropdown filters if (selectedCategory !== 'All Categories' && worker.category !== selectedCategory) return false; if (selectedNationality !== 'All Nationalities' && worker.nationality !== selectedNationality) return false; if (selectedAvailability !== 'All Availabilities' && worker.availability_status !== selectedAvailability) return false; if (selectedExperience !== 'All Experience' && worker.experience !== selectedExperience) return false; if (selectedReligion !== 'All Religions' && worker.religion !== selectedReligion) return false; if (worker.salary > maxSalary) return false; // Multi-select filters if (selectedLanguages.length > 0) { const hasLang = worker.languages?.some(l => selectedLanguages.includes(l)); if (!hasLang) return false; } if (selectedSkills.length > 0) { const hasSkill = worker.skills?.some(s => selectedSkills.includes(s.toLowerCase())); if (!hasSkill) return false; } if (selectedVisaStatuses.length > 0) { if (!selectedVisaStatuses.includes(worker.visa_status)) return false; } if (selectedWorkTypes.length > 0 && !selectedWorkTypes.includes(worker.preferred_job_type)) return false; return true; }); // Sorting if (sortBy === 'salary_asc') { workers.sort((a, b) => a.salary - b.salary); } else if (sortBy === 'salary_desc') { workers.sort((a, b) => b.salary - a.salary); } else if (sortBy === 'rating') { workers.sort((a, b) => b.rating - a.rating); } else if (sortBy === 'experience') { workers.sort((a, b) => b.age - a.age); // approximate experience by age } return workers; }, [ initialWorkers, searchQuery, selectedCategory, selectedNationality, selectedAvailability, selectedExperience, selectedReligion, maxSalary, selectedLanguages, selectedVisaStatuses, selectedSkills, selectedWorkTypes, sortBy ]); const paginatedWorkers = useMemo(() => { return filteredWorkers.slice(0, visibleCount); }, [filteredWorkers, visibleCount]); const handleToggleComparison = (id) => { if (comparisonIds.includes(id)) { setComparisonIds(comparisonIds.filter(i => i !== id)); } else { if (comparisonIds.length >= 3) { alert('You can compare a maximum of 3 candidates.'); return; } setComparisonIds([...comparisonIds, id]); } }; const comparedWorkers = useMemo(() => { return initialWorkers.filter(w => comparisonIds.includes(w.id)); }, [initialWorkers, comparisonIds]); return (
{/* 1. Header Banner */}
No Middlemen Platform

Find Verified Candidates

Instantly connect with UAE vetted, background-checked domestic workers.

{/* Filter and Search Panel */}
{/* Core Search bar */}
setSearchQuery(e.target.value)} placeholder="Search by name, skills, bio (e.g. Cooking, Childcare, Gardening, Driving)..." className="w-full pl-11 pr-4 py-3 rounded-xl border border-slate-300 text-sm focus:outline-none focus:ring-2 focus:ring-[#185FA5]/20 focus:border-[#185FA5]" />
{/* Sort & Reset Actions */}
{/* Sort Selector */}
{/* Primary filters grid */}
{/* Nationality */}
{/* Skills */}
{isSkillsOpen && (
{filtersMetadata.skills?.slice(1).map(skill => ( ))}
)}
{/* Language */}
{isLangOpen && (
{filtersMetadata.languages?.slice(1).map(lang => ( ))}
)}
{/* Availability */}
{/* Visa Status */}
{isVisaOpen && (
{filtersMetadata.visaStatuses?.slice(1).map(status => ( ))}
)}
{/* Listing metadata bar */}
Found {filteredWorkers.length} domestic workers matching search
MOHRE UAE Direct Sponsoring Active
{/* Marketplace Workers Grid */} {paginatedWorkers.length > 0 ? (
{paginatedWorkers.map((worker) => { const isShortlisted = shortlistedIds.includes(worker.id); const isComparing = comparisonIds.includes(worker.id); return (
{/* Card Header with Photo Option and Availability indicator */}
{/* Photo (optional) container */}
{worker.photo ? ( {worker.name} ) : ( )}
{worker.name} {worker.verified && ( Verified )}
{/* Emirates ID Status Verification Badge & Visa Status */}
{worker.emirates_id_status}
{worker.visa_status && (worker.visa_status.toLowerCase().includes('tourist') || worker.visa_status.toLowerCase().includes('visit')) ? (
{worker.visa_status} (Warning)
) : worker.visa_status && worker.visa_status.toLowerCase().includes('cancelled') ? (
{worker.visa_status} (Warning)
) : (
{worker.visa_status}
)}
{worker.nationality} {worker.age} yrs
{/* Top Right Availability status and bookmark */}
{worker.availability_status}
{/* Card Body */}
{/* Category Pill, Ratings & Cost */}
{worker.category}
{worker.salary} AED /mo
{/* Bio Snippet */}

"{worker.bio}"

{/* Details Table */}
Exp: {worker.experience}
{worker.preferred_job_type}
{worker.rating} ({worker.reviews_count} reviews)
{/* Core exact platform Skills List */}
Platform Skills
{worker.skills?.map(skill => ( {skill} ))}
{/* Languages Badges with Visual Flags */}
Languages Spoken
{worker.languages?.map(lang => ( {getLanguageFlag(lang)} {lang} ))}
{/* Actions block */}
Open Full Profile
); })}
) : (

No candidates match your filters

Try adjusting your salary limit, adding additional languages, or broadening nationality preferences.

)} {/* Load More Pagination */} {filteredWorkers.length > visibleCount && (
)} {/* 5. Worker Comparison Drawer (Col 12 Fixed bottom) */} {comparisonIds.length > 0 && (

Comparing Workers ({comparedWorkers.length} of 3)

{comparedWorkers.map(w => (
{w.photo ? ( {w.name} ) : ( {w.name.charAt(0)} )}
{w.name}
{w.nationality} • {w.category}
Salary: {w.salary} AED
Age: {w.age} yrs
Job Type: {w.preferred_job_type}
Status: {w.availability_status}
))}
)} {/* 6. Quick Preview Modal overlay */} {previewWorker && (
{previewWorker.photo ? ( {previewWorker.name} ) : ( )}

{previewWorker.name}

{previewWorker.verified && }
{previewWorker.emirates_id_status}
{previewWorker.nationality} • {previewWorker.category}

"{previewWorker.bio}"

Expectations
{previewWorker.salary} AED / mo
Languages
{previewWorker.languages?.map(lang => ( {getLanguageFlag(lang)} {lang} ))}
Availability Status
{previewWorker.availability_status}
Job Preference
{previewWorker.preferred_job_type}
{/* Core Platform Skills inside Quick Preview */}
Platform Skills
{previewWorker.skills?.map(skill => ( {skill} ))}
View Full Details
)} {/* Preset Modal */} {showPresetModal && (

Name this search preset

setPresetNameInput(e.target.value)} className="w-full p-2.5 border border-slate-300 rounded-xl text-xs focus:outline-none focus:border-[#185FA5]" required />
)}
); }