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
);
}