Fala ai Lucas, tudo bem? Fiz umas alterações aqui, primeiro na NegociacoesView
na função template
:
<tbody class="table-body">
${model.negociacoes
.map(
(n, i) => `
<tr>
<td>${DateHelper.dateToText(n.data)}</td>
<td>${n.quantidade}</td>
<td>${n.valor}</td>
<td>${n.volume}</td>
<td data-index="${i}" onclick="negociacaoController.remover(this)">X</td>
</tr>
`
)
.join('')}
</tbody>
Modifiquei o tbody
, basicamente adicione o index
do array
como segundo parâmetro do map
e passei ele para um data attribute no td
.
Também chamei a função remover
do negociacaoController
que recebe o próprio td
.
Agora na classe NegociacaoController
criei a função para remover
:
remover(td) {
const index = td.dataset.index;
if (index >= 0) {
this._listaNegociacoes.remove(index);
}
}
Ela pega o data attribute e verifique se o mesmo existe, se sim ela chama a função remove
da ListaNegociacoes
.
Na classe ListaNegociacoes
adicionei uma função remove
:
remove(index) {
const novaLista = [...this._negociacoes];
novaLista.splice(index, 1);
this._negociacoes = novaLista
}
Ela cria uma nova lista e remove um item dado uma posição específica do array
.
E por último na NegociacaoController
precisa fazer o bind
dessa nova função remove
:
this._listaNegociacoes = new Bind(
new ListaNegociacoes(),
new NegociacoesView(this._$('#negociacoesView')),
'adicionaNegociacoes',
'esvaziaNegociacoes',
'ordenarLista',
'inverterLista',
'remove',
);
Acho que foi isso, a ideia seria mais ou menos essa.
Claro que tem N jeitos de se implementar essa remoção, a que eu pensei aqui foi essa.
Espero ter ajudado.