- 1. Conceitos abordados
- 2. Descrição do projeto
- 3. Iniciando o Projeto
- 4. Enunciado do Projeto
- 5. Criando o projeto
- Iniciar um projeto react-app.
- Incluir ESLint, Prettier & EditorConfig.
- Criar routes, pages (index e styles).
- Utilizar Styled components para a estilização.
- Criação de componentes.
- state = {}, e render() {};
- funções handleInputChange, handleSubmit
- Utilizar a biblioteca axios para fazer requisições API e criar a baseURL.
- Utilizar localStorage do browser.
- componentDidMount e componentDidUpdate (Carregar e Salvar no LocalStorage, respectivamente).
- Utilizar o { Link } from 'react-router-dom'.
Novos:
- check repositorio não encontrado e duplicado.
- Filtro de estado de repositorio: Todos / Abertos / Encerrados.
- PAginação da lista de issues.
Projeto base para o desafio: https://github.com/MaisDennis/GoStack10.0-Modulo-05
Um site para buscar repositórios no Github, retornando o nome, a descrição e issues atuais presentes no repositório. A pagina principal cria uma lista de repositórios procurados, e em cada item, traz um link.
yarn start
“Para quem fica melhor a cada dia, ficar pronto é utopia”!
Sobre o desafio | Entrega | Licença
Nesse desafio você adicionará novas funcionalidades na aplicação que desenvolvemos ao longo desse módulo.
Adicione um try/catch
por volta do código presente na função handleSubmit
presente no componente Main
e caso um repositório não seja encontrado na API do Github adicione uma borda vermelha por volta do input em que o usuário digitou o nome do repositório.
Antes de fazer a chamada à API na função handleSubmit
faça uma verificação para ver se o repositório não está duplicado, ou seja, se ele ainda não existe no estado de repositories
.
Caso exista, dispare um erro, e com isso o código cairá no catch
do try/catch
criado na funcionalidade anterior.
throw new Error('Repositório duplicado');
Adicione um filtro de estado na listagem de Issues que criamos no detalhe do repositório. O estado representa se a issue está em aberto, fechada ou uma opção para exibir todas.
Exemplos de requisição:
https://api.github.com/repos/rocketseat/unform/issues?state=all
https://api.github.com/repos/rocketseat/unform/issues?state=open
https://api.github.com/repos/rocketseat/unform/issues?state=closed
Você pode encontrar a documentação nesse link;
Adicione paginação nas issues listadas no detalhe do repositório. A API do Github lista no máximo 30 issues por página e você pode controlar o número da página atual por um parâmetro no endereço da requisição:
https://api.github.com/repos/rocketseat/unform/issues?page=2
Adicione apenas um botão de próxima página e página anterior. O botão de página anterior deve ficar desativado na primeira página.
Esse desafio não precisa ser entregue e não receberá correção, mas você pode ver o resultado do código do desafio aqui. Após concluir o desafio, adicionar esse código ao seu Github é uma boa forma de demonstrar seus conhecimentos para oportunidades futuras.
Esse projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Feito com ♥ by Rocketseat 👋 Entre na nossa comunidade!
-
(1. e 2.) Criando a borda vermelha para repositorios não-encontrados e duplicados na pesquisa.
- Main/index.js:
- Incluir no state:
border: false,
- Adicione try/catch na função handleSubmit com o checkRepoExists
- Form recebe a propriedade "border={border}". Estilizar props.border com a condicional border: red;
- Main/index.js:
-
Filtro de estado:
- Repository/index.js
- Incluir no state:
filter: {},
- Incluir o componente IssueFilter com select / option (all / open / closed) dentro.
- Estilizar Issue Filter, select.
- Criar as funções handleFilter e loadIssues. loadIssues: recarregar a lista, conforme componentDidMount.
- loadIssues params:
params: { state: this.state.filter, page: this.state.page, per_page: 5, },
- Incluir no state:
- Repository/index.js
-
Paginação:
- Repository/index.js
- Incluir no state:
page: 1,
- Incluir o componente PageActions com 2 buttons dentro: 'Anterior' e 'Próximo'.
- Estilizar.
- Criar a função handlePage.
- Vide IF para impedir a página "0".
- Incluir no state:
- Repository/index.js