import React, { useEffect, useState } from "react"; import axios from "axios"; import { useInView } from "react-intersection-observer"; import Skeleton from "react-loading-skeleton"; import "react-loading-skeleton/dist/skeleton.css"; import CharacterCard from "../components/CharacterCard"; const Home = () => { const [page, setPage] = useState(1); const [data, setData] = useState([]); const [filteredData, setFilteredData] = useState([]); const [searchQuery, setSearchQuery] = useState(""); const [loading, setLoading] = useState(true); const [showSkeleton, setShowSkeleton] = useState(false); const [suggestions, setSuggestions] = useState([]); const [hasMore, setHasMore] = useState(true); const { ref, inView } = useInView({ threshold: 0.1, }); useEffect(() => { if (!hasMore) return; setShowSkeleton(true); setTimeout(() => { axios .get(`https://swapi.py4e.com/api/people/?page=${page}`) .then((res) => { const results = res.data.results; if (results.length > 0) { setData((prevData) => [...prevData, ...results]); setFilteredData((prevData) => [...prevData, ...results]); } else { setHasMore(false); } setLoading(false); setShowSkeleton(false); }) .catch(() => { setShowSkeleton(false); setHasMore(false); }); }, 1000); }, [page]); useEffect(() => { if (inView && hasMore && !loading) { setPage((prevPage) => prevPage + 1); } }, [inView, hasMore, loading]); const handleSearch = (e) => { const query = e.target.value.toLowerCase(); setSearchQuery(query); if (query === "") { setFilteredData(data); setSuggestions([]); return; } const filtered = data.filter((character) => character.name.toLowerCase().includes(query) ); setFilteredData(filtered); const autoSuggestions = data .map((character) => character.name) .filter((name) => name.toLowerCase().includes(query)) .slice(0, 5); setSuggestions(autoSuggestions); }; const handleSuggestionClick = (suggestion) => { setSearchQuery(suggestion); setFilteredData( data.filter( (character) => character.name.toLowerCase() === suggestion.toLowerCase() ) ); setSuggestions([]); }; return (
{loading ? ( ) : ( Logo )}
{loading ? ( ) : ( )} {suggestions.length > 0 && (
    {suggestions.map((suggestion, index) => (
  • handleSuggestionClick(suggestion)} > {suggestion}
  • ))}
)}
{showSkeleton && hasMore && ( )} {hasMore &&
}
); }; export default Home;