JSFiddle - React, Tailwind, and code Playground
by kenwals
HTML
<div class="col-12 col-md-6 my-auto order-md-last d-flex justify-content-center justify-content-md-end">
<div class="sort-select-wrapper w-50">
<select id="sort-selector" class="custom-select custom-select-sm rounded-0 border border-{% if current_sorting != 'None_None' %}info{% else %}black{% endif %}">
<option value="reset" {% if current_sorting == 'None_None' %}selected{% endif %}>Sort by...</option>
<option value="price_asc" {% if current_sorting == 'price_asc' %}selected{% endif %}>Price (low to high)</option>
<option value="price_desc" {% if current_sorting == 'price_desc' %}selected{% endif %}>Price (high to low)</option>
<option value="rating_asc" {% if current_sorting == 'rating_asc' %}selected{% endif %}>Rating (low to high)</option>
<option value="rating_desc" {% if current_sorting == 'rating_desc' %}selected{% endif %}>Rating (high to low)</option>
<option value="name_asc" {% if current_sorting == 'name_asc' %}selected{% endif %}>Name (A-Z)</option>
<option value="name_desc" {% if current_sorting == 'name_desc' %}selected{% endif %}>Name (Z-A)</option>
<option value="category_asc" {% if current_sorting == 'category_asc' %}selected{% endif %}>Category (A-Z)</option>
<option value="category_desc" {% if current_sorting == 'category_desc' %}selected{% endif %}>Category (Z-A)</option>
</select>
</div>
</div>
JavaScript
document.querySelector('#sort-selector').addEventListener('change', (event) => {
var selector = document.querySelector('#sort-selector');
var currentUrl = new URL(window.location);
var selectedVal = selector.value;
if(selectedVal != "reset"){
var sort = selectedVal.split("_")[0];
var direction = selectedVal.split("_")[1];
currentUrl.searchParams.set("sort", sort);
currentUrl.searchParams.set("direction", direction);
window.location.replace(currentUrl);
} else {
currentUrl.searchParams.delete("sort");
currentUrl.searchParams.delete("direction");
window.location.replace(currentUrl);
}
})