@promoboxx/use-filter 1.8.3 → 1.9.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.
@@ -18,6 +18,7 @@ interface UseFilterOptions<TFilter, TResult> {
18
18
  * In case you want to change the default debounce duration.
19
19
  */
20
20
  debounceDuration?: number;
21
+ onBeforeSaveFilter?: (filterInfo: FilterInfo<TFilter>) => FilterInfo<TFilter>;
21
22
  }
22
23
  export interface FilterApi<TFilter, TResult> {
23
24
  /**
@@ -68,7 +69,7 @@ export interface FilterApi<TFilter, TResult> {
68
69
  /**
69
70
  * Changes the cursor.
70
71
  */
71
- setCursor: (cursor: string | null | undefined) => void;
72
+ setCursor: (cursor: string | null | undefined, shouldRunImmediately?: boolean) => void;
72
73
  /**
73
74
  * Forces a refresh of the filter.
74
75
  */
package/dist/useFilter.js CHANGED
@@ -48,6 +48,7 @@ function useFilter(namespace, options) {
48
48
  onChange: options.onChange,
49
49
  debounceDuration: options.debounceDuration,
50
50
  defaultFilterInfo: options.defaultFilterInfo,
51
+ onBeforeSaveFilter: options.onBeforeSaveFilter,
51
52
  };
52
53
  var ctxRef = react_1.useRef(ctxRefValue);
53
54
  react_1.useEffect(function () {
@@ -82,7 +83,9 @@ function useFilter(namespace, options) {
82
83
  var makeRequest = function () {
83
84
  lastRefreshAtRef.current = filterInfo.lastRefreshAt;
84
85
  var response = ctxRef.current.onChange(filterInfo, updateReasonRef.current);
85
- store_1.getFilterStore().saveFilter(namespace, filterInfo);
86
+ store_1.getFilterStore().saveFilter(namespace, ctxRef.current.onBeforeSaveFilter
87
+ ? ctxRef.current.onBeforeSaveFilter(filterInfo)
88
+ : filterInfo);
86
89
  if (!response) {
87
90
  setIsLoading(false);
88
91
  return;
@@ -111,11 +114,17 @@ function useFilter(namespace, options) {
111
114
  extra.offset = offsetNumber;
112
115
  extra.page = getPageFromOffset_1.default(offsetNumber, pageSizeNumber);
113
116
  }
114
- if (totalResults) {
115
- extra.totalResults = Number(totalResults);
117
+ // `null` / `undefined` are valid here, it means there is zero
118
+ // results, so we can't just check if it's truthy, we need to check
119
+ // for presence.
120
+ if ('totalResults' in response.filterInfo) {
121
+ extra.totalResults = Number(totalResults || 0);
116
122
  extra.totalPages = Math.ceil(extra.totalResults / pageSizeNumber);
117
123
  }
118
- if (nextCursor) {
124
+ // `null` / `undefined` are valid here, it means there is no next
125
+ // cursor, so we can't just check if it's truthy, we need to check
126
+ // for presence.
127
+ if ('nextCursor' in response.filterInfo) {
119
128
  extra.nextCursor = nextCursor;
120
129
  }
121
130
  return __assign(__assign(__assign({}, previous), filterInfoFromResponse), extra);
@@ -10,6 +10,7 @@ interface UseSimpleFilterOptions<TFilter> {
10
10
  * In case you want to change the default debounce duration.
11
11
  */
12
12
  debounceDuration?: number;
13
+ onBeforeSaveFilter?: (filterInfo: SimpleFilterInfo<TFilter>) => SimpleFilterInfo<TFilter>;
13
14
  }
14
15
  export interface SimpleFilterApi<TFilter> {
15
16
  /**
@@ -26,6 +26,7 @@ function useSimpleFilter(namespace, options) {
26
26
  namespace: namespace,
27
27
  debounceDuration: options.debounceDuration,
28
28
  defaultFilterInfo: options.defaultFilterInfo,
29
+ onBeforeSaveFilter: options.onBeforeSaveFilter,
29
30
  };
30
31
  var ctxRef = react_1.useRef(ctxRefValue);
31
32
  react_1.useEffect(function () {
@@ -49,7 +50,9 @@ function useSimpleFilter(namespace, options) {
49
50
  var timeout = undefined;
50
51
  function makeRequest() {
51
52
  lastRefreshAtRef.current = filterInfo.lastRefreshAt;
52
- store_1.getFilterStore().saveFilter(ctxRef.current.namespace, filterInfo);
53
+ store_1.getFilterStore().saveFilter(ctxRef.current.namespace, (ctxRef.current.onBeforeSaveFilter
54
+ ? ctxRef.current.onBeforeSaveFilter(filterInfo)
55
+ : filterInfo));
53
56
  setDebouncedFilterInfo(filterInfo);
54
57
  setIsLoading(false);
55
58
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@promoboxx/use-filter",
3
- "version": "1.8.3",
3
+ "version": "1.9.1",
4
4
  "description": "",
5
5
  "main": "dist/useFilter.js",
6
6
  "keywords": [],