react-firebase-pagination 1.1.16 → 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 CHANGED
@@ -1,80 +1,86 @@
1
- [![npm version](https://badge.fury.io/js/react-firebase-pagination.svg)](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` | null | The query of your Firebase database. e.g. `query(collection(db, '[collection]'))`. | ✔ |
29
- | pageSize | `Number` | 10 | The number of items per page. | |
30
- | 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. | |
31
- | liveUpdate | `Boolean` | false | Add Firebase snapshot listener to update data live | |
32
-
33
- ### State
34
-
35
- | **prop** | **value** | **description** |
36
- | ----------- | ---------- | ----------------------------------------------------------------------------------------------------------- |
37
- | loading | `Boolean` | Is true when a page is loading. |
38
- | data | `Object` | [Data Object](#data-object-contain) |
39
- | getNext | `Function` | W'll render the next page when called. (Take no arguments) |
40
- | getPrevious | `Function` | W'll render the previous page when called. (Take no arguments and work only in [pageByPage](#options) mode) |
41
- | hasNext | `Boolean` | It's true when the next page has data. |
42
- | hasPrevious | `Boolean` | It's true when a previous page has data. (Work only in [pageByPage](#options) mode) |
43
-
44
- ### Data Object Contain
45
-
46
- | **prop** | **value** | **description** |
47
- | ----------- | ----------- | -------------------------------------------------------------------------------------------------- |
48
- | docs | `Documents` | Document Array. |
49
- | totalDocs | `Number` | Total Document count. |
50
- | totalPages | `Number` | Total Page count. |
51
- | currentPage | `Number` | Current Page Number in [pageByPage](#options) mode or how may time's data load on the current page |
52
-
53
- ## Example Use
54
-
55
- This is an example of a [Firestore](https://firebase.google.com/docs/firestore/).
56
-
57
- You can also change query during runtime. Hook will detect new query and start pagination from the beginning.
58
- Here is an example of controlling query's `orderDirection` by React's state:
59
-
60
- ```jsx
61
- import usePagination from 'react-firebase-pagination';
62
- import { query, orderBy, collection } from 'firebase/firestore'
63
- import db from './your/database/path';
64
-
65
- const mainQuery = query(collection(db, '[collection]'), orderBy('created_timestamp', 'desc'));
66
-
67
- const App = () => {
68
- const { getNext, getPrevious, data, loading } = usePagination({
69
- pageSize: 10,
70
- pageByPage: true,
71
- query: mainQuery,
72
- })
73
-
74
- if (loading) {
75
- return <LoadingComponent />
76
- }
77
-
78
- ...
79
- }
80
- ```
1
+ [![npm version](https://badge.fury.io/js/react-firebase-pagination.svg)](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
+ ```
@@ -1,4 +1,4 @@
1
- import { Query, QueryDocumentSnapshot } from 'firebase/firestore';
1
+ import type { Query, QueryDocumentSnapshot } from 'firebase/firestore';
2
2
  type data = {
3
3
  totalDocs: number;
4
4
  totalPages: number;
@@ -11,13 +11,20 @@ type hookReturnValue = {
11
11
  loading: boolean;
12
12
  getNext: () => void;
13
13
  getPrevious: () => void;
14
+ hasNext: boolean;
15
+ hasPrevious: boolean;
14
16
  };
17
+ /** Primitive-friendly key that identifies the logical Firestore query. */
18
+ export type QueryKey = readonly unknown[];
15
19
  type hookProps = {
16
20
  query: Query;
17
- pageSize: number;
21
+ /** Stable identity for `query`. Change this when sorts/filters change to reset pagination. */
22
+ queryKey: QueryKey;
23
+ pageSize?: number;
18
24
  pageByPage?: boolean;
19
25
  liveUpdate?: boolean;
20
26
  };
21
27
  type usePaginateType = (props: hookProps) => hookReturnValue;
22
28
  declare const usePagination: usePaginateType;
23
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"App.js","sourceRoot":"","sources":["../src/App.tsx"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
1
  import usePagination from './App';
2
2
  export default usePagination;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,61 +1,70 @@
1
- {
2
- "name": "react-firebase-pagination",
3
- "version": "1.1.16",
4
- "main": "./dist/cjs/index.js",
5
- "module": "./dist/esm/index.js",
6
- "types": "./dist/esm/index.d.ts",
7
- "author": "Patel Chirag",
8
- "license": "MIT",
9
- "repository": {
10
- "type": "git",
11
- "url": "git+https://github.com/Chirag7096/react-firebase-pagination.git"
12
- },
13
- "scripts": {
14
- "build": "yarn build:esm && yarn build:cjs",
15
- "build:esm": "tsc",
16
- "build:cjs": "tsc --module commonjs --outDir dist/cjs",
17
- "lint": "eslint \"{**/*,*}.{js,ts,jsx,tsx}\"",
18
- "prettier": "prettier --write \"src/**.{js,ts,jsx,tsx}\"",
19
- "prepare": "yarn build",
20
- "prepublishOnly": "yarn prettier && yarn lint"
21
- },
22
- "peerDependencies": {
23
- "firebase": ">=9",
24
- "react": ">=16"
25
- },
26
- "files": [
27
- "dist",
28
- "LICENSE",
29
- "README.md"
30
- ],
31
- "keywords": [
32
- "expo",
33
- "next",
34
- "react",
35
- "firebase",
36
- "pagination",
37
- "firebase pagination",
38
- "firebase-pagination",
39
- "expo firebase pagination",
40
- "expo-firebase-pagination",
41
- "next-firebase-pagination",
42
- "next firebase pagination",
43
- "react firebase pagination",
44
- "react-firebase-pagination"
45
- ],
46
- "devDependencies": {
47
- "@types/react": "^18.2.8",
48
- "@typescript-eslint/eslint-plugin": "^5.59.8",
49
- "@typescript-eslint/parser": "^5.59.8",
50
- "eslint": "^8.42.0",
51
- "eslint-config-prettier": "^8.8.0",
52
- "eslint-plugin-prettier": "^4.2.1",
53
- "eslint-plugin-react": "^7.32.2",
54
- "eslint-plugin-react-hooks": "^4.6.0",
55
- "firebase": "^9",
56
- "prettier": "^2.8.8",
57
- "react": "^18.2.0",
58
- "react-dom": "^18.2.0",
59
- "typescript": "5.1.3"
60
- }
61
- }
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.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
@@ -1 +0,0 @@
1
- {"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/App.tsx"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import usePagination from './App';
2
- export default usePagination;
package/dist/cjs/index.js DELETED
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- var tslib_1 = require("tslib");
4
- var App_1 = tslib_1.__importDefault(require("./App"));
5
- exports.default = App_1.default;
6
- //# sourceMappingURL=index.js.map
@@ -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
@@ -1 +0,0 @@
1
- {"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/App.tsx"],"names":[],"mappings":"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"}
@@ -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"}
@@ -1,3 +0,0 @@
1
- import React from 'react';
2
- declare const Page: () => React.JSX.Element;
3
- export default Page;
package/dist/esm/test.js DELETED
@@ -1,58 +0,0 @@
1
- 'use client';
2
- import { collection, query, limit } from 'firebase/firestore';
3
- import React from 'react';
4
- import { db } from '../../../firebase';
5
- import usePagination from 'react-firebase-pagination';
6
- var mainQuery = query(collection(db, 'formData'), limit(5));
7
- var Page = function () {
8
- var _a;
9
- var _b = usePagination({
10
- pageSize: 6,
11
- pageByPage: true,
12
- query: mainQuery
13
- }), getNext = _b.getNext, getPrevious = _b.getPrevious, data = _b.data, loading = _b.loading;
14
- console.log("this is data -----> ", data);
15
- if (loading) {
16
- return React.createElement("div", { className: 'flex w-screen h-screen items-center justify-center' }, "Loading...");
17
- }
18
- return (
19
- // loading ? <span>Loading...</span> : <div className='flex flex-col ' >
20
- React.createElement("div", { className: 'flex flex-col' },
21
- React.createElement("div", { className: 'flex w-full h-12' }, ['username',
22
- 'firstName ',
23
- 'lastName ',
24
- 'email ',
25
- 'about ',
26
- 'address ',
27
- 'city ',
28
- 'region ',
29
- 'country ',
30
- 'pinCode ',
31
- 'candidate ',
32
- 'everything ',
33
- ].map(function (e) {
34
- return React.createElement("div", { className: 'w-32 text-ellipsis overflow-hidden whitespace-nowrap text-center border-x' }, e);
35
- })),
36
- React.createElement("div", { className: 'flex flex-col w-full h-full' }, (_a = data === null || data === void 0 ? void 0 : data.docs) === null || _a === void 0 ? void 0 :
37
- _a.map(function (e) {
38
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
39
- return (React.createElement(React.Fragment, null,
40
- React.createElement("div", { key: (_a = e.data()) === null || _a === void 0 ? void 0 : _a.id, className: 'flex w-full' },
41
- React.createElement("span", { className: 'w-32 text-ellipsis overflow-hidden whitespace-nowrap text-center border-x' }, (_b = e.data()) === null || _b === void 0 ? void 0 : _b.userName),
42
- React.createElement("span", { className: 'w-32 text-ellipsis overflow-hidden whitespace-nowrap text-center border-x' }, (_c = e.data()) === null || _c === void 0 ? void 0 : _c.firstName),
43
- React.createElement("span", { className: 'w-32 text-ellipsis overflow-hidden whitespace-nowrap text-center border-x' }, (_d = e.data()) === null || _d === void 0 ? void 0 : _d.lastName),
44
- React.createElement("span", { className: 'w-32 text-ellipsis overflow-hidden whitespace-nowrap text-center border-x' }, (_e = e.data()) === null || _e === void 0 ? void 0 : _e.email),
45
- React.createElement("span", { className: 'w-32 text-ellipsis overflow-hidden whitespace-nowrap text-center border-x' }, (_f = e.data()) === null || _f === void 0 ? void 0 : _f.about),
46
- React.createElement("span", { className: 'w-32 text-ellipsis overflow-hidden whitespace-nowrap text-center border-x' }, (_g = e.data()) === null || _g === void 0 ? void 0 : _g.address),
47
- React.createElement("span", { className: 'w-32 text-ellipsis overflow-hidden whitespace-nowrap text-center border-x' }, (_h = e.data()) === null || _h === void 0 ? void 0 : _h.city),
48
- React.createElement("span", { className: 'w-32 text-ellipsis overflow-hidden whitespace-nowrap text-center border-x' }, (_j = e.data()) === null || _j === void 0 ? void 0 : _j.region),
49
- React.createElement("span", { className: 'w-32 text-ellipsis overflow-hidden whitespace-nowrap text-center border-x' }, (_k = e.data()) === null || _k === void 0 ? void 0 : _k.country),
50
- React.createElement("span", { className: 'w-32 text-ellipsis overflow-hidden whitespace-nowrap text-center border-x' }, (_l = e.data()) === null || _l === void 0 ? void 0 : _l.pinCode),
51
- React.createElement("span", { className: 'w-32 text-ellipsis overflow-hidden whitespace-nowrap text-center border-x' }, String((_m = e.data()) === null || _m === void 0 ? void 0 : _m.candidate)),
52
- React.createElement("span", { className: 'w-32 text-ellipsis overflow-hidden whitespace-nowrap text-center border-x' }, String((_o = e.data()) === null || _o === void 0 ? void 0 : _o.everything)))));
53
- }),
54
- React.createElement("button", { className: 'bg-transparent w-32 hover:bg-blue-500 text-blue-700 font-semibold hover:text-white py-2 px-4 border border-blue-500 hover:border-transparent rounded', onClick: function () { return getNext(); } }, "Next"),
55
- React.createElement("button", { className: 'bg-transparent w-32 hover:bg-blue-500 text-blue-700 font-semibold hover:text-white py-2 px-4 border border-blue-500 hover:border-transparent rounded', onClick: function () { return getPrevious(); } }, "Previous"))));
56
- };
57
- export default Page;
58
- //# sourceMappingURL=test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/test.tsx"],"names":[],"mappings":"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"}
File without changes