Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Invalid Date

Quando eu faço uma nova Negociação, no console ele não consegue colocar a data corretamente

class Negociacao {

    constructor(data, quantidade, valor) {
        this._data = new Date(data.getTime());
        this._quantidade = quantidade;
        this._valor = valor;
        Object.freeze();
    }

    get data(){
        return this._data = new Date(this._data.getTime());
    }

    get quantidade(){
        return this._quantidade;
    }

    get valor(){
        return this._valor;
    }

    get volume(){
        return this._quantidade * this._valor;
    }
}
class NegociacaoController {

    constructor(){

        let $ = document.querySelector.bind(document);
        this._data = $("#data");
        this._quantidade = $("#quantidade");
        this._valor = $("#valor");
        this._form = $(".form");
        this._listaNegociacoes = new ListaNegociacoes();
    }

    adiciona(event){
        event.preventDefault();
        this._limpaForm();
        this._listaNegociacoes.adiciona(this._criaNegociacao());
        console.log(this._listaNegociacoes.negociacoes);
    };

    _criaNegociacao(){
        return new Negociacao(
            DateHelper.inputParaData(this._data.value),
            this._quantidade.value,
            this._valor.value
        );
    }

    _limpaForm(){
        this._form.reset();
        this._data.focus();
    }
}
class DateHelper {

    constructor(){

        throw new Error("Esta classe não pode ser instanciada");
    }

    static inputParaData(data) {
        if(!/^\d{4}-\d{2}-\d{2}$/.test(data)) throw new Error("A data deve estar no formato aaaa-mm-dd");
        return new Date(...data.split("-").map((item, indice) => item - indice % 2));
    }

    static inputParaString(string){

        return `${string.getDate()}/${string.getMonth()+1}/${string.getFullYear()}`
    }

}
class ListaNegociacoes {

    constructor(){

        this._lista = [];
    }

    adiciona(negociacao){

        this._lista.push(negociacao);
    }

    get negociacoes() {

        return [].concat(this._lista);
    }
}
4 respostas

Oi Thiago tudo bem?

Poderia colocar a pasta do seu projeto no github , por gentileza, para analisarmos melhor.

Fala aí Thiago, tudo bem? Não vi o código por completo, mas acho que o problema está no seu get da data, atual:

get data(){
    return this._data = new Date(this._data.getTime());
}

Acho que não precisa ter esse this._data e apenas retornar uma nova data, ficando assim:

get data(){
    return new Date(this._data.getTime());
}

Espero ter ajudado.

Ainda ele continua retornando a data completa. Eu coloquei a verificação de DateHelper como comentário para ver o resultado mesmo assim. https://github.com/Vianna0well/AluraJS/raw/master/aluraframe.rar

solução!

Aqui

adiciona(event){
        event.preventDefault();
        this._limpaForm();
        this._listaNegociacoes.adiciona(this._criaNegociacao());
        console.log(this._listaNegociacoes.negociacoes);
    };

Você está limpando o formulário , e depois tentando adicionar as informações. Mas você limpou antes então ele adiciona tudo errado.

Espero ter ajudado!!!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software