import React, { useState, useEffect, useCallback } from 'react'; import type { Person, NewPerson } from './types'; import { getPeople, addPerson } from './services/apiService'; import PersonList from './components/PersonList'; import AddPersonForm from './components/AddPersonForm'; import Modal from './components/Modal'; import { PlusIcon, UsersIcon } from './components/Icons'; const App: React.FC = () => { const [people, setPeople] = useState([]); const [isLoading, setIsLoading] = useState(true); const [error, setError] = useState(null); const [isModalOpen, setIsModalOpen] = useState(false); const fetchPeople = useCallback(async () => { try { setIsLoading(true); setError(null); const data = await getPeople(); setPeople(data); } catch (err) { setError('Failed to fetch people. Please try again later.'); console.error(err); } finally { setIsLoading(false); } }, []); useEffect(() => { fetchPeople(); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); const handleAddPerson = async (newPerson: NewPerson) => { try { const addedPerson = await addPerson(newPerson); setPeople((prevPeople) => [...prevPeople, addedPerson]); setIsModalOpen(false); } catch (err) { setError('Failed to add person. Please try again.'); console.error(err); } }; const renderContent = () => { if (isLoading) { return

Loading profiles...

; } if (error) { return

{error}

; } if (people.length === 0) { return (

No profiles yet

Get started by adding a new profile.

); } return ; }; return (

Profile Linker

{people.length > 0 && ( )}
{renderContent()}
setIsModalOpen(false)} title="Add New Profile"> setIsModalOpen(false)} />
); }; export default App;