roger-melo-treinamentos / curso-de-js-roger-melo

Repositório de informações do CJRM
493 stars 172 forks source link

Aplicação: ToDo List #607

Closed diegobaena89 closed 3 years ago

diegobaena89 commented 3 years ago

Boa tarde, professor! Nos últimos dias, após terminar o módulo 09, me dediquei a fazer a aplicação To Do. Seguem abaixos os pontos que observei sentir mais facilidade ou não:

Facilidades:

event.target.value = ""

eu já havia usado outras vezes, mas a solução do reset() me pareceu mais lógica e a adotei também.

Dificuldades:

O repositório da minha aplicação está aqui: https://github.com/diegobaena89/todo-app-cjrm-mentoring E o deploy está aqui: https://diegobaena89.github.io/todo-app-cjrm-mentoring/

Muito obrigado e tenha um ótimo fim de semana!

@Roger-Melo

Roger-Melo commented 3 years ago

Olá Diego.

Passando para dizer que visualizei sua issue e se estiver tudo ok com a aplicação, em breve a análise será postada aqui =)

@diegobaena89

Roger-Melo commented 3 years ago

Olá Diego.

Parabéns pelo esforço em implementar a segunda aplicação =)

Comparando com a análise passada, seu progresso é perceptível. Grande parte dos pontos de atenção mencionados foram corrigidos aqui =)

Tenho apenas alguns pequenos pontos de atenção que vou deixar abaixo, sendo eles em relação à organização do código.

Indentação

Observe que no código abaixo, a indentação da invocação do includes dá a entender que ele está no mesmo nível das invocações do filter e do forEach:

  Array.from(ulInputGroup.children)
  .filter(task =>  !task.textContent.toLowerCase()
  .includes(inputSearchValue))
  .forEach(task => {
    task.classList.remove('d-flex')
    task.classList.add('hidden')
  })

Neste caso, para evitar algum mal-entendido sobre as indentações das invocações, eu preferiria indentar as invocações do filter e do forEach e deixar a invocação do includes na mesma linha da expressão no qual ela faz parte:

  Array.from(ulInputGroup.children)
    .filter(task => !task.textContent.toLowerCase().includes(inputSearchValue))
    .forEach(task => {
      task.classList.remove('d-flex')
      task.classList.add('hidden')
    })

É possível também quebrar e indentar as invocações do toLowerCase e do includes (como abaixo), mas eu ainda prefiro da forma acima, pois fica mais claro identificar o callback do filter.

  Array.from(ulInputGroup.children)
    .filter(task => !task.textContent
      .toLowerCase()
      .includes(inputSearchValue))
    .forEach(task => {
      task.classList.remove('d-flex')
      task.classList.add('hidden')
    })

É interessante também indentar template strings que contém marcação HTML:

// antes
ulInputGroup.innerHTML += `
<li class="list-group-item d-flex justify-content-between align-items-center">
<span>${inputValue}</span>
<i class="fas fa-times delete"></i>
</li>
`

// depois
ulInputGroup.innerHTML += `
  <li class="list-group-item d-flex justify-content-between align-items-center">
    <span>${inputValue}</span>
    <i class="fas fa-times delete"></i>
  </li>
`

Agrupamento de linhas de código por tipo

É interessante separar o código por "grupos" de comandos do mesmo tipo.

Se as invocações dos addEventListener forem inseridas nas últimas linhas, fica mais fácil localizar grupos de código do mesmo tipo.

No código abaixo, por exemplo, existem os seguintes "blocos de código":

const formAddTodo = document.querySelector('.form-add-todo')
const ulInputGroup = document.querySelector('.todos-container')
// ...

const insertNewLis = event => {
  // ...
}

const deleteClickedLis = event => {
  // ...
}

const filteringInputValues = event => {
  // ...
}

formSearch.addEventListener('input', filteringInputValues)
formAddTodo.addEventListener('submit', insertNewLis)
ulInputGroup.addEventListener('click', deleteClickedLis)

Linhas em branco

Linhas em branco, quando bem aplicadas indicam, visualmente, a separação entre conceitos.

Seguindo este princípio, eu adicionaria linhas em branco nas linhas:

E removeria a linha em branco 11.


Novamente, parabéns pela aplicação. Fico feliz em ver seu progresso rumo à fluência =)

As observações acima fizeram sentido?

@diegobaena89

diegobaena89 commented 3 years ago

Olá, professor. Boa noite! Tudo bem? espero que sim! Primeiramente, muito obrigado pelas correções, elas fizeram todo o sentido e já refatorei o código! Estou bastante animado com a quantidade de conteúdo que estou conseguindo assimilar e conseguir aplicar nas minhas aplicações graças ao método ATER e também à sua didática.

Muito obrigado mesmo! E vamos rumo à fluência!

Abraços

Roger-Melo commented 3 years ago

Fico muito feliz que o método esteja ajudando em sua jornada rumo à fluência, Diego. No que precisar, pode contar comigo =)