Files
whsfund/src/students.js
2026-03-06 04:54:20 -04:00

46 lines
1.1 KiB
JavaScript

import {
collection,
query,
where,
orderBy,
limit,
getDocs,
} from 'firebase/firestore';
import { db } from './firebase.js';
const studentsRef = collection(db, 'students');
/**
* Search students by name (case-insensitive prefix match).
* Firestore doesn't support native full-text search, so we use a
* `nameLower` field stored at write-time and do a range query.
*
* Expected document structure:
* { name: "John Smith", nameLower: "john smith", classYear: "1985" }
*/
export async function searchStudents(searchTerm) {
const term = searchTerm.trim().toLowerCase();
if (!term) return [];
const end = term + '\uf8ff'; // Unicode high character for prefix range
const q = query(
studentsRef,
where('nameLower', '>=', term),
where('nameLower', '<=', end),
orderBy('nameLower'),
limit(50)
);
try {
const snapshot = await getDocs(q);
const results = [];
snapshot.forEach((doc) => {
results.push({ id: doc.id, ...doc.data() });
});
return results;
} catch (error) {
console.error('Error searching students:', error);
return [];
}
}