Nesse projeto fiz o meu primeiro CRUD (Create, Read, Update and Delete) e melhorei meus conhecimentos sobre props
e state
em React. Também aprendi a usar libs de CSS em React para acelerar o desenvolvimento.
Esse projeto me deu um pouco de nostalgia, lembrei de quando trabalhava com redes, por conta do uso do pacote react-router-dom
e seus outros itens como Switch e Link.
Após cada um dos passos, haverá um exemplo do comando a ser digitado para fazer o que está sendo pedido, caso tenha dificuldades e o exemplo não seja suficiente, não hesite em me contatar em [email protected].
- Abra o terminal e crie um diretório no local de sua preferência com o comando mkdir:
mkdir projetos-johnatas
- Entre no diretório que acabou de criar e depois clone o projeto:
cd projetos-johnatas
git clone git@github.com:johnatas-henrique/movie-cards.git
- Acesse o diretório do projeto e depois utilize o comando npm i para instalar todas as dependências necessárias:
cd movie-cards
npm i
- Por último, rode o comando npm start e acesse o projeto via browser, no caminho
http://localhost:3000/movie-cards
.
O componente App
, que representa toda a aplicação, deve importar e renderizar BrowserRouter
.
O componente Switch
deve ser o único filho direto de BrowserRouter
. Dentro de Switch
ficarão as rotas relacionadas às diferentes páginas da aplicação.
O app possui ao todo 4 rotas, como descrito na seção O que deverá ser desenvolvido. Cada rota é associada a um caminho de URL e a um componente. Este componente renderizará um conteúdo específico para aquela rota. O mapeamento entre rotas, caminhos de URL e componentes estão listados abaixo.
-
O caminho raiz do projeto (
/
) deve renderizar o componenteMovieList
. -
O caminho
movies/:id
deve renderizar o componenteMovieDetails
. Onde o:id
é o parâmetro da URL que representa ID do filme queMovieDetails
renderizará. -
O caminho
/movies/new
deve renderizar o componenteNewMovie
. -
O caminho
movies/:id/edit
deve renderizar o componenteEditMovie
.:id
é um parâmetro de URL com o id do filme queEditMovie
possibilitará editar. -
Qualquer outro caminho que não se enquadre nas rotas anteriores deve renderizar o componente
NotFound
.
4 - Ao ser montado, MovieList
deve fazer uma requisição para buscar a lista de filmes a ser renderizada
Para buscar a lista, você deve utilizar a função getMovies
importada do módulo movieAPI
em MovieList
. Essa função retorna uma promise. A requisição deve ser feita no momento em que o MovieList
for montado no DOM. Enquanto a requisição estiver em curso, MovieList
deve renderizar o componente Loading
, como ilustrado na imagem a seguir.
Uma vez que a requisição retornar, o resultado deve ser renderizado. Para cada filme, renderize um componente MovieCard
, como ilustrado abaixo.
Você precisará adicionar um estado em MovieList
para controlar o que será exibido.
Cada cartão da lista deve conter em seu rodapé um link com o texto "VER DETALHES". Este link deve apontar para a rota movies/:id
, onde :id
é o id do filme. Esta rota exibirá informações detalhadas de um filme.
6 - Ao ser montado, MovieDetails
deve fazer uma requisição para buscar o filme que deverá ser renderizado
MovieDetails
se comporta de forma muito semelhante ao MovieList
. Ao ser montado, deve fazer uma requisição utilizando a função getMovie
do módulo movieAPI
, passando o id do filme. O componente Loading
deve ser renderizado enquanto a requisição estiver em curso. Após terminar, deve-se renderizar o card com detalhes sobre o filme.
No rodapé do cartão, deve haver um link com o texto "EDITAR" apontando para a rota /movies/:id/edit
, conforme ilustrado na imagem abaixo.
No rodapé do cartão, deve haver um link apontando para a rota raiz (/
) com o texto "VOLTAR", conforme ilustrado na imagem acima.
O comportamento de EditMovie
é muito semelhante ao de MovieDetails
. EditMovie
, no entando, renderizará o formulário de edição de filme.
10 - Ao submeter o formulário, EditMovie
deve atualizar o filme e redirecionar a página para a rota raiz.
O componente MovieForm
recebe uma callback, que será executada quando o formulário for submetido. Essa callback recebe os dados atualizados do filme. Neste momento, EditMovie
deve fazer uma requisição utilizando a função updateMovie
do módulo movieAPI
, passando como argumentos os dados atualizados. Quando a requisição finalizar, EditMovie
deve redirecionar o app para a rota raiz (/
).
O link deve conter o texto "ADICIONAR CARTÃO" e apontar para a rota /movies/new
, contento um formulário para criar novos cartões.
12 - Ao submeter o formulário, NewMovie
deve criar um novo filme e redirecionar o app para a página inicial.
Utilizando a callback passada para MovieForm
, NewMovie
deve criar um novo cartão utilizando a função createMovie
do módulo movieAPI
. Após o fim da requisição, NewMovie
deve redirecionar o app para a página inicial, contento o novo cartão.
Todos os compontens que recebem props devem ter suas proptypes corretamente declaradas. O eslint checa automaticamente declaração de proptypes, portanto seu Pull Request deverá passar no Code Climate para satisfazer esse requisito.