import { useEffect, useMemo, useState } from "react"; import "./styles.css"; // busca repositorios // nome do repo e linguagem interface Repo { name: string; language: string; } interface IRepoListProps { repoList: Repo[] | null; isLoading?: boolean; searchLang?: string; } function RepoList({ repoList, isLoading, searchLang }: IRepoListProps) { if (isLoading) return
Carregando ...
; if (!repoList) { return
Não tem nada
; } console.log({ repoList }); const filteredRepos = repoList.filter((repo) => repo.language.includes(searchLang) ); return ( ); } interface LanguageOptions { slug: string; name: string; } function SelectLanguage({ options, onChange }: { options: LanguageOptions[]; onChange: (value: string | null) => void; }) { const [selectedValue, setValue] = useState(null); useEffect(() => { onChange(selectedValue); }, [selectedValue]); return ( ); } const mockLanguages = [ { name: "Javascript", slug: "javascript" }, { name: "Typescript", slug: "typescript" } ]; export default function App() { const [repos, setRepos] = useState(null); const [isLoading, setLoading] = useState(false); const [selectedLang, setLang] = useState(null); const url = "https://api.github.com/orgs/vtex/repos?per_page=100"; async function getRepos(url: string) { setLoading(true); try { const response = await fetch(url); const result = await response.json(); return result; } catch (err) { console.error(err); } finally { setLoading(false); } } useEffect(() => { (async () => { const fetchResult = await getRepos(url); setRepos(fetchResult); })(); }, []); const memoizedList = useMemo(() => repos, [repos]); return (

Vamos começar por aqui

); }