Boa tarte. tenho um banco de dados exibido por uma lista. fiz uma rotina conforme oritanção do #Mathteu Alexandre. Funciona perfeitamente. Porém agora filz um filtro de nomes por um dropdown, mais o total da lista aparece sem aplicação do filtro. vejam a rotina:
// 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) }
vejam as fotos sem o filtro e com o filtro.
agradeço desde já a atenção.
bom dia. não deu certo. passo a foto e o codigo digitado. se alguem puder me ajudar agradeço. anexo a foto com erro na linha 18
$w.onReady(function () { //TODO: write your page related code here... }); import wixData from 'wix-data'; export function button5_click(event) {const initDate =$w("#DataInicial").value; const endDate = $w("#DataFinal").value; $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); and( if(valorDropDown1) { filtro = filtro.eq("funcionario", valorDropDown) }) //atulizado o valor total $w('#input1').value = total }); $w("#dataset1") .setFilter(wixData.filter().between("dtcomissao", initDate, endDate)); //Add your code for this event 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 }); });
Oi Almir.
Usando o operador and() você pode usar mias de um filtro.
//exemplo const valorDropDown = $w("#seudropdown").value const filtro = wixData.filter(); //filtro por data filtro = filtro.between("dtcomissao", initDate, endDate) //outro filtro se o dropdown tiver um item selecionado if(valorDropDown) { filtro = filtro.eq("funcionario", valorDropDown) } $w("#dataset1").setFilter(filtro)
Mais exemplos:
https://www.wix.com/corvid/new-reference/wix-dataset/dataset/setfilter
https://www.wix.com/corvid/new-reference/wix-data/wixdataquery/and
#victorhcardial
vou te incomodar mais uma vez.
tenho um filtro por data, e agora quero agregar mais um filtro pelo dropdown, estou fazendo mas não está dando certo. poderia me ajudar. desde já agradeço. passo a rotina original mais a foto da leta
// For full API documentation, including code examples, visit http://wix.to/94BuAAs $w.onReady(function () { //TODO: write your page related code here... }); import wixData from 'wix-data'; export function button5_click(event) {const initDate =$w("#DataInicial").value; const endDate = $w("#DataFinal").value; $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("#dataset1") .setFilter(wixData.filter().between("dtcomissao", initDate, endDate)) //Add your code for this event 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 }); });
muito obrigado. funcionaou.
Cole o código da sua função de cálculo dentro de um evento onChange( ) do dropdown, para que depois que você mude o filtro ele faça o cálculo novamente. EXEMPLO: export function dropdown1_change(event) {
$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) }); } Você pode criar o evento nas propriedades do dropbox: