@vigilio/react-native-paginator 0.0.1

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.
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.usePaginator = usePaginator;
15
+ var react_1 = require("react");
16
+ var useDebounce_js_1 = require("./useDebounce.js");
17
+ function usePaginator(props) {
18
+ var _a = props || {
19
+ limit: 10,
20
+ offset: 0,
21
+ maxPagesShown: 5,
22
+ page: 1,
23
+ cursor: null,
24
+ filters: {},
25
+ }, _b = _a.limit, limit = _b === void 0 ? 10 : _b, _c = _a.offset, offset = _c === void 0 ? 0 : _c, _d = _a.maxPagesShown, maxPagesShown = _d === void 0 ? 5 : _d, _e = _a.page, initialPage = _e === void 0 ? 1 : _e, _f = _a.cursor, cursor = _f === void 0 ? null : _f, _g = _a.filters, initialFilters = _g === void 0 ? {} : _g;
26
+ var _h = (0, react_1.useState)(initialPage), page = _h[0], setPage = _h[1];
27
+ var _j = (0, react_1.useState)(""), searchValue = _j[0], setSearchValue = _j[1];
28
+ var debounceTerm = (0, useDebounce_js_1.useDebounce)(searchValue);
29
+ var _k = (0, react_1.useState)({
30
+ limit: limit,
31
+ offset: (initialPage - 1) * limit + offset,
32
+ maxPagesShown: maxPagesShown,
33
+ total: null,
34
+ cursor: cursor,
35
+ }), paginationValue = _k[0], setPaginationValue = _k[1];
36
+ var updateData = (0, react_1.useCallback)(function (paginate) {
37
+ setPaginationValue(function (prev) { return (__assign(__assign({}, prev), paginate)); });
38
+ }, []);
39
+ /* SORTING */
40
+ var _l = (0, react_1.useState)({}), sortValue = _l[0], setSortValue = _l[1];
41
+ var sorting = (0, react_1.useCallback)(function (key) {
42
+ var _a;
43
+ if (page > 1) {
44
+ onChangePage(1);
45
+ }
46
+ var sorted = (_a = {},
47
+ _a[key] = sortValue[key] === "ASC" ? "DESC" : "ASC",
48
+ _a);
49
+ setSortValue(sorted);
50
+ }, [page, sortValue]);
51
+ /* FILTERS */
52
+ var _m = (0, react_1.useState)(initialFilters), filtersValue = _m[0], setFiltersValue = _m[1];
53
+ var updateFilters = (0, react_1.useCallback)(function (name, value) {
54
+ if (page > 1) {
55
+ onChangePage(1);
56
+ }
57
+ setFiltersValue(function (prev) {
58
+ var _a;
59
+ return (__assign(__assign({}, prev), (_a = {}, _a[name] = value, _a)));
60
+ });
61
+ }, [page]);
62
+ var setFilters = (0, react_1.useCallback)(function (values) {
63
+ if (page > 1) {
64
+ onChangePage(1);
65
+ }
66
+ setFiltersValue(values);
67
+ }, [page]);
68
+ var clearFilters = (0, react_1.useCallback)(function () {
69
+ if (page > 1) {
70
+ onChangePage(1);
71
+ }
72
+ setFiltersValue({});
73
+ }, [page]);
74
+ /* PAGINATION */
75
+ var onNextPage = (0, react_1.useCallback)(function (pemittion) {
76
+ if (pemittion === void 0) { pemittion = true; }
77
+ if (page === totalPages && pemittion)
78
+ return;
79
+ setPaginationValue(function (prev) { return (__assign(__assign({}, prev), { offset: prev.offset + prev.limit })); });
80
+ setPage(function (prev) { return prev + 1; });
81
+ }, [page]);
82
+ var onBackPage = (0, react_1.useCallback)(function (pemittion) {
83
+ if (pemittion === void 0) { pemittion = true; }
84
+ if (page === 1 && pemittion)
85
+ return;
86
+ setPaginationValue(function (prev) { return (__assign(__assign({}, prev), { offset: prev.offset - prev.limit })); });
87
+ setPage(function (prev) { return prev - 1; });
88
+ }, [page]);
89
+ var onchangeLimit = (0, react_1.useCallback)(function (newLimit) {
90
+ if (newLimit === void 0) { newLimit = 10; }
91
+ if (page > 1) {
92
+ onChangePage(1);
93
+ }
94
+ setPaginationValue(function (prev) { return (__assign(__assign({}, prev), { limit: newLimit })); });
95
+ }, [page]);
96
+ var onChangePage = (0, react_1.useCallback)(function (pag) {
97
+ setPaginationValue(function (prev) { return (__assign(__assign({}, prev), { offset: (pag - 1) * prev.limit })); });
98
+ setPage(pag);
99
+ }, []);
100
+ var backInitialPage = (0, react_1.useCallback)(function () {
101
+ setPaginationValue(function (prev) { return (__assign(__assign({}, prev), { offset: 0 })); });
102
+ setPage(1);
103
+ }, []);
104
+ var currentPage = (0, react_1.useMemo)(function () { return Math.floor(paginationValue.offset / paginationValue.limit) + 1; }, [paginationValue.offset, paginationValue.limit]);
105
+ var totalPages = (0, react_1.useMemo)(function () { var _a; return Math.ceil(((_a = paginationValue.total) !== null && _a !== void 0 ? _a : 0) / paginationValue.limit); }, [paginationValue.total, paginationValue.limit]);
106
+ var onFinalPage = (0, react_1.useCallback)(function () {
107
+ setPaginationValue(function (prev) { return (__assign(__assign({}, prev), { offset: (totalPages - 1) * prev.limit })); });
108
+ setPage(totalPages);
109
+ }, [totalPages]);
110
+ /* paginator */
111
+ var paginator = (0, react_1.useMemo)(function () {
112
+ var startPage;
113
+ var endPage;
114
+ if (totalPages <= paginationValue.maxPagesShown) {
115
+ startPage = 1;
116
+ endPage = totalPages;
117
+ }
118
+ else {
119
+ var maxPagesShownBeforeCurrentPage = Math.floor(paginationValue.maxPagesShown / 2);
120
+ var maxPagesShownAfterCurrentPage = Math.ceil(paginationValue.maxPagesShown / 2) - 1;
121
+ if (currentPage <= maxPagesShownBeforeCurrentPage) {
122
+ startPage = 1;
123
+ endPage = paginationValue.maxPagesShown;
124
+ }
125
+ else if (currentPage + maxPagesShownAfterCurrentPage >=
126
+ totalPages) {
127
+ startPage = totalPages - paginationValue.maxPagesShown + 1;
128
+ endPage = totalPages;
129
+ }
130
+ else {
131
+ startPage = currentPage - maxPagesShownBeforeCurrentPage;
132
+ endPage = currentPage + maxPagesShownAfterCurrentPage;
133
+ }
134
+ }
135
+ var pages = Array.from(Array(endPage + 1 - startPage).keys()).map(function (i) { return startPage + i; });
136
+ return {
137
+ totalItems: paginationValue.total,
138
+ currentPage: currentPage,
139
+ totalPages: totalPages,
140
+ startPage: startPage,
141
+ endPage: endPage,
142
+ pages: pages,
143
+ };
144
+ }, [totalPages, currentPage, paginationValue.maxPagesShown, paginationValue.total]);
145
+ var startingBreakPointButtonIfCondition = (0, react_1.useMemo)(function () {
146
+ return paginator.pages[0] >= 3;
147
+ }, [paginator.pages]);
148
+ var endingBreakPointButtonIfCondition = (0, react_1.useMemo)(function () {
149
+ return (paginator.pages[paginator.pages.length - 1] < totalPages - 1);
150
+ }, [paginator.pages, totalPages]);
151
+ var onSearchByName = (0, react_1.useCallback)(function (term) {
152
+ if (page > 1) {
153
+ onChangePage(1);
154
+ }
155
+ setSearchValue(term);
156
+ }, [page, onChangePage]);
157
+ return {
158
+ updateData: updateData,
159
+ pagination: {
160
+ value: paginationValue,
161
+ page: page,
162
+ paginator: paginator,
163
+ startingBreakPointButtonIfCondition: startingBreakPointButtonIfCondition,
164
+ endingBreakPointButtonIfCondition: endingBreakPointButtonIfCondition,
165
+ currentPage: currentPage,
166
+ totalPages: totalPages,
167
+ onNextPage: onNextPage,
168
+ onBackPage: onBackPage,
169
+ onchangeLimit: onchangeLimit,
170
+ onChangePage: onChangePage,
171
+ onFinalPage: onFinalPage,
172
+ backInitialPage: backInitialPage,
173
+ },
174
+ search: { value: searchValue, debounceTerm: debounceTerm, onSearchByName: onSearchByName },
175
+ sort: {
176
+ value: sortValue,
177
+ sorting: sorting,
178
+ },
179
+ filters: {
180
+ value: filtersValue,
181
+ update: updateFilters,
182
+ set: setFilters,
183
+ clear: clearFilters,
184
+ },
185
+ };
186
+ }
187
+ //# sourceMappingURL=usePaginator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePaginator.js","sourceRoot":"","sources":["../../src/usePaginator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,138 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
2
+ import { renderHook, act } from "@testing-library/react";
3
+ import { useDebounce } from "../useDebounce.js";
4
+ describe("useDebounce", function () {
5
+ beforeEach(function () {
6
+ vi.useFakeTimers();
7
+ });
8
+ afterEach(function () {
9
+ vi.useRealTimers();
10
+ });
11
+ // ─── Valor inicial ───────────────────────────────────────────
12
+ it("retorna el valor inicial inmediatamente", function () {
13
+ var result = renderHook(function () { return useDebounce("hello"); }).result;
14
+ expect(result.current).toBe("hello");
15
+ });
16
+ // ─── Debounce con delay por defecto (1000ms) ─────────────────
17
+ it("actualiza el valor después del delay por defecto (1000ms)", function () {
18
+ var _a = renderHook(function (_a) {
19
+ var value = _a.value;
20
+ return useDebounce(value);
21
+ }, { initialProps: { value: "initial" } }), result = _a.result, rerender = _a.rerender;
22
+ // Cambiar el valor
23
+ rerender({ value: "updated" });
24
+ // Antes del delay, mantiene valor anterior
25
+ act(function () {
26
+ vi.advanceTimersByTime(500);
27
+ });
28
+ expect(result.current).toBe("initial");
29
+ // Después del delay, actualiza
30
+ act(function () {
31
+ vi.advanceTimersByTime(500);
32
+ });
33
+ expect(result.current).toBe("updated");
34
+ });
35
+ // ─── Custom delay ────────────────────────────────────────────
36
+ it("respeta un delay personalizado", function () {
37
+ var _a = renderHook(function (_a) {
38
+ var value = _a.value, delay = _a.delay;
39
+ return useDebounce(value, delay);
40
+ }, { initialProps: { value: "a", delay: 300 } }), result = _a.result, rerender = _a.rerender;
41
+ rerender({ value: "b", delay: 300 });
42
+ // Antes de 300ms
43
+ act(function () {
44
+ vi.advanceTimersByTime(200);
45
+ });
46
+ expect(result.current).toBe("a");
47
+ // Después de 300ms
48
+ act(function () {
49
+ vi.advanceTimersByTime(100);
50
+ });
51
+ expect(result.current).toBe("b");
52
+ });
53
+ // ─── Reset del timer al cambiar valor ────────────────────────
54
+ it("reinicia el timer cuando el valor cambia rápidamente", function () {
55
+ var _a = renderHook(function (_a) {
56
+ var value = _a.value;
57
+ return useDebounce(value, 500);
58
+ }, { initialProps: { value: "first" } }), result = _a.result, rerender = _a.rerender;
59
+ // Primer cambio
60
+ rerender({ value: "second" });
61
+ act(function () {
62
+ vi.advanceTimersByTime(300);
63
+ });
64
+ // Segundo cambio antes de que expire el timer
65
+ rerender({ value: "third" });
66
+ act(function () {
67
+ vi.advanceTimersByTime(300);
68
+ });
69
+ // Todavía no pasaron 500ms desde el último cambio
70
+ expect(result.current).toBe("first");
71
+ // Completar el delay del último cambio
72
+ act(function () {
73
+ vi.advanceTimersByTime(200);
74
+ });
75
+ expect(result.current).toBe("third");
76
+ });
77
+ // ─── Funciona con diferentes tipos ───────────────────────────
78
+ it("funciona con números", function () {
79
+ var _a = renderHook(function (_a) {
80
+ var value = _a.value;
81
+ return useDebounce(value, 500);
82
+ }, { initialProps: { value: 0 } }), result = _a.result, rerender = _a.rerender;
83
+ rerender({ value: 42 });
84
+ act(function () {
85
+ vi.advanceTimersByTime(500);
86
+ });
87
+ expect(result.current).toBe(42);
88
+ });
89
+ it("funciona con objetos", function () {
90
+ var obj1 = { a: 1 };
91
+ var obj2 = { a: 2 };
92
+ var _a = renderHook(function (_a) {
93
+ var value = _a.value;
94
+ return useDebounce(value, 500);
95
+ }, { initialProps: { value: obj1 } }), result = _a.result, rerender = _a.rerender;
96
+ rerender({ value: obj2 });
97
+ act(function () {
98
+ vi.advanceTimersByTime(500);
99
+ });
100
+ expect(result.current).toEqual({ a: 2 });
101
+ });
102
+ // ─── Cleanup on unmount ──────────────────────────────────────
103
+ it("limpia el timer al desmontar sin errores", function () {
104
+ var _a = renderHook(function (_a) {
105
+ var value = _a.value;
106
+ return useDebounce(value, 500);
107
+ }, { initialProps: { value: "start" } }), unmount = _a.unmount, rerender = _a.rerender;
108
+ rerender({ value: "changed" });
109
+ // unmount no debe lanzar error (cleanup se ejecuta)
110
+ expect(function () { return unmount(); }).not.toThrow();
111
+ });
112
+ // ─── Múltiples cambios rápidos ───────────────────────────────
113
+ it("solo emite el último valor después de múltiples cambios rápidos", function () {
114
+ var _a = renderHook(function (_a) {
115
+ var value = _a.value;
116
+ return useDebounce(value, 300);
117
+ }, { initialProps: { value: "a" } }), result = _a.result, rerender = _a.rerender;
118
+ rerender({ value: "b" });
119
+ act(function () {
120
+ vi.advanceTimersByTime(100);
121
+ });
122
+ rerender({ value: "c" });
123
+ act(function () {
124
+ vi.advanceTimersByTime(100);
125
+ });
126
+ rerender({ value: "d" });
127
+ act(function () {
128
+ vi.advanceTimersByTime(100);
129
+ });
130
+ rerender({ value: "e" });
131
+ // Solo "e" debe aparecer después del delay
132
+ act(function () {
133
+ vi.advanceTimersByTime(300);
134
+ });
135
+ expect(result.current).toBe("e");
136
+ });
137
+ });
138
+ //# sourceMappingURL=useDebounce.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDebounce.test.js","sourceRoot":"","sources":["../../../src/__tests__/useDebounce.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};