import React, { useState } from 'react'; import { useMockStore } from '../../data/mockStore'; import { Search, Filter, Shield, User, Briefcase, Zap } from 'lucide-react'; import MaskedData from '../../components/MaskedData'; import ComplianceChecklist from '../../components/people/ComplianceChecklist'; import { SpotlightCard } from '../../components/SpotlightCard'; const PeopleDirectory = () => { const { personnel, vendors } = useMockStore(); const [filter, setFilter] = useState('all'); // all, employee, contractor, subcontractor const [search, setSearch] = useState(''); const [selectedPerson, setSelectedPerson] = useState(null); // Combine and normalize data for display const allPeople = [ ...personnel.map(p => ({ ...p, type: 'personnel', category: 'Internal Team' })), ...vendors.map(v => ({ ...v, name: v.vendorName, type: 'vendor', category: 'Vendor/Partner' })) ]; const filteredPeople = allPeople.filter(person => { const matchesSearch = person.name.toLowerCase().includes(search.toLowerCase()) || person.email?.toLowerCase().includes(search.toLowerCase()); if (filter === 'all') return matchesSearch; if (filter === 'employee') return matchesSearch && person.type === 'personnel'; if (filter === 'contractor') return matchesSearch && person.role === 'CONTRACTOR'; // Assuming role field exists if (filter === 'subcontractor') return matchesSearch && person.role === 'SUBCONTRACTOR'; // Assuming role field exists return matchesSearch; }); return (
{/* Ambient Background Glows */}

People Directory

Manage your team, contractors, and compliance records.

{/* Left Sidebar: List & Search */}
setSearch(e.target.value)} className="w-full bg-zinc-100 dark:bg-black/40 border border-zinc-200 dark:border-white/10 rounded-xl py-2 pl-10 pr-4 text-sm text-zinc-900 dark:text-white placeholder:text-zinc-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20" />
{filteredPeople.map((person) => (
setSelectedPerson(person)} className={`p-3 rounded-xl border transition-all cursor-pointer group ${selectedPerson?.id === person.id ? 'bg-blue-50 dark:bg-blue-500/10 border-blue-200 dark:border-blue-500/20 shadow-sm' : 'bg-transparent border-transparent hover:bg-zinc-100 dark:hover:bg-white/5' }`} >
{person.name.charAt(0)}

{person.name}

{person.role || person.vendorType}

))}
{/* Right Panel: Details */}
{selectedPerson ? ( {/* Header */}

{selectedPerson.name}

{selectedPerson.status}

{selectedPerson.category} • {selectedPerson.role || selectedPerson.vendorType}

{/* Sensitive Data Section */}

Sensitive Information

Email {selectedPerson.email || selectedPerson.primaryContact?.email}
Phone {selectedPerson.phone || selectedPerson.primaryContact?.phone}
{/* Masked Fields */} {selectedPerson.sensitiveData?.ssn && (
SSN
)} {selectedPerson.sensitiveData?.ein && (
EIN
)} {selectedPerson.sensitiveData?.bankAccount && (
Bank Account
)}
{/* Compliance Section */}

Compliance & Documents

Quick Actions

) : (

Select a Person

Select an employee, contractor, or vendor from the list to view their detailed profile.

)}
); }; export default PeopleDirectory;