Hi,
I have a repeater that shows items from a dataset. The elements of the dataset is filtered from a Wix database upon user filtering. Each item on the repeater has a button with a link to the corresponding item’s dynamic page.
My website works all fine and well unless the user goes to the dynamic page from the repeater and comes back to the search page. After coming back to the search page, items on the repeater are no longer displayed. Through some debugging, I noticed that setFilter never returns a promise (search is called with await), no printing in then or catch. Furthermore, on the page, when the repeater breaks and displays only one element with no values, the dropdown menus also have wrong options listed underneath them (selections from a previous version).
I was wondering if there is actually a problem on Wix’s side. I am attaching the code I use to display the repeater data and to do the filtering.
import wixData from ‘wix-data’ ;
import wixLocation from “wix-location” ;
//import {session} from ‘wix-storage’;
let filter = wixData . filter ;
let numResults ;
$w . onReady ( async () => {
$w ( "#text48" ). collapse ()
$w ( "#button3" ). onClick (() => {
initiateSearch ();
})
$w ( "#button4" ). onClick (() => {
reset ();
initiateSearch ();
})
$w ( "#pagination1" ). currentPage = 1 ;
**await** initiateSearch ();
$w ( '#repeater1' ). onItemReady (( $item , itemData , index ) =>{
assign_value ( $item ( "#text15" ), itemData . homeland );
assign_value ( $item ( "#text5" ), itemData . title );
assign_value ( $item ( "#text33" ), itemData . gender );
assign_value ( $item ( "#text45" ), itemData . ethnicIdentity );
assign_value ( $item ( "#text41" ), itemData . religion );
assign_value ( $item ( "#text46" ), itemData . relocation );
assign_value ( $item ( "#text36" ), itemData . decadeResettled );
assign_value ( $item ( "#text43" ), get_topics ( itemData . themes ));
assign_value ( $item ( "#text35" ), itemData . summary );
$item ( "#button2" ). onClick (() => {
**let** targetLink = itemData [ "link-oral-archive-title" ];
wixLocation . to ( targetLink )
});
});
$w ( "#pagination1" ). onChange ( ( event ) => {
updateDisplay ();
});
});
async function initiateSearch ( ){
await search ();
updateDisplay ();
}
function updateDisplay ( ){
$w ( “#pagination1” ). totalPages = Math . max ( 1 , Math . ceil ( numResults / 12 ));
let current = $w ( “#pagination1” ). currentPage ;
let first ;
if ( numResults == 0 ) first = 0 ;
else first = ( current - 1 )* 12 + 1 ;
let last = Math . min ( first + 11 , numResults );
$w ( “#text49” ). text = “Displaying " + first + " to " + last + " of "
+ numResults + " interviews.” ;
}
async function search ( ) {
**let** dataset = $w ( "#dataset1" );
// if gender is empty, corner case because "female" contains "male"
**if** ( $w ( "#dropdown2" ). value == "" ){
**await** dataset . setFilter ( wixData . filter ()
. contains ( "homeland" , String ( $w ( "#dropdown1" ). value ))
. and (
wixData . filter (). contains ( "gender" , String ( $w ( "#dropdown2" ). value ))
)
. and ( wixData . filter (). contains ( "relocation" , String ( $w ( "#dropdown6" ). value )))
. and (
wixData . filter ()
. contains ( "title" , String ( $w ( "#input1" ). value ))
. or (
wixData . filter ()
. contains ( "summary" , String ( $w ( "#input1" ). value ))
)
)
)
. then ( () => {
numResults = $w ( "#dataset1" ). getTotalCount ();
**if** ( numResults == 0 ) $w ( "#text48" ). expand ()
});
}
**else** {
**await** dataset . setFilter ( wixData . filter ()
. contains ( "homeland" , String ( $w ( "#dropdown1" ). value ))
. and (
wixData . filter (). eq ( "gender" , String ( $w ( "#dropdown2" ). value ))
)
. and ( wixData . filter (). contains ( "relocation" , String ( $w ( "#dropdown6" ). value )))
. and (
wixData . filter ()
. contains ( "title" , String ( $w ( "#input1" ). value ))
. or (
wixData . filter ()
. contains ( "summary" , String ( $w ( "#input1" ). value ))
)
)
)
. then ( () => {
numResults = $w ( "#dataset1" ). getTotalCount ();
});
}
}
function get_topics ( topics ){
if ( topics . length == 0 ) return null ;
let themes = toTitleCaseSlash ( topics [ 0 ]);
for ( let i = 1 ; i < topics . length ; i ++){
themes += ", " + toTitleCaseSlash ( topics [ i ]);
}
return themes ;
}
//
function toTitleCaseSlash ( str ){
let parts = str . split ( “/” );
let output = toTitleCase ( parts [ 0 ]);
for ( let i = 1 ; i < parts . length ; i ++){
output += “/” + toTitleCase ( parts [ i ]);
}
return output ;
}
function toTitleCase ( str ) {
return str . replace (
/\w\S*/ g ,
function ( txt ) {
return txt . charAt ( 0 ). toUpperCase () + txt . substr ( 1 ). toLowerCase ();
}
);
}
function assign_value ( element , value ){
if (! value ) element . text = “Not available.” ;
else element . text = value ;
}
//Reset Filter
function reset ( ) {
$w ( “#text48” ). collapse ();
$w ( “#dropdown1” ). value = “” ;
$w ( “#input1” ). value = “” ;
$w ( ‘#input1’ ). resetValidityIndication ();
$w ( “#dropdown2” ). value = “” ;
$w ( “#dropdown4” ). value = “” ;
$w ( “#dropdown5” ). value = “” ;
$w ( “#dropdown6” ). value = “” ;
$w ( “#dropdown7” ). value = “” ;
$w ( “#dataset1” ). setFilter ( wixData . filter ());
}