Skip to content

Commit 5c2aebb

Browse files
committed
Add bio/description filter option to search
- Add 'Description' option to search criteria dropdown - Implement bio search logic with fuzzy matching and fallback - Include bio matches in relevance sorting algorithm - Support searching through user descriptions/bios - Maintain consistent search experience across all filter types
1 parent 63e7e30 commit 5c2aebb

2 files changed

Lines changed: 41 additions & 11 deletions

File tree

src/Homepage.jsx

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,28 @@ function App() {
280280
});
281281
}
282282
}
283+
} else if (criteria === 'bio') {
284+
// Enhanced bio/description search with fuzzy matching
285+
if (fuse) {
286+
const bioFuse = new Fuse(combinedData, {
287+
keys: ['bio'],
288+
threshold: 0.3,
289+
includeScore: true,
290+
});
291+
const fuseResults = bioFuse.search(value);
292+
filteredResults = fuseResults.map((result) => result.item);
293+
294+
// Fallback to exact match if no fuzzy results
295+
if (filteredResults.length === 0) {
296+
filteredResults = combinedData.filter((user) => {
297+
return normalizeString(user.bio || '').includes(normalizeString(value));
298+
});
299+
}
300+
} else {
301+
filteredResults = combinedData.filter((user) => {
302+
return normalizeString(user.bio || '').includes(normalizeString(value));
303+
});
304+
}
283305
} else if (criteria === 'location') {
284306
// Enhanced location search with fuzzy matching
285307
if (fuse) {
@@ -399,6 +421,13 @@ function App() {
399421
if (aSocialExact && !bSocialExact) return -1;
400422
if (!aSocialExact && bSocialExact) return 1;
401423

424+
// Check for exact matches in bio/description
425+
const aBioExact = normalizeString(a.bio || '').includes(searchValue);
426+
const bBioExact = normalizeString(b.bio || '').includes(searchValue);
427+
428+
if (aBioExact && !bBioExact) return -1;
429+
if (!aBioExact && bBioExact) return 1;
430+
402431
// Finally, sort alphabetically by name
403432
return a.name.localeCompare(b.name);
404433
});

src/components/Search/Search.jsx

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -97,17 +97,7 @@ function Search({ onSearch }) {
9797
</a>
9898
</StyledWrapper>
9999
<div className="relative flex items-center justify-end space-x-4">
100-
<select
101-
className="focus:border-primaryFocus focus:bg-primaryLight dark:focus:border-secondaryFocus dark:focus:bg-secondaryLight h-12 rounded-lg border-2 border-borderSecondary bg-primaryColor px-4 py-3 text-base text-secondaryColor outline-none dark:border-borderColor dark:bg-secondaryColor dark:text-white"
102-
value={searchCriteria}
103-
onChange={handleCriteriaChange}
104-
>
105-
<option value="all">All Fields</option>
106-
<option value="name">Name</option>
107-
<option value="location">Location</option>
108-
<option value="skill">Skills</option>
109-
</select>
110-
<div className="relative w-full">
100+
<div className="relative flex-[3]">
111101
<input
112102
className="focus:border-primaryFocus focus:bg-primaryLight dark:focus:border-secondaryFocus dark:focus:bg-secondaryLight h-12 w-full rounded-lg border-2 border-borderSecondary bg-primaryColor px-4 py-3 pr-20 font-spaceMono text-base text-secondaryColor outline-none dark:border-borderColor dark:bg-secondaryColor dark:text-white"
113103
ref={searchInput}
@@ -136,6 +126,17 @@ function Search({ onSearch }) {
136126
icon={faMicrophone}
137127
/> */}
138128
</div>
129+
<select
130+
className="focus:border-primaryFocus focus:bg-primaryLight dark:focus:border-secondaryFocus dark:focus:bg-secondaryLight h-12 flex-1 rounded-lg border-2 border-borderSecondary bg-primaryColor px-4 py-3 text-base text-secondaryColor outline-none dark:border-borderColor dark:bg-secondaryColor dark:text-white"
131+
value={searchCriteria}
132+
onChange={handleCriteriaChange}
133+
>
134+
<option value="all">All Fields</option>
135+
<option value="name">Name</option>
136+
<option value="location">Location</option>
137+
<option value="skill">Skills</option>
138+
<option value="bio">Description</option>
139+
</select>
139140
</div>
140141

141142
<VoiceSearch setVoiceText={setVoiceText} isListening={isListening} setIsListening={setIsListening} />

0 commit comments

Comments
 (0)