From bff48f0397c77a222e5957b93c02bff0fff9d41c Mon Sep 17 00:00:00 2001 From: SethBurkart123 Date: Wed, 21 May 2025 00:01:36 +1000 Subject: [PATCH] feat: boosted active subjects + visual indication of inactive subjects --- .../src/components/items/SubjectItem.svelte | 2 +- .../src/indexing/jobs/subjects.ts | 90 ++++++++++--------- .../globalSearch/src/search/searchUtils.ts | 12 +++ 3 files changed, 61 insertions(+), 43 deletions(-) diff --git a/src/plugins/built-in/globalSearch/src/components/items/SubjectItem.svelte b/src/plugins/built-in/globalSearch/src/components/items/SubjectItem.svelte index fa71b8db..4637c68c 100755 --- a/src/plugins/built-in/globalSearch/src/components/items/SubjectItem.svelte +++ b/src/plugins/built-in/globalSearch/src/components/items/SubjectItem.svelte @@ -17,7 +17,7 @@ import type { IndexItem } from '../../indexing/types'; {isSelected ? 'bg-zinc-900/5 dark:bg-white/10 text-zinc-900 dark:text-white' : 'hover:bg-zinc-500/5 dark:hover:bg-white/5 text-zinc-800 dark:text-zinc-200'}" onclick={onclick} > -
+
{item.metadata?.type === 'assessments' ? '\ueac3' : '\ueb4d'}
diff --git a/src/plugins/built-in/globalSearch/src/indexing/jobs/subjects.ts b/src/plugins/built-in/globalSearch/src/indexing/jobs/subjects.ts index e480db49..b2dd6feb 100755 --- a/src/plugins/built-in/globalSearch/src/indexing/jobs/subjects.ts +++ b/src/plugins/built-in/globalSearch/src/indexing/jobs/subjects.ts @@ -25,12 +25,10 @@ export const subjectsJob: Job = { score += 20; // Boost score for direct subject matches } - // Boost for active subjects - if (item.metadata?.isActive) { + if (item.metadata.isActive) { score += 15; // Boost for active subjects - console.log("active subject:", item.metadata.subjectName); } else { - console.log("inactive subject:", item.metadata.subjectName); + score -= 50; // Penalty for inactive subjects } return score; @@ -83,45 +81,53 @@ export const subjectsJob: Job = { const isActive = semester.active === 1; // Create two items for each subject - one for assessments and one for course - items.push( - { - id: `${id}-assessments`, - text: `${subject.title} Assessments`, - category: "subjects", - content: `View assessments for ${subject.title} (${semester.description})`, - dateAdded: Date.now(), - metadata: { - subjectId: subject.metaclass, - subjectName: subject.title, - subjectCode: subject.code, - programme: subject.programme, - semesterCode: semester.code, - semesterDescription: semester.description, - type: "assessments", - isActive - }, - actionId: "subjectassessment", - renderComponentId: "subject", + const assessmentsItem = { + id: `${id}-assessments`, + text: `${subject.title} Assessments`, + category: "subjects", + content: `View assessments for ${subject.title} (${semester.description})`, + dateAdded: Date.now(), + metadata: { + subjectId: subject.metaclass, + subjectName: subject.title, + subjectCode: subject.code, + programme: subject.programme, + semesterCode: semester.code, + semesterDescription: semester.description, + type: "assessments", + isActive }, - { - id: `${id}-course`, - text: `${subject.title} Course`, - category: "subjects", - content: `View course content for ${subject.title} (${semester.description})`, - dateAdded: Date.now(), - metadata: { - subjectId: subject.metaclass, - subjectName: subject.title, - subjectCode: subject.code, - programme: subject.programme, - semesterCode: semester.code, - semesterDescription: semester.description, - type: "course", - isActive - }, - actionId: "subjectcourse", - renderComponentId: "subject", - } + actionId: "subjectassessment", + renderComponentId: "subject", + }; + + const courseItem = { + id: `${id}-course`, + text: `${subject.title} Course`, + category: "subjects", + content: `View course content for ${subject.title} (${semester.description})`, + dateAdded: Date.now(), + metadata: { + subjectId: subject.metaclass, + subjectName: subject.title, + subjectCode: subject.code, + programme: subject.programme, + semesterCode: semester.code, + semesterDescription: semester.description, + type: "course", + isActive + }, + actionId: "subjectcourse", + renderComponentId: "subject", + }; + + // Log all subject items during indexing + console.log('Indexing subject:', assessmentsItem.text, assessmentsItem.metadata.isActive); + console.log('Indexing subject:', courseItem.text, courseItem.metadata.isActive); + + items.push( + assessmentsItem, + courseItem ); } } diff --git a/src/plugins/built-in/globalSearch/src/search/searchUtils.ts b/src/plugins/built-in/globalSearch/src/search/searchUtils.ts index 1b286875..3041829e 100644 --- a/src/plugins/built-in/globalSearch/src/search/searchUtils.ts +++ b/src/plugins/built-in/globalSearch/src/search/searchUtils.ts @@ -167,6 +167,18 @@ export async function performSearch( // Add dynamic results first dynamicResults.forEach((r) => { seenIds.add(r.id); + + if (r.type === "dynamic") { + const dynamicItem = r.item as IndexItem; + const job = jobs[dynamicItem.category]; + if (job && typeof job.boostCriteria === 'function') { + const boost = job.boostCriteria(dynamicItem, query); + if (boost) { + r.score += boost; // Add the boost to the score + } + } + } + const vectorMatch = vectorResults.find((v) => v.object.id === r.id); if (vectorMatch) { // If we found it in both searches, combine the scores