Me pregunto si es posible crear consultas de firebase dinámicamente, en este momento estoy usando una variable para determinar si startAfter debe incluirse o no.
Como puede ver, esto está causando un código duplicado, solo para una variable
export async function fetchUserPhotosPaginated(userId: string, lastUserPhoto?: QueryDocumentSnapshot): Promise<QuerySnapshot> { if (lastUserPhoto) { return await getDocs(query( collection(db, 'photos'), orderBy('createdAt', 'desc'), startAfter(lastUserPhoto), where('user.id', '==', userId), limit(5) )) } return await getDocs(query( collection(db, 'photos'), orderBy('createdAt', 'desc'), where('user.id', '==', userId), limit(5) )) }startAfter(null) , esto no dio el efecto deseadolet q = query(...) para luego actualizar esa consulta usando q = q.startAfter(...) esto tampoco funcionóEl segundo método para agregar startAfter condicionalmente es correcto, pero su sintaxis para actualizar la consulta no lo es. Intente refactorizar la función como se muestra a continuación:
export async function fetchUserPhotosPaginated(userId: string, lastUserPhoto?: QueryDocumentSnapshot): Promise<QuerySnapshot> { // Initial query let q = query(collection(db, 'posts'), orderBy('createdAt', 'desc')) // Add startAfter is lastUserPhoto is present if (lastUserPhoto) q = query(q, startAfter(lastUserPhoto)); // Add remaining conditions q = query(q, where('user.id', '==', userId), limit(5)); return await getDocs(q) }También puede agregar todas las condiciones en una matriz como se explica en la siguiente respuesta:
Cláusula condicional where de Firestore usando Modular SDK v9