Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

duvida sobre moment e porque funciona

Saudações.

Ao revisar o código no final do curso para sedimentar o conhecimento surgiu uma nova dúvida que não havia aparecido na hora. Abaixo tem o código do arquivo "criaData.js" e eu gostaria que a atenção se voltasse para o uso do moment em dois objetos diferentes, o objeto "data" que é um parâmetro da função e do objeto do local storage dentro do forEach.

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

export const criaData = (data) => {
    const dataTopo = document.createElement("li");
    // eslint-disable-next-line no-undef
    const dataMoment = moment(data, "DD/MM/YYYY");
    dataTopo.innerHTML = `<p class ="content-data">${dataMoment.format("DD/MM/YYYY")}</p>`;

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

    tarefas.forEach((element, id) => {
        // eslint-disable-next-line no-undef
        const dia = moment(element.dataFormatada, "DD/MM/YYYY");
        console.log(element, element.dataFormatada);
        const diff = dataMoment.diff(dia);
        if (diff == 0) {
            dataTopo.appendChild(Tarefa(element, id));
        }
    });

    return dataTopo
}

data é um objeto passado pela função do arquivo "carregaTarefa.js" o qual está com o seguinte código:

import { ordenaDatas, removeDatasRepetidas } from "../services/data.js";
import { criaData } from "./criaData.js";

export const carregaTarefa = () => {
    const lista = document.querySelector("[data-list]");
    lista.innerHTML = " "
    const tarefas = JSON.parse(localStorage.getItem("tarefas")) || [];

    const datasUnicas = removeDatasRepetidas(tarefas);
    ordenaDatas(datasUnicas);

    datasUnicas.forEach((element) => {
        // eslint-disable-next-line no-undef
        lista.appendChild(criaData(element));
    });
}

Sendo assim, tanto o objeto "data" quanto o objeto "element" que entram como parâmetro da função "moment" tem suas datas extraídas mas de modo diferente, de maneira em que se aplicar a mesma lógica de data para o element não funciona, como assim? Eu explico!

Primeiro, importa entender que o objeto data é um dos elementos do array do localStorage, ou seja, possui todos os elementos de dataFormatada, horário, etc. o código do moment é aplicado pura e simplesmente nele e sua data é extraída. Segundo, o objeto element do documento criaData, assim como o objeto data, é composto por todos os seus elementos; no entanto para que o moment funcione, foi necessário fornecer apenas um elemento do objeto, explicitar através de "element.dataFormatada".

Se são dois objetos idênticos, porque o moment funcionou de forma diferente para cada um?

Tentei ser o mais claro possível

1 resposta
solução!

Na verdade "data" não é um objeto, ela advem do array de apenas datas

export const removeDatasRepetidas = (datas) => {
    const datasUnicas = [];
    datas.forEach(element => {
        if (datasUnicas.indexOf(element.dataFormatada) == -1){
            datasUnicas.push(element.dataFormatada);
        }
    });

    return datasUnicas;
}