# 09 Paginación Firestore

Agregaremos algunas mejoras a nuestro proyecto actual

CURSO EN UDEMY OFERTA!

Aprende desde cero a trabajar con React.js y Firebase aquí: http://curso-react-js-udemy.bluuweb.cl/ (opens new window) Nos vemos en clases!

# Ordenar y limitar datos

https://firebase.google.com/docs/firestore/query-data/order-limit-data?authuser=0 (opens new window)

const [ultimo, setUltimo] = React.useState(null)
const [desactivar, setDesactivar] = React.useState(false)
const data = await db.collection(props.user.uid)
    .limit(2)
    .orderBy('fecha')
    .get()

setUltimo(data.docs[data.docs.length - 1])

const arrayData = data.docs.map(doc => ({ id: doc.id, ...doc.data() }))
setTareas(arrayData)

Agregar boton siguiente

<button 
    className="btn btn-block btn-sm mt-2 btn-info"
    disabled={desactivar}
    onClick={() => siguiente()}
>
    Más tareas...
</button>

Acción siguiente

const siguiente = async () => {
    setDesactivar(true)
    try {
        const data = await db.collection(props.user.uid)
            .limit(2)
            .orderBy('fecha')
            .startAfter(ultimo)  
            .get()
        
        setUltimo(data.docs[data.docs.length - 1])

        const arrayData = data.docs.map(doc => ({ id: doc.id, ...doc.data() }))
        if(arrayData.length !== 0){
            setTareas([...tareas, ...arrayData])
        }

        const query = await db.collection(props.user.uid)
            .limit(2)
            .orderBy('fecha')
            .startAfter(data.docs[data.docs.length - 1])  
            .get()

        if(query.empty){
            console.log('no hay más...')
            setDesactivar(true)
        }else{
            setDesactivar(false)
        }

    } catch (error) {
        console.log(error)
    }
}

Modificar 'obtenerDatos' para desactivar botón

try {
    setDesactivar(true)
    const data = await db.collection(props.user.uid)
        .limit(2)
        .orderBy('fecha')
        .get()

    setUltimo(data.docs[data.docs.length - 1])

    const arrayData = data.docs.map(doc => ({ id: doc.id, ...doc.data() }))
    setTareas(arrayData)

    const query = await db.collection(props.user.uid)
        .limit(2)
        .orderBy('fecha')
        .startAfter(data.docs[data.docs.length - 1])  
        .get()
    if(query.empty){
        setDesactivar(true)
    }else{
        setDesactivar(false)
    }
    
} catch (error) {
    console.log(error)
}
Last Updated: 6/4/2022, 12:52:28