Files
beer-inventory/app/models/drinks.sort.server.ts
T

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;
}