@promoboxx/use-filter 1.11.2 → 2.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.
Files changed (77) hide show
  1. package/dist/cjs/_virtual/_rolldown/runtime.js +29 -0
  2. package/dist/cjs/lib/buildDefaultFilterInfo.d.ts +5 -0
  3. package/dist/cjs/lib/buildDefaultFilterInfo.js +27 -0
  4. package/dist/{lib → cjs/lib}/getOffsetFromPage.d.ts +2 -1
  5. package/dist/cjs/lib/getOffsetFromPage.js +8 -0
  6. package/dist/{lib → cjs/lib}/getPageFromOffset.d.ts +2 -1
  7. package/dist/cjs/lib/getPageFromOffset.js +8 -0
  8. package/dist/{lib → cjs/lib}/shallowEqual.d.ts +2 -1
  9. package/dist/cjs/lib/shallowEqual.js +24 -0
  10. package/dist/cjs/store/index.d.ts +14 -0
  11. package/dist/cjs/store/index.js +18 -0
  12. package/dist/cjs/store/localStorageStore.d.ts +5 -0
  13. package/dist/cjs/store/localStorageStore.js +33 -0
  14. package/dist/cjs/store/memoryStore.d.ts +5 -0
  15. package/dist/cjs/store/memoryStore.js +25 -0
  16. package/dist/cjs/store/reduxHelpers/createActions.d.ts +16 -0
  17. package/dist/cjs/store/reduxHelpers/createActions.js +16 -0
  18. package/dist/cjs/store/reduxHelpers/createReducer.d.ts +10 -0
  19. package/dist/cjs/store/reduxHelpers/createReducer.js +25 -0
  20. package/dist/cjs/store/reduxStore.d.ts +18 -0
  21. package/dist/cjs/store/reduxStore.js +63 -0
  22. package/dist/cjs/store/urlParamStore.d.ts +8 -0
  23. package/dist/cjs/store/urlParamStore.js +68 -0
  24. package/dist/cjs/useFilter.d.ts +106 -0
  25. package/dist/cjs/useFilter.js +251 -0
  26. package/dist/cjs/useSimpleFilter.d.ts +89 -0
  27. package/dist/cjs/useSimpleFilter.js +198 -0
  28. package/dist/esm/lib/buildDefaultFilterInfo.d.mts +6 -0
  29. package/dist/esm/lib/buildDefaultFilterInfo.mjs +27 -0
  30. package/dist/esm/lib/getOffsetFromPage.d.mts +4 -0
  31. package/dist/esm/lib/getOffsetFromPage.mjs +7 -0
  32. package/dist/esm/lib/getPageFromOffset.d.mts +4 -0
  33. package/dist/esm/lib/getPageFromOffset.mjs +7 -0
  34. package/dist/esm/lib/shallowEqual.d.mts +4 -0
  35. package/dist/esm/lib/shallowEqual.mjs +23 -0
  36. package/dist/esm/store/index.d.mts +14 -0
  37. package/dist/esm/store/index.mjs +15 -0
  38. package/dist/esm/store/localStorageStore.d.mts +6 -0
  39. package/dist/esm/store/localStorageStore.mjs +32 -0
  40. package/dist/esm/store/memoryStore.d.mts +6 -0
  41. package/dist/esm/store/memoryStore.mjs +24 -0
  42. package/dist/esm/store/reduxHelpers/createActions.d.mts +16 -0
  43. package/dist/esm/store/reduxHelpers/createActions.mjs +15 -0
  44. package/dist/esm/store/reduxHelpers/createReducer.d.mts +11 -0
  45. package/dist/esm/store/reduxHelpers/createReducer.mjs +24 -0
  46. package/dist/esm/store/reduxStore.d.mts +18 -0
  47. package/dist/esm/store/reduxStore.mjs +61 -0
  48. package/dist/esm/store/urlParamStore.d.mts +8 -0
  49. package/dist/esm/store/urlParamStore.mjs +63 -0
  50. package/dist/esm/useFilter.d.mts +106 -0
  51. package/dist/esm/useFilter.mjs +251 -0
  52. package/dist/esm/useSimpleFilter.d.mts +89 -0
  53. package/dist/esm/useSimpleFilter.mjs +198 -0
  54. package/package.json +33 -43
  55. package/dist/lib/buildDefaultFilterInfo.d.ts +0 -3
  56. package/dist/lib/buildDefaultFilterInfo.js +0 -35
  57. package/dist/lib/getOffsetFromPage.js +0 -6
  58. package/dist/lib/getPageFromOffset.js +0 -6
  59. package/dist/lib/shallowEqual.js +0 -23
  60. package/dist/store/index.d.ts +0 -10
  61. package/dist/store/index.js +0 -16
  62. package/dist/store/localStorageStore.d.ts +0 -3
  63. package/dist/store/localStorageStore.js +0 -31
  64. package/dist/store/memoryStore.d.ts +0 -3
  65. package/dist/store/memoryStore.js +0 -23
  66. package/dist/store/reduxHelpers/createActions.d.ts +0 -16
  67. package/dist/store/reduxHelpers/createActions.js +0 -27
  68. package/dist/store/reduxHelpers/createReducer.d.ts +0 -8
  69. package/dist/store/reduxHelpers/createReducer.js +0 -26
  70. package/dist/store/reduxStore.d.ts +0 -15
  71. package/dist/store/reduxStore.js +0 -67
  72. package/dist/store/urlParamStore.d.ts +0 -4
  73. package/dist/store/urlParamStore.js +0 -91
  74. package/dist/useFilter.d.ts +0 -103
  75. package/dist/useFilter.js +0 -254
  76. package/dist/useSimpleFilter.d.ts +0 -86
  77. package/dist/useSimpleFilter.js +0 -173
