@promoboxx/use-filter 1.7.0 → 1.8.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/dist/useFilter.d.ts +3 -1
- package/dist/useFilter.js +11 -1
- package/dist/useSimpleFilter.d.ts +2 -0
- package/dist/useSimpleFilter.js +10 -0
- package/package.json +1 -1
package/dist/useFilter.d.ts
CHANGED
|
@@ -2,14 +2,16 @@ declare type MaybePromise<T> = T | Promise<T>;
|
|
|
2
2
|
interface UseFilterOptions<TFilter, TResult> {
|
|
3
3
|
defaultFilterInfo?: Partial<FilterInfo<TFilter>>;
|
|
4
4
|
shouldForceRunOnMount?: boolean;
|
|
5
|
-
onChange: (filterInfo: FilterInfo<TFilter
|
|
5
|
+
onChange: (filterInfo: FilterInfo<TFilter>, reason: UseFilterUpdateReason) => MaybePromise<UseFilterOnChangeResult<TFilter, TResult>>;
|
|
6
6
|
debounceDuration?: number;
|
|
7
7
|
}
|
|
8
|
+
export declare type UseFilterUpdateReason = 'initial' | 'filter' | 'pagination';
|
|
8
9
|
declare function useFilter<TFilter, TResult>(namespace: string, options: UseFilterOptions<TFilter, TResult>): {
|
|
9
10
|
isLoading: boolean;
|
|
10
11
|
data: TResult | null | undefined;
|
|
11
12
|
doesFilterExist: boolean;
|
|
12
13
|
filterInfo: FilterInfo<TFilter>;
|
|
14
|
+
updateReason: UseFilterUpdateReason;
|
|
13
15
|
updateFilter: (filter: Partial<TFilter>, shouldRunImmediately?: boolean) => void;
|
|
14
16
|
resetFilter: (shouldRunImmediately?: boolean) => void;
|
|
15
17
|
setOffset: (offset: number | string, shouldRunImmediately?: boolean) => void;
|
package/dist/useFilter.js
CHANGED
|
@@ -64,6 +64,7 @@ function useFilter(namespace, options) {
|
|
|
64
64
|
: filterInfo
|
|
65
65
|
? filterInfo.lastRefreshAt
|
|
66
66
|
: -1);
|
|
67
|
+
var updateReasonRef = react_1.useRef('initial');
|
|
67
68
|
// Call onChange when data changes.
|
|
68
69
|
react_1.useEffect(function () {
|
|
69
70
|
setIsLoading(true);
|
|
@@ -80,7 +81,7 @@ function useFilter(namespace, options) {
|
|
|
80
81
|
}
|
|
81
82
|
var makeRequest = function () {
|
|
82
83
|
lastRefreshAtRef.current = filterInfo.lastRefreshAt;
|
|
83
|
-
var response = ctxRef.current.onChange(filterInfo);
|
|
84
|
+
var response = ctxRef.current.onChange(filterInfo, updateReasonRef.current);
|
|
84
85
|
store_1.getFilterStore().saveFilter(namespace, filterInfo);
|
|
85
86
|
if (!response) {
|
|
86
87
|
setIsLoading(false);
|
|
@@ -153,8 +154,10 @@ function useFilter(namespace, options) {
|
|
|
153
154
|
data: data,
|
|
154
155
|
doesFilterExist: doesFilterExist.current,
|
|
155
156
|
filterInfo: filterInfo || buildDefaultFilterInfo_1.default(options.defaultFilterInfo),
|
|
157
|
+
updateReason: updateReasonRef.current,
|
|
156
158
|
updateFilter: react_1.useCallback(function (filter, shouldRunImmediately) {
|
|
157
159
|
if (shouldRunImmediately === void 0) { shouldRunImmediately = false; }
|
|
160
|
+
updateReasonRef.current = 'filter';
|
|
158
161
|
setFilterInfoState(function (previous) {
|
|
159
162
|
invariant(previous != null, 'updateFilter called without filterInfo');
|
|
160
163
|
var nextFilter = __assign(__assign({}, previous.filter), filter);
|
|
@@ -166,10 +169,12 @@ function useFilter(namespace, options) {
|
|
|
166
169
|
}, []),
|
|
167
170
|
resetFilter: react_1.useCallback(function (shouldRunImmediately) {
|
|
168
171
|
if (shouldRunImmediately === void 0) { shouldRunImmediately = false; }
|
|
172
|
+
updateReasonRef.current = 'filter';
|
|
169
173
|
setFilterInfoState(__assign(__assign({}, buildDefaultFilterInfo_1.default(ctxRef.current.defaultFilterInfo)), { lastRefreshAt: new Date().getTime(), shouldRunImmediately: shouldRunImmediately }));
|
|
170
174
|
}, []),
|
|
171
175
|
setOffset: react_1.useCallback(function (offset, shouldRunImmediately) {
|
|
172
176
|
if (shouldRunImmediately === void 0) { shouldRunImmediately = false; }
|
|
177
|
+
updateReasonRef.current = 'pagination';
|
|
173
178
|
setFilterInfoState(function (previous) {
|
|
174
179
|
invariant(previous != null, 'setOffset called without filterInfo');
|
|
175
180
|
var offsetNumber = Number(offset);
|
|
@@ -178,6 +183,7 @@ function useFilter(namespace, options) {
|
|
|
178
183
|
}, []),
|
|
179
184
|
setPage: react_1.useCallback(function (page, shouldRunImmediately) {
|
|
180
185
|
if (shouldRunImmediately === void 0) { shouldRunImmediately = false; }
|
|
186
|
+
updateReasonRef.current = 'pagination';
|
|
181
187
|
setFilterInfoState(function (previous) {
|
|
182
188
|
invariant(previous != null, 'setPage called without filterInfo');
|
|
183
189
|
var pageNumber = Number(page);
|
|
@@ -186,6 +192,7 @@ function useFilter(namespace, options) {
|
|
|
186
192
|
}, []),
|
|
187
193
|
setPageSize: react_1.useCallback(function (pageSize, shouldRunImmediately) {
|
|
188
194
|
if (shouldRunImmediately === void 0) { shouldRunImmediately = false; }
|
|
195
|
+
updateReasonRef.current = 'pagination';
|
|
189
196
|
setFilterInfoState(function (previous) {
|
|
190
197
|
invariant(previous != null, 'setPageSize called without filterInfo');
|
|
191
198
|
var pageSizeNumber = Number(pageSize);
|
|
@@ -196,6 +203,7 @@ function useFilter(namespace, options) {
|
|
|
196
203
|
}, []),
|
|
197
204
|
setSort: react_1.useCallback(function (sort, shouldRunImmediately) {
|
|
198
205
|
if (shouldRunImmediately === void 0) { shouldRunImmediately = false; }
|
|
206
|
+
updateReasonRef.current = 'filter';
|
|
199
207
|
setFilterInfoState(function (previous) {
|
|
200
208
|
invariant(previous != null, 'setSort called without filterInfo');
|
|
201
209
|
return __assign(__assign({}, previous), { sort: sort, lastRefreshAt: new Date().getTime(), shouldRunImmediately: shouldRunImmediately });
|
|
@@ -204,12 +212,14 @@ function useFilter(namespace, options) {
|
|
|
204
212
|
setCursor: react_1.useCallback(function (cursor, shouldRunImmediately) {
|
|
205
213
|
if (shouldRunImmediately === void 0) { shouldRunImmediately = false; }
|
|
206
214
|
setFilterInfoState(function (previous) {
|
|
215
|
+
updateReasonRef.current = 'pagination';
|
|
207
216
|
invariant(previous != null, 'setCursor called without filterInfo');
|
|
208
217
|
return __assign(__assign({}, previous), { cursor: cursor, lastRefreshAt: new Date().getTime(), shouldRunImmediately: shouldRunImmediately });
|
|
209
218
|
});
|
|
210
219
|
}, []),
|
|
211
220
|
forceRefresh: react_1.useCallback(function (shouldRunImmediately) {
|
|
212
221
|
if (shouldRunImmediately === void 0) { shouldRunImmediately = false; }
|
|
222
|
+
updateReasonRef.current = 'filter';
|
|
213
223
|
setFilterInfoState(function (previous) {
|
|
214
224
|
invariant(previous != null, 'forceRefresh called without filterInfo');
|
|
215
225
|
return __assign(__assign({}, previous), { lastRefreshAt: new Date().getTime(), shouldRunImmediately: shouldRunImmediately });
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { UseFilterUpdateReason } from './useFilter';
|
|
1
2
|
export interface SimpleFilterInfo<TFilter> {
|
|
2
3
|
filter: TFilter;
|
|
3
4
|
sort?: string;
|
|
@@ -34,6 +35,7 @@ declare function useSimpleFilter<TFilter>(namespace: string, options: UseSimpleF
|
|
|
34
35
|
lastRefreshAt: number;
|
|
35
36
|
cursor?: string | null | undefined;
|
|
36
37
|
};
|
|
38
|
+
updateReason: UseFilterUpdateReason;
|
|
37
39
|
updateFilter: (filter: Partial<TFilter>, shouldRunImmediately?: any) => void;
|
|
38
40
|
pagingInfo: (total: string | number | null | undefined) => {
|
|
39
41
|
totalResults: number;
|
package/dist/useSimpleFilter.js
CHANGED
|
@@ -37,6 +37,7 @@ function useSimpleFilter(namespace, options) {
|
|
|
37
37
|
var _c = react_1.useState(filterInfo), debouncedFilterInfo = _c[0], setDebouncedFilterInfo = _c[1];
|
|
38
38
|
// Not sure this is needed in simple mode?
|
|
39
39
|
var lastRefreshAtRef = react_1.useRef(-1);
|
|
40
|
+
var updateReasonRef = react_1.useRef('initial');
|
|
40
41
|
react_1.useEffect(function () {
|
|
41
42
|
var _a;
|
|
42
43
|
setIsLoading(true);
|
|
@@ -69,8 +70,10 @@ function useSimpleFilter(namespace, options) {
|
|
|
69
70
|
isLoading: isLoading,
|
|
70
71
|
filterInfo: filterInfo,
|
|
71
72
|
debouncedFilterInfo: debouncedFilterInfo,
|
|
73
|
+
updateReason: updateReasonRef.current,
|
|
72
74
|
updateFilter: react_1.useCallback(function (filter, shouldRunImmediately) {
|
|
73
75
|
if (shouldRunImmediately === void 0) { shouldRunImmediately = false; }
|
|
76
|
+
updateReasonRef.current = 'filter';
|
|
74
77
|
setFilterInfoState(function (previous) {
|
|
75
78
|
var nextFilter = __assign(__assign({}, previous.filter), filter);
|
|
76
79
|
if (shallowEqual_1.default(previous.filter, nextFilter)) {
|
|
@@ -92,20 +95,24 @@ function useSimpleFilter(namespace, options) {
|
|
|
92
95
|
}, [filterInfo.pageSize]),
|
|
93
96
|
resetFilter: react_1.useCallback(function (shouldRunImmediately) {
|
|
94
97
|
if (shouldRunImmediately === void 0) { shouldRunImmediately = false; }
|
|
98
|
+
updateReasonRef.current = 'filter';
|
|
95
99
|
setFilterInfoState(__assign(__assign({}, buildDefaultFilterInfo(ctxRef.current.defaultFilterInfo)), { shouldRunImmediately: shouldRunImmediately }));
|
|
96
100
|
}, []),
|
|
97
101
|
setOffset: react_1.useCallback(function (offset, shouldRunImmediately) {
|
|
98
102
|
if (shouldRunImmediately === void 0) { shouldRunImmediately = false; }
|
|
103
|
+
updateReasonRef.current = 'pagination';
|
|
99
104
|
var offsetNumber = Number(offset);
|
|
100
105
|
setFilterInfoState(function (previous) { return (__assign(__assign({}, previous), { offset: offsetNumber, page: getPageFromOffset_1.default(offsetNumber, previous.pageSize), lastRefreshAt: new Date().getTime(), shouldRunImmediately: shouldRunImmediately })); });
|
|
101
106
|
}, []),
|
|
102
107
|
setPage: react_1.useCallback(function (page, shouldRunImmediately) {
|
|
103
108
|
if (shouldRunImmediately === void 0) { shouldRunImmediately = false; }
|
|
109
|
+
updateReasonRef.current = 'pagination';
|
|
104
110
|
var pageNumber = Number(page);
|
|
105
111
|
setFilterInfoState(function (previous) { return (__assign(__assign({}, previous), { offset: getOffsetFromPage_1.default(pageNumber, previous.pageSize), page: pageNumber, lastRefreshAt: new Date().getTime(), shouldRunImmediately: shouldRunImmediately })); });
|
|
106
112
|
}, []),
|
|
107
113
|
setPageSize: react_1.useCallback(function (pageSize, shouldRunImmediately) {
|
|
108
114
|
if (shouldRunImmediately === void 0) { shouldRunImmediately = false; }
|
|
115
|
+
updateReasonRef.current = 'pagination';
|
|
109
116
|
setFilterInfoState(function (previous) {
|
|
110
117
|
var pageSizeNumber = Number(pageSize);
|
|
111
118
|
var page = getPageFromOffset_1.default(previous.offset, pageSizeNumber);
|
|
@@ -115,14 +122,17 @@ function useSimpleFilter(namespace, options) {
|
|
|
115
122
|
}, []),
|
|
116
123
|
setSort: react_1.useCallback(function (sort, shouldRunImmediately) {
|
|
117
124
|
if (shouldRunImmediately === void 0) { shouldRunImmediately = false; }
|
|
125
|
+
updateReasonRef.current = 'filter';
|
|
118
126
|
setFilterInfoState(function (previous) { return (__assign(__assign({}, previous), { sort: sort, lastRefreshAt: new Date().getTime(), shouldRunImmediately: shouldRunImmediately })); });
|
|
119
127
|
}, []),
|
|
120
128
|
setCursor: react_1.useCallback(function (cursor, shouldRunImmediately) {
|
|
121
129
|
if (shouldRunImmediately === void 0) { shouldRunImmediately = false; }
|
|
130
|
+
updateReasonRef.current = 'pagination';
|
|
122
131
|
setFilterInfoState(function (previous) { return (__assign(__assign({}, previous), { cursor: cursor, lastRefreshAt: new Date().getTime(), shouldRunImmediately: shouldRunImmediately })); });
|
|
123
132
|
}, []),
|
|
124
133
|
forceRefresh: react_1.useCallback(function (shouldRunImmediately) {
|
|
125
134
|
if (shouldRunImmediately === void 0) { shouldRunImmediately = false; }
|
|
135
|
+
updateReasonRef.current = 'filter';
|
|
126
136
|
setFilterInfoState(function (previous) { return (__assign(__assign({}, previous), { lastRefreshAt: new Date().getTime(), shouldRunImmediately: shouldRunImmediately })); });
|
|
127
137
|
}, []),
|
|
128
138
|
};
|