From 22afee0e16bb8f108ce8f78429b07bba0850793d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Ml=C3=A1dek?= Date: Wed, 23 Mar 2022 13:39:06 +0100 Subject: [PATCH] [ui] rudimentary frecency display on Home --- webui/src/views/Home.svelte | 56 +++++++++++++++++++++++++++++-------- 1 file changed, 44 insertions(+), 12 deletions(-) diff --git a/webui/src/views/Home.svelte b/webui/src/views/Home.svelte index d5fa9e6..04c408a 100644 --- a/webui/src/views/Home.svelte +++ b/webui/src/views/Home.svelte @@ -19,11 +19,43 @@ .sort(([_, i1], [__, i2]) => i1.localeCompare(i2)); })(); - const { result: lastVisitedQuery } = query(`(matches ? "LAST_VISITED" ? )`); - $: lastVisited = ($lastVisitedQuery?.entries || []) - .filter((e) => e.value.t == "Number") - .sort((a, b) => (b.value.c as number) - (a.value.c as number)) - .slice(0, 25); + const { result: frecencyQuery } = query( + `(matches ? (in "LAST_VISITED" "NUM_VISITED") ? )` + ); + let frecent = []; + $: { + const entries = ($frecencyQuery?.entries || []).filter( + (e) => e.value.t == "Number" + ); + + const recentEntities = entries + .filter((e) => e.attribute == "LAST_VISITED") + .sort((a, b) => (b.value.c as number) - (a.value.c as number)) + .map((e) => e.entity); + + const frequentEntities = entries + .filter((e) => e.attribute == "NUM_VISITED") + .sort((a, b) => (b.value.c as number) - (a.value.c as number)) + .map((e) => e.entity); + + function indexOfDefault(arr: T[], el: T, _default: number): number { + const index = arr.indexOf(el); + return index === -1 ? _default : index; + } + + const result = entries.filter((e) => e.attribute == "LAST_VISITED"); + result.sort((a, b) => { + const aRank = + indexOfDefault(recentEntities, a.entity, 9999) + + indexOfDefault(frequentEntities, a.entity, 9999); + const bRank = + indexOfDefault(recentEntities, b.entity, 9999) + + indexOfDefault(frequentEntities, b.entity, 9999); + return aRank - bRank; + }); + + frecent = result.slice(0, 25); + } const { result: latestQuery } = query(`(matches ? "ADDED" ?)`); $: latest = ($latestQuery?.entries || []) @@ -59,15 +91,15 @@ {/await} - {#if lastVisited.length || $lastVisitedQuery === undefined} -
-

Last visited

- {#if $lastVisitedQuery == undefined} + {#if frecent.length || $frecencyQuery === undefined} +
+

Frequently or recently visited

+ {#if $frecencyQuery == undefined} {:else} {/if} @@ -111,14 +143,14 @@ display: flex; flex-direction: column; } - + h1, h2 { text-align: center; } .latest, - .lastVisited { + .frecent { margin: 2rem; }