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 } from '../../Components/Employer/FilterDrawer';
export default function SelectedCandidates({ selectedWorkers }) {
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 [filterLocation, setFilterLocation] = useState('');
const [filterJobType, setFilterJobType] = useState('All');
const [filterAccommodation, setFilterAccommodation] = useState('All');
const [filterNationality, setFilterNationality] = useState('All');
const [filterInCountry, setFilterInCountry] = useState('All');
const [filterVisaType, setFilterVisaType] = useState('All');
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(() => {
const nats = (selectedWorkers || []).map(w => w.nationality).filter(Boolean);
return [...new Set(nats)];
}, [selectedWorkers]);
// Apply Client-Side Filters
const filteredWorkers = useMemo(() => {
let list = (selectedWorkers || []).filter(w => w.status !== 'Searching');
if (searchTerm.trim() !== '') {
const query = searchTerm.toLowerCase();
list = list.filter(w => w.name.toLowerCase().includes(query));
}
if (filterLocation.trim() !== '') {
const query = filterLocation.toLowerCase();
list = list.filter(w => w.preferred_location && w.preferred_location.toLowerCase().includes(query));
}
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 (filterNationality !== 'All') {
list = list.filter(w => w.nationality && w.nationality.toLowerCase() === filterNationality.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()));
}
return list;
}, [selectedWorkers, searchTerm, filterLocation, filterJobType, filterAccommodation, filterNationality, filterInCountry, filterVisaType]);
const resetFilters = () => {
setFilterLocation('');
setFilterJobType('All');
setFilterAccommodation('All');
setFilterNationality('All');
setFilterInCountry('All');
setFilterVisaType('All');
};
const activeFilterCount = useMemo(() => {
let count = 0;
if (filterLocation.trim() !== '') count++;
if (filterJobType !== 'All') count++;
if (filterAccommodation !== 'All') count++;
if (filterNationality !== 'All') count++;
if (filterInCountry !== 'All') count++;
if (filterInCountry === 'In Country' && filterVisaType !== 'All') count++;
return count;
}, [filterLocation, filterJobType, filterAccommodation, filterNationality, filterInCountry, filterVisaType]);
// Active filter tags for display
const activeFilterTags = useMemo(() => {
const tags = [];
if (filterLocation.trim()) tags.push({ key: 'location', label: `π ${filterLocation}`, clear: () => setFilterLocation('') });
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 (filterNationality !== 'All') tags.push({ key: 'nat', label: `π ${filterNationality}`, clear: () => setFilterNationality('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') });
return tags;
}, [filterLocation, filterJobType, filterAccommodation, filterNationality, filterInCountry, filterVisaType]);
return (
Select "In Country" to enable this filter
{t('candidates_pipeline_desc', 'Manage your workforce recruitment pipeline')}
| {t('candidate_header', 'Candidate')} | {t('selected_header', 'Selected')} | {t('category_header', 'Category')} | {t('salary_header', 'Salary')} | {t('status_header', 'Status')} | {t('actions_header', 'Actions')} |
|---|---|---|---|---|---|
|
{worker.name.charAt(0)}
{worker.name}
|
{worker.applied_at || 'β'} | {worker.category} | {worker.salary} AED | {t('hired', 'Hired').toUpperCase()} |
|
|
{t('no_candidates_found', 'No candidates found')}
{activeFilterCount > 0 && (
)}
|
|||||