import { DrinkComposite, isDrinkWithContainers, isDrinkWithContainersAndHistory } 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); } function totalPopularity(n:DrinkComposite) : number{ if(isDrinkWithContainersAndHistory(n)){ let total = 0; n.containers.map((container) =>{ total += container.checkouts.length; }); return total; } return 0; } function sortPopularity(n1:DrinkComposite, n2:DrinkComposite) : number{ return totalPopularity(n2) - totalPopularity(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; } if(searchParams.has("sort", "popular")){ callback = sortPopularity; } var sortedArray: DrinkComposite[] = searchResult.sort(callback); return sortedArray; }