react-firebase-pagination 1.1.14 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +86 -78
- package/dist/App.d.ts +30 -0
- package/dist/App.d.ts.map +1 -0
- package/dist/App.js +174 -0
- package/dist/App.js.map +1 -0
- package/dist/{esm/index.d.ts → index.d.ts} +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js.map +1 -0
- package/package.json +70 -55
- package/dist/cjs/App.d.ts +0 -23
- package/dist/cjs/App.js +0 -83
- package/dist/cjs/App.js.map +0 -1
- package/dist/cjs/index.d.ts +0 -2
- package/dist/cjs/index.js +0 -6
- package/dist/cjs/index.js.map +0 -1
- package/dist/esm/App.d.ts +0 -23
- package/dist/esm/App.js +0 -81
- package/dist/esm/App.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- /package/dist/{esm/index.js → index.js} +0 -0
package/README.md
CHANGED
|
@@ -1,78 +1,86 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
|
27
|
-
|
|
|
28
|
-
|
|
|
29
|
-
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
|
37
|
-
|
|
|
38
|
-
|
|
|
39
|
-
|
|
|
40
|
-
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
|
48
|
-
|
|
|
49
|
-
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
```jsx
|
|
59
|
-
import usePagination from 'react-firebase-pagination'
|
|
60
|
-
import { query, orderBy, collection } from 'firebase/firestore'
|
|
61
|
-
import db from './your/database/path'
|
|
62
|
-
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
1
|
+
[](https://badge.fury.io/js/react-firebase-pagination)
|
|
2
|
+
|
|
3
|
+
# react-firebase-pagination
|
|
4
|
+
|
|
5
|
+
A React Hook that makes it easy to paginate Firestore collections.
|
|
6
|
+
This hook provides _cumulative_ pagination and maintains references to previous documents, so it might not be suitable for large document sets.
|
|
7
|
+
|
|
8
|
+
## Support for Firebase 9
|
|
9
|
+
|
|
10
|
+
support for Firebase 9 and are backwards _incompatible_ with previous versions of Firebase.
|
|
11
|
+
|
|
12
|
+
## Install
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
npm install react-firebase-pagination
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
OR
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
yarn add react-firebase-pagination
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### Options
|
|
25
|
+
|
|
26
|
+
| **prop** | **Type** | **Default** | **description** | **Required** |
|
|
27
|
+
| ---------- | --------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ |
|
|
28
|
+
| query | `Query` | — | The Firestore query. Safe to create inline each render; identity is driven by `queryKey`. | ✔ |
|
|
29
|
+
| queryKey | `unknown[]` | — | Stable key for the logical query (sorts, filters, collection). Change it when the query meaning changes — pagination resets to page 1. | ✔ |
|
|
30
|
+
| pageSize | `Number` | 10 | The number of items per page. | |
|
|
31
|
+
| pageByPage | `Boolean` | false | When this option is True, data is loaded page by page like Google search, and when it's not, it loads data on a single page and appends new data on the bottom of current data like a Facebook feed. | |
|
|
32
|
+
| liveUpdate | `Boolean` | false | Add Firebase snapshot listener to update data live | |
|
|
33
|
+
|
|
34
|
+
### State
|
|
35
|
+
|
|
36
|
+
| **prop** | **value** | **description** |
|
|
37
|
+
| ----------- | ---------- | ----------------------------------------------------------------------------------------------------------- |
|
|
38
|
+
| loading | `Boolean` | Is true when a page is loading. |
|
|
39
|
+
| data | `Object` | [Data Object](#data-object-contain) |
|
|
40
|
+
| getNext | `Function` | W'll render the next page when called. (Take no arguments) |
|
|
41
|
+
| getPrevious | `Function` | W'll render the previous page when called. (Take no arguments and work only in [pageByPage](#options) mode) |
|
|
42
|
+
| hasNext | `Boolean` | It's true when the next page has data. |
|
|
43
|
+
| hasPrevious | `Boolean` | It's true when a previous page has data. (Work only in [pageByPage](#options) mode) |
|
|
44
|
+
|
|
45
|
+
### Data Object Contain
|
|
46
|
+
|
|
47
|
+
| **prop** | **value** | **description** |
|
|
48
|
+
| ----------- | ----------- | -------------------------------------------------------------------------------------------------- |
|
|
49
|
+
| docs | `Documents` | Document Array. |
|
|
50
|
+
| totalDocs | `Number` | Total Document count. |
|
|
51
|
+
| totalPages | `Number` | Total Page count. |
|
|
52
|
+
| currentPage | `Number` | Current Page Number in [pageByPage](#options) mode or how may time's data load on the current page |
|
|
53
|
+
|
|
54
|
+
## Example Use
|
|
55
|
+
|
|
56
|
+
This is an example of a [Firestore](https://firebase.google.com/docs/firestore/) query. You can rebuild `query(...)` every render — pass a `queryKey` so the hook only resets when sorts/filters actually change:
|
|
57
|
+
|
|
58
|
+
```jsx
|
|
59
|
+
import usePagination from 'react-firebase-pagination'
|
|
60
|
+
import { query, orderBy, collection } from 'firebase/firestore'
|
|
61
|
+
import db from './your/database/path'
|
|
62
|
+
|
|
63
|
+
const App = () => {
|
|
64
|
+
const [sort, setSort] = useState('newest') // 'newest' | 'oldest' | ...
|
|
65
|
+
|
|
66
|
+
const mainQuery = query(
|
|
67
|
+
collection(db, '[collection]'),
|
|
68
|
+
sort === 'oldest'
|
|
69
|
+
? orderBy('created_timestamp', 'asc')
|
|
70
|
+
: orderBy('created_timestamp', 'desc'),
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
const { getNext, getPrevious, data, loading } = usePagination({
|
|
74
|
+
pageSize: 10,
|
|
75
|
+
pageByPage: true,
|
|
76
|
+
query: mainQuery,
|
|
77
|
+
queryKey: ['[collection]', sort],
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
if (loading) {
|
|
81
|
+
return <LoadingComponent />
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
...
|
|
85
|
+
}
|
|
86
|
+
```
|
package/dist/App.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Query, QueryDocumentSnapshot } from 'firebase/firestore';
|
|
2
|
+
type data = {
|
|
3
|
+
totalDocs: number;
|
|
4
|
+
totalPages: number;
|
|
5
|
+
currentPage: number;
|
|
6
|
+
docs: QueryDocumentSnapshot[];
|
|
7
|
+
};
|
|
8
|
+
type hookReturnValue = {
|
|
9
|
+
data: data;
|
|
10
|
+
error?: Error;
|
|
11
|
+
loading: boolean;
|
|
12
|
+
getNext: () => void;
|
|
13
|
+
getPrevious: () => void;
|
|
14
|
+
hasNext: boolean;
|
|
15
|
+
hasPrevious: boolean;
|
|
16
|
+
};
|
|
17
|
+
/** Primitive-friendly key that identifies the logical Firestore query. */
|
|
18
|
+
export type QueryKey = readonly unknown[];
|
|
19
|
+
type hookProps = {
|
|
20
|
+
query: Query;
|
|
21
|
+
/** Stable identity for `query`. Change this when sorts/filters change to reset pagination. */
|
|
22
|
+
queryKey: QueryKey;
|
|
23
|
+
pageSize?: number;
|
|
24
|
+
pageByPage?: boolean;
|
|
25
|
+
liveUpdate?: boolean;
|
|
26
|
+
};
|
|
27
|
+
type usePaginateType = (props: hookProps) => hookReturnValue;
|
|
28
|
+
declare const usePagination: usePaginateType;
|
|
29
|
+
export default usePagination;
|
|
30
|
+
//# sourceMappingURL=App.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../src/App.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAA+B,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAGnG,KAAK,IAAI,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,qBAAqB,EAAE,CAAA;CAAE,CAAA;AAEzG,KAAK,eAAe,GAAG;IACrB,IAAI,EAAE,IAAI,CAAA;IACV,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,WAAW,EAAE,MAAM,IAAI,CAAA;IACvB,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,OAAO,CAAA;CACrB,CAAA;AAED,0EAA0E;AAC1E,MAAM,MAAM,QAAQ,GAAG,SAAS,OAAO,EAAE,CAAA;AAEzC,KAAK,SAAS,GAAG;IACf,KAAK,EAAE,KAAK,CAAA;IACZ,8FAA8F;IAC9F,QAAQ,EAAE,QAAQ,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAID,KAAK,eAAe,GAAG,CAAC,KAAK,EAAE,SAAS,KAAK,eAAe,CAAA;AAI5D,QAAA,MAAM,aAAa,EAAE,eAkLpB,CAAA;eAEc,aAAa"}
|
package/dist/App.js
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
2
|
+
import { query, limit, getDocs, startAfter, onSnapshot, getCountFromServer } from 'firebase/firestore';
|
|
3
|
+
const addQuery = (q, fun, value) => (value ? query(q, fun(value)) : q);
|
|
4
|
+
const usePagination = ({ pageSize = 10, query: mainQuery, queryKey, pageByPage = false, liveUpdate = false }) => {
|
|
5
|
+
const [error, setError] = useState();
|
|
6
|
+
const [loading, setLoading] = useState(true);
|
|
7
|
+
const [docs, setDocs] = useState([]);
|
|
8
|
+
/** Last document of each loaded page. Length === current page number. */
|
|
9
|
+
const [pageCursors, setPageCursors] = useState([]);
|
|
10
|
+
const [activeQuery, setActiveQuery] = useState(() => addQuery(mainQuery, limit, pageSize));
|
|
11
|
+
const [totals, setTotals] = useState({ totalDocs: 0, totalPages: 0 });
|
|
12
|
+
const mainQueryRef = useRef(mainQuery);
|
|
13
|
+
const navKindRef = useRef('reset');
|
|
14
|
+
const pageByPageRef = useRef(pageByPage);
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
mainQueryRef.current = mainQuery;
|
|
17
|
+
}, [mainQuery]);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
pageByPageRef.current = pageByPage;
|
|
20
|
+
}, [pageByPage]);
|
|
21
|
+
const queryKeySignature = JSON.stringify(queryKey);
|
|
22
|
+
const applySnapshot = useCallback((res) => {
|
|
23
|
+
const lastDoc = res.docs[res.docs.length - 1];
|
|
24
|
+
const kind = navKindRef.current;
|
|
25
|
+
if (kind === 'reset') {
|
|
26
|
+
setDocs(res.docs);
|
|
27
|
+
setPageCursors(lastDoc ? [lastDoc] : []);
|
|
28
|
+
}
|
|
29
|
+
else if (kind === 'next') {
|
|
30
|
+
if (pageByPageRef.current) {
|
|
31
|
+
setDocs(res.docs);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
setDocs((prev) => [...prev, ...res.docs]);
|
|
35
|
+
}
|
|
36
|
+
if (lastDoc) {
|
|
37
|
+
setPageCursors((prev) => [...prev, lastDoc]);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else if (kind === 'previous') {
|
|
41
|
+
setDocs(res.docs);
|
|
42
|
+
if (lastDoc) {
|
|
43
|
+
setPageCursors((prev) => [...prev, lastDoc]);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
if (pageByPageRef.current) {
|
|
48
|
+
setDocs(res.docs);
|
|
49
|
+
if (lastDoc) {
|
|
50
|
+
setPageCursors((prev) => (prev.length === 0 ? [lastDoc] : [...prev.slice(0, -1), lastDoc]));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
navKindRef.current = 'idle';
|
|
55
|
+
setLoading(false);
|
|
56
|
+
}, []);
|
|
57
|
+
const onErr = useCallback((err) => {
|
|
58
|
+
setError(err);
|
|
59
|
+
setLoading(false);
|
|
60
|
+
}, []);
|
|
61
|
+
const refreshTotals = useCallback(() => {
|
|
62
|
+
return getCountFromServer(mainQueryRef.current).then((res) => {
|
|
63
|
+
setTotals({ totalDocs: res.data().count, totalPages: Math.ceil(res.data().count / pageSize) || 0 });
|
|
64
|
+
});
|
|
65
|
+
}, [pageSize]);
|
|
66
|
+
// Reset when the logical query (queryKey) or page size changes — not on Query identity
|
|
67
|
+
useEffect(() => {
|
|
68
|
+
let cancelled = false;
|
|
69
|
+
navKindRef.current = 'reset';
|
|
70
|
+
setLoading(true);
|
|
71
|
+
setError(undefined);
|
|
72
|
+
setDocs([]);
|
|
73
|
+
setPageCursors([]);
|
|
74
|
+
setActiveQuery(addQuery(mainQueryRef.current, limit, pageSize));
|
|
75
|
+
refreshTotals().catch((err) => {
|
|
76
|
+
if (cancelled)
|
|
77
|
+
return;
|
|
78
|
+
onErr(err);
|
|
79
|
+
});
|
|
80
|
+
return () => {
|
|
81
|
+
cancelled = true;
|
|
82
|
+
};
|
|
83
|
+
}, [queryKeySignature, pageSize, refreshTotals, onErr]);
|
|
84
|
+
useEffect(() => {
|
|
85
|
+
let cancelled = false;
|
|
86
|
+
setLoading(true);
|
|
87
|
+
if (liveUpdate) {
|
|
88
|
+
const unsubscribe = onSnapshot(activeQuery, { includeMetadataChanges: true }, (res) => {
|
|
89
|
+
if (cancelled)
|
|
90
|
+
return;
|
|
91
|
+
// Skip pure metadata echoes for docs; still apply when docs/pending state matter.
|
|
92
|
+
// Recount only after local writes are acknowledged so getCountFromServer is accurate.
|
|
93
|
+
if (!res.metadata.hasPendingWrites) {
|
|
94
|
+
applySnapshot(res);
|
|
95
|
+
refreshTotals().catch((err) => {
|
|
96
|
+
if (cancelled)
|
|
97
|
+
return;
|
|
98
|
+
onErr(err);
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
else if (res.docChanges().length > 0) {
|
|
102
|
+
// Optimistic UI for local adds/removes; count updates on the follow-up snapshot.
|
|
103
|
+
applySnapshot(res);
|
|
104
|
+
}
|
|
105
|
+
}, (err) => {
|
|
106
|
+
if (cancelled)
|
|
107
|
+
return;
|
|
108
|
+
onErr(err);
|
|
109
|
+
});
|
|
110
|
+
return () => {
|
|
111
|
+
cancelled = true;
|
|
112
|
+
unsubscribe();
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
getDocs(activeQuery)
|
|
116
|
+
.then((res) => {
|
|
117
|
+
if (cancelled)
|
|
118
|
+
return;
|
|
119
|
+
applySnapshot(res);
|
|
120
|
+
})
|
|
121
|
+
.catch((err) => {
|
|
122
|
+
if (cancelled)
|
|
123
|
+
return;
|
|
124
|
+
onErr(err);
|
|
125
|
+
});
|
|
126
|
+
return () => {
|
|
127
|
+
cancelled = true;
|
|
128
|
+
};
|
|
129
|
+
}, [activeQuery, liveUpdate, applySnapshot, onErr, refreshTotals]);
|
|
130
|
+
const currentPage = pageCursors.length;
|
|
131
|
+
const hasNext = currentPage > 0 && currentPage < totals.totalPages;
|
|
132
|
+
const hasPrevious = pageByPage && currentPage > 1;
|
|
133
|
+
const getNext = useCallback(() => {
|
|
134
|
+
if (!hasNext)
|
|
135
|
+
return;
|
|
136
|
+
const cursor = pageCursors[pageCursors.length - 1];
|
|
137
|
+
if (!cursor)
|
|
138
|
+
return;
|
|
139
|
+
navKindRef.current = 'next';
|
|
140
|
+
setLoading(true);
|
|
141
|
+
setActiveQuery(addQuery(addQuery(mainQueryRef.current, startAfter, cursor), limit, pageSize));
|
|
142
|
+
}, [hasNext, pageCursors, pageSize]);
|
|
143
|
+
const getPrevious = useCallback(() => {
|
|
144
|
+
if (!hasPrevious)
|
|
145
|
+
return;
|
|
146
|
+
const newCursors = pageCursors.slice(0, -2);
|
|
147
|
+
const cursor = newCursors[newCursors.length - 1];
|
|
148
|
+
navKindRef.current = 'previous';
|
|
149
|
+
setPageCursors(newCursors.length ? newCursors : []);
|
|
150
|
+
setLoading(true);
|
|
151
|
+
if (cursor) {
|
|
152
|
+
setActiveQuery(addQuery(addQuery(mainQueryRef.current, startAfter, cursor), limit, pageSize));
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
navKindRef.current = 'reset';
|
|
156
|
+
setActiveQuery(addQuery(mainQueryRef.current, limit, pageSize));
|
|
157
|
+
}
|
|
158
|
+
}, [hasPrevious, pageCursors, pageSize]);
|
|
159
|
+
return {
|
|
160
|
+
error,
|
|
161
|
+
loading,
|
|
162
|
+
getNext,
|
|
163
|
+
getPrevious,
|
|
164
|
+
hasNext,
|
|
165
|
+
hasPrevious,
|
|
166
|
+
data: {
|
|
167
|
+
docs,
|
|
168
|
+
...totals,
|
|
169
|
+
currentPage,
|
|
170
|
+
},
|
|
171
|
+
};
|
|
172
|
+
};
|
|
173
|
+
export default usePagination;
|
|
174
|
+
//# sourceMappingURL=App.js.map
|
package/dist/App.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"App.js","sourceRoot":"","sources":["../src/App.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,OAAO,CAAA;eAElB,aAAa"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,OAAO,CAAA;AAEjC,eAAe,aAAa,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,55 +1,70 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "react-firebase-pagination",
|
|
3
|
-
"version": "
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
"
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"firebase
|
|
50
|
-
"
|
|
51
|
-
"react"
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "react-firebase-pagination",
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"module": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js",
|
|
12
|
+
"default": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"author": "Chirag Patel",
|
|
16
|
+
"license": "MIT",
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "git+https://github.com/Chirag7096/react-firebase-pagination.git"
|
|
20
|
+
},
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "tsc",
|
|
23
|
+
"lint": "eslint .",
|
|
24
|
+
"prettier": "prettier --write \"src/**/*.{js,ts,jsx,tsx}\"",
|
|
25
|
+
"prepare": "bun run build",
|
|
26
|
+
"prepublishOnly": "bun prettier && bun lint",
|
|
27
|
+
"typecheck": "tsc --noEmit"
|
|
28
|
+
},
|
|
29
|
+
"peerDependencies": {
|
|
30
|
+
"firebase": ">=9",
|
|
31
|
+
"react": ">=16"
|
|
32
|
+
},
|
|
33
|
+
"files": [
|
|
34
|
+
"dist",
|
|
35
|
+
"LICENSE",
|
|
36
|
+
"README.md"
|
|
37
|
+
],
|
|
38
|
+
"keywords": [
|
|
39
|
+
"expo",
|
|
40
|
+
"next",
|
|
41
|
+
"react",
|
|
42
|
+
"firebase",
|
|
43
|
+
"pagination",
|
|
44
|
+
"firebase pagination",
|
|
45
|
+
"firebase-pagination",
|
|
46
|
+
"expo firebase pagination",
|
|
47
|
+
"expo-firebase-pagination",
|
|
48
|
+
"next-firebase-pagination",
|
|
49
|
+
"next firebase pagination",
|
|
50
|
+
"react firebase pagination",
|
|
51
|
+
"react-firebase-pagination"
|
|
52
|
+
],
|
|
53
|
+
"devDependencies": {
|
|
54
|
+
"@babel/core": "^8.0.6",
|
|
55
|
+
"@babel/eslint-parser": "^7.29.9",
|
|
56
|
+
"@babel/preset-typescript": "^8.0.1",
|
|
57
|
+
"@eslint/js": "^10.0.1",
|
|
58
|
+
"@types/react": "^19.3.0",
|
|
59
|
+
"eslint": "^9",
|
|
60
|
+
"eslint-config-prettier": "^10.1.8",
|
|
61
|
+
"eslint-plugin-prettier": "^5.5.6",
|
|
62
|
+
"eslint-plugin-react-hooks": "^7.1.1",
|
|
63
|
+
"firebase": "^12.19.0",
|
|
64
|
+
"globals": "^17.12.0",
|
|
65
|
+
"prettier": "^3.9.8",
|
|
66
|
+
"react": "^19.3.0",
|
|
67
|
+
"react-dom": "^19.3.0",
|
|
68
|
+
"typescript": "7.0.2"
|
|
69
|
+
}
|
|
70
|
+
}
|
package/dist/cjs/App.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { Query, QueryDocumentSnapshot } from 'firebase/firestore';
|
|
2
|
-
type data = {
|
|
3
|
-
totalDocs: number;
|
|
4
|
-
totalPages: number;
|
|
5
|
-
currentPage: number;
|
|
6
|
-
docs: QueryDocumentSnapshot[];
|
|
7
|
-
};
|
|
8
|
-
type hookReturnValue = {
|
|
9
|
-
data: data;
|
|
10
|
-
error?: Error;
|
|
11
|
-
loading: boolean;
|
|
12
|
-
getNext: () => void;
|
|
13
|
-
getPrevious: () => void;
|
|
14
|
-
};
|
|
15
|
-
type hookProps = {
|
|
16
|
-
query: Query;
|
|
17
|
-
pageSize: number;
|
|
18
|
-
pageByPage: boolean;
|
|
19
|
-
liveUpdate: boolean;
|
|
20
|
-
};
|
|
21
|
-
type usePaginateType = (props: hookProps) => hookReturnValue;
|
|
22
|
-
declare const usePagination: usePaginateType;
|
|
23
|
-
export default usePagination;
|
package/dist/cjs/App.js
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
var tslib_1 = require("tslib");
|
|
4
|
-
var react_1 = require("react");
|
|
5
|
-
var firestore_1 = require("firebase/firestore");
|
|
6
|
-
var addQuery = function (q, fun, value) {
|
|
7
|
-
return value ? (0, firestore_1.query)(q, fun(value)) : q;
|
|
8
|
-
};
|
|
9
|
-
var usePagination = function (_a) {
|
|
10
|
-
var _b = _a.pageSize, pageSize = _b === void 0 ? 10 : _b, mainQuery = _a.query, _c = _a.pageByPage, pageByPage = _c === void 0 ? false : _c, _d = _a.liveUpdate, liveUpdate = _d === void 0 ? false : _d;
|
|
11
|
-
var _e = (0, react_1.useState)(), error = _e[0], setError = _e[1];
|
|
12
|
-
var _f = (0, react_1.useState)(false), loading = _f[0], setLoading = _f[1];
|
|
13
|
-
var _g = (0, react_1.useState)([]), docs = _g[0], setDocs = _g[1];
|
|
14
|
-
var _h = (0, react_1.useState)([]), lastSnap = _h[0], setLastSnap = _h[1];
|
|
15
|
-
var _j = (0, react_1.useState)(addQuery(mainQuery, firestore_1.limit, pageSize)), query = _j[0], setQuery = _j[1];
|
|
16
|
-
var _k = (0, react_1.useState)({
|
|
17
|
-
totalDocs: 0,
|
|
18
|
-
totalPages: 0,
|
|
19
|
-
}), totals = _k[0], setTotals = _k[1];
|
|
20
|
-
var onRes = function (res) {
|
|
21
|
-
if (res.docs.length) {
|
|
22
|
-
setLastSnap(function (e) { return tslib_1.__spreadArray(tslib_1.__spreadArray([], e, true), [res.docs[pageSize - 1]], false); });
|
|
23
|
-
setDocs(function (e) { return (pageByPage ? res.docs : tslib_1.__spreadArray(tslib_1.__spreadArray([], e, true), res.docs, true)); });
|
|
24
|
-
}
|
|
25
|
-
setLoading(false);
|
|
26
|
-
};
|
|
27
|
-
var onErr = function (err) {
|
|
28
|
-
setError(err);
|
|
29
|
-
setLoading(false);
|
|
30
|
-
};
|
|
31
|
-
(0, react_1.useEffect)(function () {
|
|
32
|
-
setLoading(true);
|
|
33
|
-
if (liveUpdate) {
|
|
34
|
-
var unsubscribe = (0, firestore_1.onSnapshot)(query, onRes, onErr);
|
|
35
|
-
return unsubscribe;
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
(0, firestore_1.getDocs)(query).then(onRes).catch(onErr);
|
|
39
|
-
return function () { return null; };
|
|
40
|
-
}
|
|
41
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
42
|
-
}, [query]);
|
|
43
|
-
(0, react_1.useEffect)(function () {
|
|
44
|
-
setLoading(true);
|
|
45
|
-
(0, firestore_1.getCountFromServer)(mainQuery).then(function (res) {
|
|
46
|
-
setQuery(addQuery(mainQuery, firestore_1.limit, pageSize));
|
|
47
|
-
setTotals({
|
|
48
|
-
totalDocs: res.data().count,
|
|
49
|
-
totalPages: Math.ceil(res.data().count / pageSize),
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
}, [mainQuery, pageSize, pageByPage]);
|
|
53
|
-
var getLastEle = function (array) { return array[array.length - 1]; };
|
|
54
|
-
var getNext = function () {
|
|
55
|
-
if (lastSnap.length < totals.totalPages) {
|
|
56
|
-
var q = addQuery(mainQuery, firestore_1.startAfter, getLastEle(lastSnap));
|
|
57
|
-
q = addQuery(q, firestore_1.limit, pageSize);
|
|
58
|
-
setQuery(q);
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
|
-
var getPrevious = function () {
|
|
62
|
-
if (pageByPage && lastSnap.length > 1) {
|
|
63
|
-
var newArray = lastSnap.slice(0, -2);
|
|
64
|
-
setLastSnap(newArray);
|
|
65
|
-
var q = addQuery(mainQuery, firestore_1.startAfter, getLastEle(newArray));
|
|
66
|
-
q = addQuery(q, firestore_1.limit, pageSize);
|
|
67
|
-
setQuery(q);
|
|
68
|
-
}
|
|
69
|
-
};
|
|
70
|
-
return (0, react_1.useMemo)(function () { return ({
|
|
71
|
-
error: error,
|
|
72
|
-
loading: loading,
|
|
73
|
-
getNext: getNext,
|
|
74
|
-
getPrevious: getPrevious,
|
|
75
|
-
hasNext: lastSnap.length < totals.totalPages,
|
|
76
|
-
hasPrevious: pageByPage ? 1 < lastSnap.length : false,
|
|
77
|
-
data: tslib_1.__assign(tslib_1.__assign({ docs: docs }, totals), { currentPage: lastSnap.length }),
|
|
78
|
-
}); },
|
|
79
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
80
|
-
[docs]);
|
|
81
|
-
};
|
|
82
|
-
exports.default = usePagination;
|
|
83
|
-
//# sourceMappingURL=App.js.map
|
package/dist/cjs/App.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/App.tsx"],"names":[],"mappings":"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"}
|
package/dist/cjs/index.d.ts
DELETED
package/dist/cjs/index.js
DELETED
package/dist/cjs/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,sDAAiC;AAEjC,kBAAe,aAAa,CAAA"}
|
package/dist/esm/App.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { Query, QueryDocumentSnapshot } from 'firebase/firestore';
|
|
2
|
-
type data = {
|
|
3
|
-
totalDocs: number;
|
|
4
|
-
totalPages: number;
|
|
5
|
-
currentPage: number;
|
|
6
|
-
docs: QueryDocumentSnapshot[];
|
|
7
|
-
};
|
|
8
|
-
type hookReturnValue = {
|
|
9
|
-
data: data;
|
|
10
|
-
error?: Error;
|
|
11
|
-
loading: boolean;
|
|
12
|
-
getNext: () => void;
|
|
13
|
-
getPrevious: () => void;
|
|
14
|
-
};
|
|
15
|
-
type hookProps = {
|
|
16
|
-
query: Query;
|
|
17
|
-
pageSize: number;
|
|
18
|
-
pageByPage: boolean;
|
|
19
|
-
liveUpdate: boolean;
|
|
20
|
-
};
|
|
21
|
-
type usePaginateType = (props: hookProps) => hookReturnValue;
|
|
22
|
-
declare const usePagination: usePaginateType;
|
|
23
|
-
export default usePagination;
|
package/dist/esm/App.js
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import { __assign, __spreadArray } from "tslib";
|
|
2
|
-
import { useState, useEffect, useMemo } from 'react';
|
|
3
|
-
import { query, limit, getDocs, startAfter, onSnapshot, getCountFromServer, } from 'firebase/firestore';
|
|
4
|
-
var addQuery = function (q, fun, value) {
|
|
5
|
-
return value ? query(q, fun(value)) : q;
|
|
6
|
-
};
|
|
7
|
-
var usePagination = function (_a) {
|
|
8
|
-
var _b = _a.pageSize, pageSize = _b === void 0 ? 10 : _b, mainQuery = _a.query, _c = _a.pageByPage, pageByPage = _c === void 0 ? false : _c, _d = _a.liveUpdate, liveUpdate = _d === void 0 ? false : _d;
|
|
9
|
-
var _e = useState(), error = _e[0], setError = _e[1];
|
|
10
|
-
var _f = useState(false), loading = _f[0], setLoading = _f[1];
|
|
11
|
-
var _g = useState([]), docs = _g[0], setDocs = _g[1];
|
|
12
|
-
var _h = useState([]), lastSnap = _h[0], setLastSnap = _h[1];
|
|
13
|
-
var _j = useState(addQuery(mainQuery, limit, pageSize)), query = _j[0], setQuery = _j[1];
|
|
14
|
-
var _k = useState({
|
|
15
|
-
totalDocs: 0,
|
|
16
|
-
totalPages: 0,
|
|
17
|
-
}), totals = _k[0], setTotals = _k[1];
|
|
18
|
-
var onRes = function (res) {
|
|
19
|
-
if (res.docs.length) {
|
|
20
|
-
setLastSnap(function (e) { return __spreadArray(__spreadArray([], e, true), [res.docs[pageSize - 1]], false); });
|
|
21
|
-
setDocs(function (e) { return (pageByPage ? res.docs : __spreadArray(__spreadArray([], e, true), res.docs, true)); });
|
|
22
|
-
}
|
|
23
|
-
setLoading(false);
|
|
24
|
-
};
|
|
25
|
-
var onErr = function (err) {
|
|
26
|
-
setError(err);
|
|
27
|
-
setLoading(false);
|
|
28
|
-
};
|
|
29
|
-
useEffect(function () {
|
|
30
|
-
setLoading(true);
|
|
31
|
-
if (liveUpdate) {
|
|
32
|
-
var unsubscribe = onSnapshot(query, onRes, onErr);
|
|
33
|
-
return unsubscribe;
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
getDocs(query).then(onRes).catch(onErr);
|
|
37
|
-
return function () { return null; };
|
|
38
|
-
}
|
|
39
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
40
|
-
}, [query]);
|
|
41
|
-
useEffect(function () {
|
|
42
|
-
setLoading(true);
|
|
43
|
-
getCountFromServer(mainQuery).then(function (res) {
|
|
44
|
-
setQuery(addQuery(mainQuery, limit, pageSize));
|
|
45
|
-
setTotals({
|
|
46
|
-
totalDocs: res.data().count,
|
|
47
|
-
totalPages: Math.ceil(res.data().count / pageSize),
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
}, [mainQuery, pageSize, pageByPage]);
|
|
51
|
-
var getLastEle = function (array) { return array[array.length - 1]; };
|
|
52
|
-
var getNext = function () {
|
|
53
|
-
if (lastSnap.length < totals.totalPages) {
|
|
54
|
-
var q = addQuery(mainQuery, startAfter, getLastEle(lastSnap));
|
|
55
|
-
q = addQuery(q, limit, pageSize);
|
|
56
|
-
setQuery(q);
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
var getPrevious = function () {
|
|
60
|
-
if (pageByPage && lastSnap.length > 1) {
|
|
61
|
-
var newArray = lastSnap.slice(0, -2);
|
|
62
|
-
setLastSnap(newArray);
|
|
63
|
-
var q = addQuery(mainQuery, startAfter, getLastEle(newArray));
|
|
64
|
-
q = addQuery(q, limit, pageSize);
|
|
65
|
-
setQuery(q);
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
return useMemo(function () { return ({
|
|
69
|
-
error: error,
|
|
70
|
-
loading: loading,
|
|
71
|
-
getNext: getNext,
|
|
72
|
-
getPrevious: getPrevious,
|
|
73
|
-
hasNext: lastSnap.length < totals.totalPages,
|
|
74
|
-
hasPrevious: pageByPage ? 1 < lastSnap.length : false,
|
|
75
|
-
data: __assign(__assign({ docs: docs }, totals), { currentPage: lastSnap.length }),
|
|
76
|
-
}); },
|
|
77
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
78
|
-
[docs]);
|
|
79
|
-
};
|
|
80
|
-
export default usePagination;
|
|
81
|
-
//# sourceMappingURL=App.js.map
|
package/dist/esm/App.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/App.tsx"],"names":[],"mappings":"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"}
|
package/dist/esm/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,OAAO,CAAA;AAEjC,eAAe,aAAa,CAAA"}
|
|
File without changes
|