diff --git a/src/lib/cleanString.ts b/src/lib/cleanString.ts new file mode 100644 index 0000000..05dc2ae --- /dev/null +++ b/src/lib/cleanString.ts @@ -0,0 +1,9 @@ +/** remove emojis and whitespace */ +export function cleanString(string: string): string { + return string + .replace( + /[\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDFFF]|[\u2580-\u27BF]|\uD83E[\uDD10-\uDDFF]| /g, + '' + ) + .trim() +} diff --git a/src/lib/data/items.ts b/src/lib/data/items.ts index ac906a4..2a33b34 100644 --- a/src/lib/data/items.ts +++ b/src/lib/data/items.ts @@ -1,3 +1,4 @@ +import { cleanString } from '$lib/cleanString' import { db } from '$lib/firebase' import { calculateKcalPer100FromItems } from '$lib/kcal' import { getStorage, setStorage } from '$lib/localStorage' @@ -213,3 +214,40 @@ export interface Portion { // } // return items; // } + +export enum ItemSortModes { + updatedAt = 'Recently Updated', + createdAt = 'Creation Time', + label = 'Label', + brand = 'Brand', + recentItems = 'Recent Items', +} + +export function getSortedItems(mode: ItemSortModes) { + const $items = get(items) + const collator = new Intl.Collator() + console.log('sorting by ...' + mode) + switch (mode) { + case ItemSortModes.updatedAt: + return $items.sort((a, b) => (b.updatedAt || 0) - (a.updatedAt || 0)) + case ItemSortModes.createdAt: + return $items.sort((a, b) => (b.createdAt || 0) - (a.createdAt || 0)) + case ItemSortModes.label: + return $items.sort(({ label: a }, { label: b }) => { + const cleanA = cleanString(a) + const cleanB = cleanString(b) + return collator.compare(cleanA, cleanB) + }) + case ItemSortModes.brand: + return $items.sort(({ brand: a }, { brand: b }) => { + const cleanA = cleanString(a) + const cleanB = cleanString(b) + return collator.compare(cleanA, cleanB) + }) + case ItemSortModes.recentItems: + return get(recentItems) + default: + console.warn('No sort mode for ' + mode) + return $items + } +} diff --git a/src/lib/views/ItemDrawer/SavedItems.svelte b/src/lib/views/ItemDrawer/SavedItems.svelte index 46ea0b0..13b954f 100644 --- a/src/lib/views/ItemDrawer/SavedItems.svelte +++ b/src/lib/views/ItemDrawer/SavedItems.svelte @@ -1,7 +1,12 @@ {#if !showQuickSnacks} @@ -57,25 +35,7 @@ Search {#if !search} - + {/if} {#if sortedItems}