Browse Source

refac: knowledge fuzzy search

Timothy J. Baek 7 months ago
parent
commit
9c4b55c86a
1 changed files with 18 additions and 2 deletions
  1. 18 2
      src/lib/components/workspace/Knowledge.svelte

+ 18 - 2
src/lib/components/workspace/Knowledge.svelte

@@ -1,4 +1,6 @@
 <script lang="ts">
 <script lang="ts">
+	import Fuse from 'fuse.js';
+
 	import dayjs from 'dayjs';
 	import dayjs from 'dayjs';
 	import relativeTime from 'dayjs/plugin/relativeTime';
 	import relativeTime from 'dayjs/plugin/relativeTime';
 	dayjs.extend(relativeTime);
 	dayjs.extend(relativeTime);
@@ -24,8 +26,16 @@
 	let selectedItem = null;
 	let selectedItem = null;
 	let showDeleteConfirm = false;
 	let showDeleteConfirm = false;
 
 
-	let filteredItems;
-	$: filteredItems = $knowledge.filter((item) => query === '' || item.name.includes(query));
+	let fuse = null;
+
+	let filteredItems = [];
+	$: if (fuse) {
+		filteredItems = query
+			? fuse.search(query).map((e) => {
+					return e.item;
+				})
+			: $knowledge;
+	}
 
 
 	const deleteHandler = async (item) => {
 	const deleteHandler = async (item) => {
 		const res = await deleteKnowledgeById(localStorage.token, item.id).catch((e) => {
 		const res = await deleteKnowledgeById(localStorage.token, item.id).catch((e) => {
@@ -40,6 +50,12 @@
 
 
 	onMount(async () => {
 	onMount(async () => {
 		knowledge.set(await getKnowledgeItems(localStorage.token));
 		knowledge.set(await getKnowledgeItems(localStorage.token));
+
+		knowledge.subscribe((value) => {
+			fuse = new Fuse(value, {
+				keys: ['name', 'description']
+			});
+		});
 	});
 	});
 </script>
 </script>