69 lines
1.6 KiB
TypeScript
69 lines
1.6 KiB
TypeScript
import { DrinkComposite, isDrinkWithContainers } from "./types";
|
|
|
|
function sortName(n1:DrinkComposite, n2:DrinkComposite) : number{
|
|
if (n1.name > n2.name) {
|
|
return 1;
|
|
}
|
|
if (n1.name < n2.name) {
|
|
return -1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
function sortAbvLowHigh(n1:DrinkComposite, n2:DrinkComposite) : number{
|
|
return n1.abv - n2.abv;
|
|
}
|
|
|
|
function sortAbvHighLow(n1:DrinkComposite, n2:DrinkComposite) : number{
|
|
return n2.abv - n1.abv;
|
|
}
|
|
|
|
function totalInventory(n:DrinkComposite) : number{
|
|
|
|
if(isDrinkWithContainers(n)){
|
|
let total = 0;
|
|
n.containers.map((container) =>{
|
|
total += container.inventory;
|
|
});
|
|
return total;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
function sortInventoryLowHigh(n1:DrinkComposite, n2:DrinkComposite) : number{
|
|
return totalInventory(n1) - totalInventory(n2);
|
|
}
|
|
|
|
function sortInventoryHighLow(n1:DrinkComposite, n2:DrinkComposite) : number{
|
|
return totalInventory(n2) - totalInventory(n1);
|
|
}
|
|
|
|
export function sortDrinksFromSearch(searchParams: URLSearchParams, searchResult: DrinkComposite[]) : DrinkComposite[] {
|
|
|
|
var callback = sortName;
|
|
|
|
if(searchParams.has("sort", "name")){
|
|
callback = sortName;
|
|
}
|
|
|
|
if(searchParams.has("sort", "abv-asc")){
|
|
callback = sortAbvLowHigh;
|
|
}
|
|
|
|
if(searchParams.has("sort", "abv-desc")){
|
|
callback = sortAbvHighLow;
|
|
}
|
|
|
|
if(searchParams.has("sort", "inv-asc")){
|
|
callback = sortInventoryLowHigh;
|
|
}
|
|
|
|
if(searchParams.has("sort", "inv-desc")){
|
|
callback = sortInventoryHighLow;
|
|
}
|
|
|
|
var sortedArray: DrinkComposite[] = searchResult.sort(callback);
|
|
|
|
return sortedArray;
|
|
} |