I have a repeater that can be filtered using a dropdown menu and a text input box. I want a default filter when the page is first loaded. I’ve created a default filter function by creating the filter in the $w.onReady() function. It works perfectly as intended on desktop, however on mobile it does not. It does not have the default filter and the repeater is simply populated in the order the items appear in the database. I’d appreciate any help, code is below:
import wixData from ‘wix-data’;
$w.onReady(() => {
wixData.query()
.find()
.then(res => {
let options = [{“value”: ‘’, ‘label’: ‘All Days’}];
options.push(…res.items.map(day => {
return {‘value’: day.title, ‘label’: day.title};
}));
$w(‘#iDay’).options = options;
})
let defaultFilter = wixData.filter().contains(‘promoted’,“p”);
$w(‘#dynamicDataset’).setFilter(defaultFilter);
});
let lastKeywordList;
let lastFilterDay;
let debounceTimer;
export function iKeyword_keyPress(event, $w) {
if (debounceTimer) {
clearTimeout(debounceTimer);
debounceTimer = undefined;
}
debounceTimer = setTimeout(() => {
//console.log($w(‘#iKeyword’).value);
//console.log($w(‘#iDay’).value);
let keywordList = ($w(‘#iKeyword’).value).split(" ");
filter(keywordList, lastFilterDay);
},900);
}
function filter(keywordList, day) {
if (lastKeywordList !== keywordList || lastFilterDay !== day){
let newFilter = wixData.filter();
if (keywordList){
let i;
for (i=0; i < keywordList.length; i++){
newFilter = newFilter.contains(‘keywords’,keywordList[i]);
}
}
if (day){
newFilter = newFilter.contains(‘day’,day);
}
$w(‘#dynamicDataset’).setFilter(newFilter);
lastKeywordList = keywordList;
lastFilterDay = day;
$w(‘#dynamicDataset’).setSort(wixData.sort().descending(‘promoted’));
}
}
export function iDay_change(event, $w) {
filter(lastKeywordList, $w(‘#iDay’).value);
}