@@ -1,173 +0,0 @@
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
- var __importDefault = (this && this.__importDefault) || function (mod) {
14
- return (mod && mod.__esModule) ? mod : { "default": mod };
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- var react_1 = require("react");
18
- var getOffsetFromPage_1 = __importDefault(require("./lib/getOffsetFromPage"));
19
- var getPageFromOffset_1 = __importDefault(require("./lib/getPageFromOffset"));
20
- var shallowEqual_1 = __importDefault(require("./lib/shallowEqual"));
21
- var store_1 = require("./store");
22
- function useSimpleFilter(namespace, options) {
23
- // Having these types of refs helps get around rules of hooks, and they need
24
- // to be updated each render.
25
- var ctxRefValue = {
26
- namespace: namespace,
27
- debounceDuration: options.debounceDuration,
28
- defaultFilterInfo: options.defaultFilterInfo,
29
- onBeforeSaveFilter: options.onBeforeSaveFilter,
30
- store: options.store,
31
- };
32
- var ctxRef = react_1.useRef(ctxRefValue);
33
- react_1.useEffect(function () {
34
- ctxRef.current = ctxRefValue;
35
- });
36
- var _a = react_1.useState(false), isLoading = _a[0], setIsLoading = _a[1];
37
- var _b = react_1.useState(function () {
38
- var _a;
39
- var fromStore = store_1.getFilterStore(ctxRef.current.store).getFilter(namespace);
40
- // If the filter is already in the store, we have to make sure it ...
41
- // - has both the filter and filterInfo
42
- // - has all the fields the user passed to the hook
43
- if (fromStore) {
44
- var filterInfo_1 = buildDefaultFilterInfo(__assign(__assign({}, fromStore), { shouldRunImmediately: true, filter: __assign(__assign({}, (_a = options.defaultFilterInfo) === null || _a === void 0 ? void 0 : _a.filter), fromStore.filter) }));
45
- return filterInfo_1;
46
- }
47
- else {
48
- return buildDefaultFilterInfo(__assign(__assign({}, options.defaultFilterInfo), { shouldRunImmediately: true }));
49
- }
50
- }), filterInfo = _b[0], setFilterInfoState = _b[1];
51
- var _c = react_1.useState(filterInfo), debouncedFilterInfo = _c[0], setDebouncedFilterInfo = _c[1];
52
- // Not sure this is needed in simple mode?
53
- var lastRefreshAtRef = react_1.useRef(-1);
54
- var updateReasonRef = react_1.useRef('initial');
55
- react_1.useEffect(function () {
56
- var _a;
57
- setIsLoading(true);
58
- // If the lastRefreshAt hasn't changed, don't do anything.
59
- if (lastRefreshAtRef.current === filterInfo.lastRefreshAt) {
60
- setIsLoading(false);
61
- return;
62
- }
63
- var timeout = undefined;
64
- function makeRequest() {
65
- lastRefreshAtRef.current = filterInfo.lastRefreshAt;
66
- store_1.getFilterStore(ctxRef.current.store).saveFilter(ctxRef.current.namespace, (ctxRef.current.onBeforeSaveFilter
67
- ? ctxRef.current.onBeforeSaveFilter(filterInfo)
68
- : filterInfo));
69
- setDebouncedFilterInfo(filterInfo);
70
- setIsLoading(false);
71
- }
72
- if (filterInfo.shouldRunImmediately) {
73
- makeRequest();
74
- }
75
- else {
76
- timeout = setTimeout(makeRequest, (_a = ctxRef.current.debounceDuration) !== null && _a !== void 0 ? _a : 500);
77
- }
78
- return function () {
79
- if (timeout) {
80
- clearTimeout(timeout);
81
- }
82
- };
83
- }, [filterInfo]);
84
- var previousTotalRef = react_1.useRef(0);
85
- var api = {
86
- isLoading: isLoading,
87
- filterInfo: filterInfo,
88
- debouncedFilterInfo: debouncedFilterInfo,
89
- updateReason: updateReasonRef.current,
90
- updateFilter: react_1.useCallback(function (filter, shouldRunImmediately) {
91
- if (shouldRunImmediately === void 0) { shouldRunImmediately = false; }
92
- updateReasonRef.current = 'filter';
93
- setFilterInfoState(function (previous) {
94
- var nextFilter = __assign(__assign({}, previous.filter), filter);
95
- if (shallowEqual_1.default(previous.filter, nextFilter)) {
96
- return previous;
97
- }
98
- return __assign(__assign({}, previous), { shouldRunImmediately: shouldRunImmediately, offset: 0, page: 1, totalResults: 1, totalPages: 1, filter: nextFilter, cursor: undefined, lastRefreshAt: new Date().getTime() });
99
- });
100
- }, []),
101
- pagingInfo: react_1.useCallback(function (total) {
102
- var normalized = Number(
103
- // Because we accept `null` as an argument, we can't do something as
104
- // simple as `total ?? ...`
105
- total == null ? previousTotalRef.current : total);
106
- previousTotalRef.current = normalized;
107
- return {
108
- totalResults: normalized,
109
- totalPages: Math.ceil(normalized / filterInfo.pageSize),
110
- };
111
- }, [filterInfo.pageSize]),
112
- resetFilter: react_1.useCallback(function (shouldRunImmediately) {
113
- if (shouldRunImmediately === void 0) { shouldRunImmediately = false; }
114
- updateReasonRef.current = 'filter';
115
- setFilterInfoState(__assign(__assign({}, buildDefaultFilterInfo(ctxRef.current.defaultFilterInfo)), { shouldRunImmediately: shouldRunImmediately }));
116
- }, []),
117
- setOffset: react_1.useCallback(function (offset, shouldRunImmediately) {
118
- if (shouldRunImmediately === void 0) { shouldRunImmediately = false; }
119
- updateReasonRef.current = 'pagination';
120
- var offsetNumber = Number(offset);
121
- setFilterInfoState(function (previous) { return (__assign(__assign({}, previous), { offset: offsetNumber, page: getPageFromOffset_1.default(offsetNumber, previous.pageSize), lastRefreshAt: new Date().getTime(), shouldRunImmediately: shouldRunImmediately })); });
122
- }, []),
123
- setPage: react_1.useCallback(function (page, shouldRunImmediately) {
124
- if (shouldRunImmediately === void 0) { shouldRunImmediately = false; }
125
- updateReasonRef.current = 'pagination';
126
- var pageNumber = Number(page);
127
- setFilterInfoState(function (previous) { return (__assign(__assign({}, previous), { offset: getOffsetFromPage_1.default(pageNumber, previous.pageSize), page: pageNumber, lastRefreshAt: new Date().getTime(), shouldRunImmediately: shouldRunImmediately })); });
128
- }, []),
129
- setPageSize: react_1.useCallback(function (pageSize, shouldRunImmediately) {
130
- if (shouldRunImmediately === void 0) { shouldRunImmediately = false; }
131
- updateReasonRef.current = 'pagination';
132
- setFilterInfoState(function (previous) {
133
- var pageSizeNumber = Number(pageSize);
134
- var page = getPageFromOffset_1.default(previous.offset, pageSizeNumber);
135
- var offset = getOffsetFromPage_1.default(page, pageSizeNumber);
136
- return __assign(__assign({}, previous), { pageSize: pageSizeNumber, offset: offset, page: page, lastRefreshAt: new Date().getTime(), shouldRunImmediately: shouldRunImmediately });
137
- });
138
- }, []),
139
- setSort: react_1.useCallback(function (sort, shouldRunImmediately) {
140
- if (shouldRunImmediately === void 0) { shouldRunImmediately = false; }
141
- updateReasonRef.current = 'filter';
142
- setFilterInfoState(function (previous) { return (__assign(__assign({}, previous), { sort: sort, lastRefreshAt: new Date().getTime(), shouldRunImmediately: shouldRunImmediately })); });
143
- }, []),
144
- setCursor: react_1.useCallback(function (cursor, shouldRunImmediately) {
145
- if (shouldRunImmediately === void 0) { shouldRunImmediately = false; }
146
- updateReasonRef.current = 'pagination';
147
- setFilterInfoState(function (previous) { return (__assign(__assign({}, previous), { cursor: cursor, lastRefreshAt: new Date().getTime(), shouldRunImmediately: shouldRunImmediately })); });
148
- }, []),
149
- forceRefresh: react_1.useCallback(function (shouldRunImmediately) {
150
- if (shouldRunImmediately === void 0) { shouldRunImmediately = false; }
151
- updateReasonRef.current = 'filter';
152
- setFilterInfoState(function (previous) { return (__assign(__assign({}, previous), { lastRefreshAt: new Date().getTime(), shouldRunImmediately: shouldRunImmediately })); });
153
- }, []),
154
- };
155
- return api;
156
- }
157
- function buildDefaultFilterInfo(filterInfo) {
158
- if (filterInfo === void 0) { filterInfo = {}; }
159
- var merged = __assign({
160
- // Cast here to work around "'T' could be instantiated with an arbitrary
161
- // type which could be unrelated to '{}'"
162
- filter: {}, sort: undefined, pageSize: 20, lastRefreshAt: new Date().getTime(), offset: 0, page: 1, shouldRunImmediately: false }, filterInfo);
163
- // If there's a page but no offset, set the offset.
164
- if (filterInfo.page != null && filterInfo.offset == null) {
165
- merged.offset = getOffsetFromPage_1.default(filterInfo.page, merged.pageSize);
166
- // If there's an offset but no page, set the page.
167
- }
168
- else if (filterInfo.page == null && filterInfo.offset != null) {
169
- merged.page = getPageFromOffset_1.default(filterInfo.offset, merged.pageSize);
170
- }
171
- return merged;
172
- }
173
- exports.default = useSimpleFilter;