aboutsummaryrefslogtreecommitdiff
path: root/source/library/state/history-logic.ts
diff options
context:
space:
mode:
Diffstat (limited to 'source/library/state/history-logic.ts')
-rw-r--r--source/library/state/history-logic.ts20
1 files changed, 20 insertions, 0 deletions
diff --git a/source/library/state/history-logic.ts b/source/library/state/history-logic.ts
new file mode 100644
index 0000000..5fce766
--- /dev/null
+++ b/source/library/state/history-logic.ts
@@ -0,0 +1,20 @@
+
+
+
+/*** EXPORT ------------------------------------------- ***/
+
+export type HistoryEvictable = {
+ favorite: boolean;
+ timestamp: number;
+};
+
+export function evict<T extends HistoryEvictable>(entries: T[], max: number): T[] {
+ if (entries.length <= max)
+ return entries;
+
+ const favorites = entries.filter((e) => e.favorite);
+ const regular = entries.filter((e) => !e.favorite);
+ const keepRegular = regular.slice(0, Math.max(0, max - favorites.length));
+
+ return [...favorites, ...keepRegular].sort((a, b) => b.timestamp - a.timestamp);
+}