A menssagem nunca é exibida. Mesmo antes de adicionar a instrução "target[prop] = value;"(que com outros alunos, exibia a menssagem apenas a partir da segunda negociação adicionada).
Procurei o problema, mas não encontrei. Não tenho muita prática com o vscode então não consegui fazer debug. Recomendações de vídeos, blogs, ou outros envolvendo debug no vscode são muito bem vindas.
Vlw.
Segue abaixo classes envolvidas:
class NegociacaoController {
constructor() {
let $ = document.querySelector.bind(document);
this._inputData = $("#data");
this._inputQuantidade = $("#quantidade");
this._inputValor = $("#valor");
this._listaNegociacoes = ProxyFactory.create(
new ListaNegociacoes(),
["adiciona", "esvazia"],
(model) => {
this._negociacoesView.update(model);
}
);
this._negociacoesView = new NegociacoesView($("#negociacoes-view"));
this._negociacoesView.update(this._listaNegociacoes);
this._menssagem = new ProxyFactory(new Menssagem(), ["texto"], (model) =>
this._menssagemView.update(model)
);
this._menssagemView = new MenssagemView($("#menssagem-view"));
this._menssagemView.update(this._menssagem);
}
_criaNegociacao() {
return new Negociacao(
this._inputData.value,
this._inputQuantidade.value,
this._inputValor.value
);
}
_limpaFormulario() {
this._inputData.value = "";
this._inputQuantidade.value = "1";
this._inputValor.value = "0";
this._inputData.focus();
}
adiciona(event) {
event.preventDefault();
this._listaNegociacoes.adiciona(this._criaNegociacao());
this._menssagem.texto = "Negociação cadastrada com sucesso.";
this._limpaFormulario();
}
apaga() {
this._listaNegociacoes.esvazia();
this._menssagem.texto = "Negociações apagadas com sucesso.";
}
}
class ProxyFactory {
static create(obj, props, action) {
return new Proxy(obj, {
get: function (target, prop, receiver) {
if (props.includes(prop) && ProxyFactory._isFunction(target[prop])) {
return function () {
console.log(`Interceptando ${prop}`);
Reflect.apply(target[prop], target, arguments);
return action(target);
};
}
return Reflect.get(target, prop, receiver);
},
set: function (target, prop, value, receiver) {
console.log("passando pelo set");
if (props.includes(prop)) {
console.log(`Interceptando ${prop}`);
target[prop] = value;
action(target);
}
return Reflect.set(target, prop, value, receiver);
},
});
}
static _isFunction(func) {
return typeof func == typeof Function;
}
}
class Menssagem {
constructor(texto = "") {
this._texto = texto;
}
get texto() {
return this._texto;
}
set texto(texto) {
this._texto = texto;
}
}
Link para projeto: https://drive.google.com/file/d/1ANdFyS5B-4rkq_YUS1hgOjO8Y35WVz2a/view?usp=sharing