@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.
@@ -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>) => MaybePromise<UseFilterOnChangeResult<TFilter, TResult>>;
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;
@@ -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
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@promoboxx/use-filter",
3
- "version": "1.7.0",
3
+ "version": "1.8.0",
4
4
  "description": "",
5
5
  "main": "dist/useFilter.js",
6
6
  "keywords": [],