Browse Source

Merge pull request #14002 from silentoplayz/search-by-user-or-email

feat: enhance search with username/email search across workspace pages
Tim Jaeryang Baek 4 months ago
parent
commit
349b0ca0b7

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

@@ -38,10 +38,20 @@
 	let knowledgeBases = [];
 	let filteredItems = [];
 
-	$: if (knowledgeBases) {
+	$: if (knowledgeBases.length > 0) {
+		// Added a check for non-empty array, good practice
 		fuse = new Fuse(knowledgeBases, {
-			keys: ['name', 'description']
+			keys: [
+				'name',
+				'description',
+				'user.name', // Ensures Fuse looks into item.user.name
+				'user.email' // Ensures Fuse looks into item.user.email
+			],
+			threshold: 0.0 // You might want to adjust this. Lower is more strict. Default is 0.6.
+			// 0.0 is exact match.
 		});
+	} else {
+		fuse = null; // Reset fuse if knowledgeBases is empty
 	}
 
 	$: if (fuse) {

+ 9 - 3
src/lib/components/workspace/Models.svelte

@@ -51,9 +51,15 @@
 	let group_ids = [];
 
 	$: if (models) {
-		filteredModels = models.filter(
-			(m) => searchValue === '' || m.name.toLowerCase().includes(searchValue.toLowerCase())
-		);
+		filteredModels = models.filter((m) => {
+			if (searchValue === '') return true;
+			const lowerSearchValue = searchValue.toLowerCase();
+			return (
+				(m.name || '').toLowerCase().includes(lowerSearchValue) ||
+				(m.user?.name || '').toLowerCase().includes(lowerSearchValue) || // Search by user name
+				(m.user?.email || '').toLowerCase().includes(lowerSearchValue) // Search by user email
+			);
+		});
 	}
 
 	let searchValue = '';

+ 10 - 1
src/lib/components/workspace/Prompts.svelte

@@ -37,7 +37,16 @@
 	let deletePrompt = null;
 
 	let filteredItems = [];
-	$: filteredItems = prompts.filter((p) => query === '' || p.command.includes(query));
+	$: filteredItems = prompts.filter((p) => {
+		if (query === '') return true;
+		const lowerQuery = query.toLowerCase();
+		return (
+			(p.title || '').toLowerCase().includes(lowerQuery) ||
+			(p.command || '').toLowerCase().includes(lowerQuery) ||
+			(p.user?.name || '').toLowerCase().includes(lowerQuery) ||
+			(p.user?.email || '').toLowerCase().includes(lowerQuery)
+		);
+	});
 
 	const shareHandler = async (prompt) => {
 		toast.success($i18n.t('Redirecting you to Open WebUI Community'));

+ 10 - 6
src/lib/components/workspace/Tools.svelte

@@ -52,12 +52,16 @@
 	let tools = [];
 	let filteredItems = [];
 
-	$: filteredItems = tools.filter(
-		(t) =>
-			query === '' ||
-			t.name.toLowerCase().includes(query.toLowerCase()) ||
-			t.id.toLowerCase().includes(query.toLowerCase())
-	);
+	$: filteredItems = tools.filter((t) => {
+		if (query === '') return true;
+		const lowerQuery = query.toLowerCase();
+		return (
+			(t.name || '').toLowerCase().includes(lowerQuery) ||
+			(t.id || '').toLowerCase().includes(lowerQuery) ||
+			(t.user?.name || '').toLowerCase().includes(lowerQuery) || // Search by user name
+			(t.user?.email || '').toLowerCase().includes(lowerQuery) // Search by user email
+		);
+	});
 
 	const shareHandler = async (tool) => {
 		const item = await getToolById(localStorage.token, tool.id).catch((error) => {