Nesta altura do campeonato, já conseguimos observar uma dor recorrente: compartilhar informaçōes com a aplicação inteira.
O que fazer quando dois componentes precisam dos mesmos dados? E se um deles é responsável por alterar, como imediatamente mandar esta nova informação pro outro sem que tudo vire uma grande bagunça?
Para isto nós usamos um gerenciador de estado
, sendo ele o Vuex! Faça uma agenda de contatos para ver o quanto é simples manter dados compartilhados com toda a aplicação quando usamos ele!
Você precisará do Nodejs (LTS ou Current) instalado em sua máquina.
Na primeira execução rodar o comando:
$ npm install
Depois, para começar a desenvolver:
$ npm run server
Com esse desafio, você aprenderá:
- Flux pattern
- Vuex
- Vuex Persist
- Rota
/
- Deve listar todos os contatos registrados
- Cada contato deve ter um
RouterLink
para a página de edição - Cada contato deve ter uma ação de
Remover da Lista
- Cada contato deve ter um
- Exibir no mínimo os campos de
Nome
eEmail
- Conter um
RouterLink
para a página de criar novo contato - Conter o número total de contatos
- Se não existir nenhum contato ainda, deve conter um
Empty State
- Deve listar todos os contatos registrados
- Rota
/create
- Deve ter um formulário para criar um novo contato
- Pode conter quantos campos quiser, mas é necessário ter
Nome
eEmail
- Pode conter quantos campos quiser, mas é necessário ter
- Deve ter uma ação de
Criar contato
- Deve ter um formulário para criar um novo contato
- Rota
/:contato_id/edit
- Deve tentar encontrar o contato via o parametro de ID
- Se o contato não existir, redirecionar para a rota
/404
- Se ele existir
- Deve ter um formulário para editar um contato
- Deve conter os mesmo campos do formulário de criação, porém, devem vir preenchidos com os dados do usuário
- Somente ao clicar em salvar que os dados devem ser atualizados
- Deve conter uma action de
Salvar
- Deve ter um formulário para editar um contato
- Se o contato não existir, redirecionar para a rota
- Deve tentar encontrar o contato via o parametro de ID
- Rota
/404
- Deve conter um link para voltar para a tela inicial
- Todas as alterações de contato (seja edição ou criação) devem ser persistidas no
LocalStorage
- O elemento com o total de contatos deve conter um atributo
data-test
com o valortotal-${totalDeCotnatos}
- Cada link de
editar contato
deve conter um atributodata-test
com o valoreditar
- Cada ação de
remover contato
deve conter um atributodata-test
com o valorapagar
- O container do
Empty State
deve conter um atributodata-test
com o valorsem-contatos
- O link de
Criar novo contato
deve conter um atributodata-test
com o valornovo-contato
- O elemento
input
de alteração / cadastro donome
do contato, deve contar um atributodata-test
com o valornome
- O elemento
input
de alteração / cadastro doemail
do contato, deve contar um atributodata-test
com o valoremail
- A ação de
Criar novo contato
deve conter um atributodata-test
com o valorcriar
- A ação de
Salvar contato
deve conter um atributodata-test
com o valorsalvar