Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

16
respostas

Erro data is not defined

import { handleNovoItem } from "./componentes/criaTarefa.js";
import { carregaTarefa } from "./componentes/carregaTarefa.js";

const novaTarefa = document.querySelector("[data-form-button]");

novaTarefa.addEventListener("click", handleNovoItem);

carregaTarefa();
import { carregaTarefa } from "./carregaTarefa.js";
import BotaoConclui from "./concluiTarefa.js";
import BotaoDeleta from "./deletaTarefa.js";

export const handleNovoItem = (event) => {
  event.preventDefault();
  const tarefas = JSON.parse(localStorage.getItem("tarefas")) || [];
  const input = document.querySelector("[data-form-input]");
  const valor = input.value;

  const calendario = document.querySelector("[data-form-date]");
  const data = moment(calendario.value);

  const dataFormatada = data.format("DD/MM/YYYY");

  const dados = {
    valor,
    dataFormatada,
  };

  const tarefasAtualizadas = [...tarefas, dados];

  localStorage.setItem("tarefas", JSON.stringify(tarefasAtualizadas));

  input.value = "";

  carregaTarefa();
};

export const Tarefa = ({ valor, dataFormatada }) => {
  const tarefa = document.createElement("li");
  tarefa.classList.add("task");

  const conteudo = `<p class="content">${dataFormatada} * ${valor}</p>`;
  tarefa.innerHTML = conteudo;

  tarefa.appendChild(BotaoConclui());
  tarefa.appendChild(BotaoDeleta());

  return tarefa;
};
import { criaData } from "./criaData.js";

export const carregaTarefa = () => {
  const lista = document.querySelector("[data-list]");

  const tarefasCadastradas = JSON.parse(localStorage.getItem("tarefas")) || [];

  lista.innerHTML = "";

  tarefasCadastradas.forEach((tarefa) => {
    const dia = moment(tarefa.dataFormatada, "DD/MM/YYYY");
    const diff = data.diff(dia);

    if (diff === 0) {
      lista.appendChild(criaData(dia));
    }
  });
};
import { Tarefa } from "./criaTarefa.js";

export const criaData = (data) => {
  const tarefas = JSON.parse(localStorage.getItem("tarefas")) || [];
  const dataTopo = document.createElement("li");
  const conteudo = `<p class="content-data">${data.format("DD/MM/YYYY")}</p>`;

  dataTopo.innerHTML = conteudo;

  tarefas.forEach((tarefa) => {
    const dia = moment(tarefa.dataFormatada, "DD/MM/YYYY");

    const diff = data.diff(dia);

    if (diff === 0) {
      dataTopo.appendChild(Tarefa(tarefa));
    }
  });

  return dataTopo;
};

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

16 respostas

Fala Diego, tudo bem?

Para arrumar isso você pode simplesmente tirar a verificação do diff de dentro da função carregaTarefa pois ja estamos fazendo essa verificação no criaTarefa que é aonde possuimos acesso a data, assim ficando o seu carregaTarefa:

import { criaData } from "./criaData.js";

export const carregaTarefa = () => {
  const lista = document.querySelector("[data-list]");

  const tarefasCadastradas = JSON.parse(localStorage.getItem("tarefas")) || [];

  lista.innerHTML = "";

  tarefasCadastradas.forEach((tarefa) => {

      lista.appendChild(criaData(dia));
  });
};

Tenta ai e fala pra gente se funcionou ta bom?

Matheus boa tarde, tive o mesmo problema e achei o post aqui.Eu tentei aplicar a solução aqui apresentada e não funcionou desta vez lista.appendChild(criaData(dia));o parametro "dia " não é definido.Eu sou estudante ainda mas uma coisa que me chamou atenção durante a aula, quando o instrutor foi implentar em um determiado trecho do código,ao inserir o parametro dentro de outro módulo não ocorreu a chamada do import { criaData } from "./criaData.js";automaticamente e no video o instrutor coloca manualmente.Enfim só uma observação não sei dizer se tem alguma relação, comentei pois durante a codificação dos outros modulos o import ocorria automaticamente com a chamada do parametro.

aqui não ta rodando esse código também... fiz identico ao video, olhei varias vezes.

Olá, recomendo que os dois abram tópicos diferentes para que eu e o pessoal possa ajudar vocês, ta bom?

