Boa tarde. Tenho uma lista e quero que saia em um input o valor total dela. até ai tudo bem. o Matheus me passou uma rotina e funciona perfeitamente. Porém, quando adiciono algum filtro via dropdown, o valor total da lista continua saindo o mesmo, e não o somatorio depois que apliquei o filtro.
Abaixo a rotina e foto da pagina no design:
// For full API documentation, including code examples, visit http://wix.to/94BuAAs
$w.onReady(function () { //TODO: write your page related code here... }); //funcao de soma const funcaoCalculo = (total, item) => item.vlrComissao + total; $w.onReady(function () { //espera que os dados sejam carregados $w('#dataset1').onReady( async () => { //pega todos items do dataset const data = await $w('#dataset1').getItems(0, $w('#dataset1').getTotalCount()) //calcula o total const total = data.items.reduce(funcaoCalculo, 0); //atulizado o valor total $w('#input1').value = total $w('#input1').value = currency(total) }); }); //declara a função no código function currency(valor, unit = 'R$') { const options = { style: 'currency', currency: 'BRL' } return new Intl.NumberFormat('pt-BR', options).format(valor) }
Obrigado mais uma vez #Matheus Alexandre
ola #Matheus alexandre.
fiz. está dando erro na linha 33
const data = await $w('#dataset1').getItems(0, $w('#dataset1').getTotalCount()).
$w.onReady(function () { //TODO: write your page related code here... }); //funcao de soma const funcaoCalculo = (total, item) => item.vlrComissao + total; $w.onReady(function () { //espera que os dados sejam carregados $w('#dataset1').onReady( async () => { //pega todos items do dataset const data = await $w('#dataset1').getItems(0, $w('#dataset1').getTotalCount()) //calcula o total const total = data.items.reduce(funcaoCalculo, 0); //atulizado o valor total $w('#input1').value = total $w('#input1').value = currency(total) }); }); //declara a função no código function currency(valor, unit = 'R$') { const options = { style: 'currency', currency: 'BRL' } return new Intl.NumberFormat('pt-BR', options).format(valor) } function atualizaSoma() { errro nesta liinha >>>>> const data = await $w('#dataset1').getItems(0, $w('#dataset1').getTotalCount()) //calcula o total const total = data.items.reduce(funcaoCalculo, 0); //atulizado o valor total $w('#input1').value = total $w('#input1').value = currency(total) } export function dropdown1_change(event) { atualizaSoma() } export function dropdown2_change(event) { atualizaSoma() } // onReady deve ficar assim agora $w.onReady(function () { $w('#dataset1').onReady(async () => { atualizaSoma() }); });
Oi @almirferrer
Separe a parte do código que soma e atualiza os inputs dessa forma:
function atualizaSoma() { const data = await $w('#dataset1').getItems(0, $w('#dataset1').getTotalCount()) //calcula o total const total = data.items.reduce(funcaoCalculo, 0); //atulizado o valor total $w('#input1').value = total $w('#input1').value = currency(total) }
Agora adicione o evento onChange aos seus dropdows de filtro
export function dropdown1_change(event) { atualizaSoma() } export function dropdown2_change(event) { atualizaSoma() } // onReady deve ficar assim agora $w.onReady(function () { $w('#dataset1').onReady(async () => { atualizaSoma() }); });
Espero ter ajudado!
#Matheus Alexandre
pode dar uma olhada?