This is my Sort.js style component:
<SortWrapper> <SortText>Sort By</SortText> <SortSelect onChange={onSelectChange}> <SortOption value="vehicleMake">Vehicle make</SortOption> <SortOption value="vehicleModel">Vehicle model</SortOption> </SortSelect> </SortWrapper>
This is the function in App.js where the sorting component is rendered
<Sort onSelectChange={onSelectChange} />
This is a function:
const onSelectChange = (e) => { const value = e.target.value; if (value === "VehicleMake") vehicles.sort((a, b) => a.vehicleMake.localeCompare(b.vehicleMake)); else if (value === "VehicleModel") { vehicles.sort((a, b) => a.vehicleModel.localeCompare(b.vehicleModel)); } else { vehicles.sort((a, b) => a.id - b.id); }
"Vehicles" is an array of objects that I get from the Firestore database.
Whenever I change the value of the SortOption, it does not automatically sort the array of objects, but when I click on page 2 in the pagination, and then click on page 1, it sorts it.
This is my grid component:
<Grid> {vehiclesData.map((vehicle) => ( <VehicleCard id={vehicle.id} key={vehicle.id} ImageURL={vehicle.ImageURL} vehicleMake={vehicle.vehicleMake} vehicleModel={vehicle.vehicleModel} selectVehicle={() => setSelectedVehicle(vehicle)} deleteHandler={() => deleteHandler(vehicle.id)} /> ))} </Grid>
This is my filter function:
const vehiclesData = useMemo(() => { let computedVehicles = vehicles; if (searchVehicle) { computedVehicles = computedVehicles.filter((vehicle) => vehicle.vehicleMake.toLowerCase().includes(searchVehicle.toLowerCase()) ); } setTotalVehicles(computedVehicles.length); return computedVehicles.slice( (currentPage - 1) * vehiclesPerPage, (currentPage - 1) * vehiclesPerPage + vehiclesPerPage );
As I wrote before, I want my vehicles to render automatically by make or model, not when I click on the page number in the pagination.
Your sorting method should be like this
Your filter function should be like this
Basically, once onSelectChange runs, you update the vehicle status and then usememo should run again, so we add the dependent vehicle to it