Mateus, desculpa a pergunta que pode parecer meio boba, mais eu não entendi o motivo para abri dois tópicos diferentes quando o problema é o mesmo a duvida é a mesma de 3 pessoas.Eu estou parado no curso e não vou dar sequencia até entender e resolver o problema do código, com todo respeito e toda franqueza não vou abri outro topico para pergunta a mesma coisa que mais duas pessoas perguntaram.Espero que entenda meu ponto de vista.Estarei no aguardo da explicação do erro do codigo e da explicação da solução a ser apresentada.

o problema é exatamente o mesmo, não roda porque mostra data not defined.

Pessoal para não perderem tempo, ja existe varios posts aqui no forum relatando mesmo problema.Conclusão foi encontrado um erro de edição do video, e codigo colocado em lugar errado.O material não foi atualizado nem arrumado, fiz alguns testes antes de ler os demais posts e uma solução para eliminar a falha de data não definida, seria criar const data = dia dentro de tarefasCadastradas no modulo carrega tarefa.js.Vai conseguir criar as tarefas do mesmo dia na mesma data,porém ao criar mais de uma tarefa no mesmo dia ele duplica a data e as tarefas.Mas para fins de entendimento a falha ocorria por falta de declaração de "data"

marcelo consegui arrumar. depois de tentar bastante.

o arquivo cria data fica assim

import { Tarefa } from "./criaTarefa.js"

export const criaData = (data) => { const tarefas = JSON.parse(localStorage.getItem('tarefas')) || []

const dataTopo = document.createElement('li') const conteudo = <p class="content-data">${data.format('DD/MM/YYYY')}</p>

dataTopo.innerHTML = conteudo

tarefas.forEach((tarefa => { const dia = moment(tarefa.dataFormatada, 'DD/MM/YYYY') const diff = data.diff(dia) if(diff === 0) { dataTopo.appendChild(Tarefa(tarefa)) } }))

return dataTopo

e o carrega tarefa fica assim

import { criaData } from "./criaData.js"

export const carregaTarefa = () => { const lista = document.querySelector('[data-list]')

const tarefasCadastradas = JSON.parse(localStorage.getItem('tarefas')) || []

lista.innerHTML = ""

tarefasCadastradas.forEach((tarefa => { const dia = moment(tarefa.dataFormatada, 'DD/MM/YYYY')

    lista.appendChild(criaData(dia))

})) }

ele vai separar junto com as datas mas vai repetir varias vezes, será arrumado na aula posterior

o que eu mudei foi um parenteses no tarefa (nao sei se isso muda algo ou não, não testei com porque ja tava pistola de tanto tentar)

e tirei o diff do carrega tarefa, como a função criaData recebe um dia como variável é necessário criar a variável dia pra jogar dentro da função. Na solução que o colega acima apresentou a funcção cria data estava recebendo um dia mas ele não existia. tenta lá e ve se foi abraço

ficou torto demais, não sei postar bonitinho igual o cara ali em cima mas acho que deu pra pegar

criaData.js

import { Tarefa } from "./criaTarefa.js"

export const criaData = (data) => { const tarefas = JSON.parse(localStorage.getItem('tarefas')) || []

const dataTopo = document.createElement('li') const conteudo = <p class="content-data">${data.format('DD/MM/YYYY')}</p>

dataTopo.innerHTML = conteudo

tarefas.forEach((tarefa => { const dia = moment(tarefa.dataFormatada, 'DD/MM/YYYY') const diff = data.diff(dia) if(diff === 0) { dataTopo.appendChild(Tarefa(tarefa)) } }))

return dataTopo

carregaTarefa.js

import { criaData } from "./criaData.js"

export const carregaTarefa = () => { const lista = document.querySelector('[data-list]')

const tarefasCadastradas = JSON.parse(localStorage.getItem('tarefas')) || []

lista.innerHTML = ""

tarefasCadastradas.forEach((tarefa => { const dia = moment(tarefa.dataFormatada, 'DD/MM/YYYY')

    lista.appendChild(criaData(dia))
})) }

aprendi hahaha

Muito bom Rafael, fiz aqui e funcionou show! Obrigado

Rafael show de bola, não tive tempo de resonder ontem seus posts e obrigado por compartilhar.

Apanhei pra caramba com esse erro!

Valeu!!

Rafael, muito obrigado pela solução estava apanhando muito aqui vendo e revendo o video. Estava achando muito estranho mesmo o código pq no vs code quando eu colocava o:

const diff = data.diff(dia);

ele não modificava o highlight e constava como se a constante não tivesse sido definida.

E na aula 3 deste capitulo, se todos repararem o código do arquivo carregaTarefa.js está igual a solução do Rafael. Mais uma vez obrigado pela ajuda Rafael

Rafael de Freitas Rosa, salvou meu dia!