@promoboxx/use-filter 1.10.0 → 1.11.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.
- package/dist/store/index.d.ts +1 -1
- package/dist/store/index.js +6 -5
- package/dist/useFilter.d.ts +2 -0
- package/dist/useFilter.js +17 -11
- package/dist/useSimpleFilter.d.ts +2 -0
- package/dist/useSimpleFilter.js +16 -3
- package/package.json +1 -1
package/dist/store/index.d.ts
CHANGED
package/dist/store/index.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getFilterStore = exports.setFilterStore = void 0;
|
|
4
|
-
var
|
|
4
|
+
var globalStore;
|
|
5
5
|
function setFilterStore(newStore) {
|
|
6
|
-
|
|
6
|
+
globalStore = newStore;
|
|
7
7
|
}
|
|
8
8
|
exports.setFilterStore = setFilterStore;
|
|
9
|
-
function getFilterStore() {
|
|
10
|
-
|
|
9
|
+
function getFilterStore(optionalStore) {
|
|
10
|
+
var resolvedStore = optionalStore || globalStore;
|
|
11
|
+
if (!resolvedStore) {
|
|
11
12
|
throw new Error('A store must be set with setFilterStore');
|
|
12
13
|
}
|
|
13
|
-
return
|
|
14
|
+
return resolvedStore;
|
|
14
15
|
}
|
|
15
16
|
exports.getFilterStore = getFilterStore;
|
package/dist/useFilter.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { FilterStore } from './store';
|
|
1
2
|
declare type MaybePromise<T> = T | Promise<T>;
|
|
2
3
|
interface UseFilterOptions<TFilter, TResult> {
|
|
3
4
|
/**
|
|
@@ -19,6 +20,7 @@ interface UseFilterOptions<TFilter, TResult> {
|
|
|
19
20
|
*/
|
|
20
21
|
debounceDuration?: number;
|
|
21
22
|
onBeforeSaveFilter?: (filterInfo: FilterInfo<TFilter>) => FilterInfo<TFilter>;
|
|
23
|
+
store?: FilterStore;
|
|
22
24
|
}
|
|
23
25
|
export interface FilterApi<TFilter, TResult> {
|
|
24
26
|
/**
|
package/dist/useFilter.js
CHANGED
|
@@ -32,15 +32,6 @@ var getPageFromOffset_1 = __importDefault(require("./lib/getPageFromOffset"));
|
|
|
32
32
|
var shallowEqual_1 = __importDefault(require("./lib/shallowEqual"));
|
|
33
33
|
var store_1 = require("./store");
|
|
34
34
|
function useFilter(namespace, options) {
|
|
35
|
-
var _a = react_1.useState(function () {
|
|
36
|
-
var existing = store_1.getFilterStore().getFilter(namespace);
|
|
37
|
-
var initialValue = existing
|
|
38
|
-
? __assign(__assign({}, existing), { shouldRunImmediately: true }) : undefined;
|
|
39
|
-
return initialValue;
|
|
40
|
-
}), filterInfo = _a[0], setFilterInfoState = _a[1];
|
|
41
|
-
var _b = react_1.useState(function () {
|
|
42
|
-
return store_1.getFilterStore().getData(namespace);
|
|
43
|
-
}), data = _b[0], setData = _b[1];
|
|
44
35
|
// Having these types of refs helps get around rules of hooks, and they need
|
|
45
36
|
// to be updated each render.
|
|
46
37
|
var ctxRefValue = {
|
|
@@ -49,11 +40,26 @@ function useFilter(namespace, options) {
|
|
|
49
40
|
debounceDuration: options.debounceDuration,
|
|
50
41
|
defaultFilterInfo: options.defaultFilterInfo,
|
|
51
42
|
onBeforeSaveFilter: options.onBeforeSaveFilter,
|
|
43
|
+
store: options.store,
|
|
52
44
|
};
|
|
53
45
|
var ctxRef = react_1.useRef(ctxRefValue);
|
|
54
46
|
react_1.useEffect(function () {
|
|
55
47
|
ctxRef.current = ctxRefValue;
|
|
56
48
|
});
|
|
49
|
+
var _a = react_1.useState(function () {
|
|
50
|
+
var _a;
|
|
51
|
+
var fromStore = store_1.getFilterStore(ctxRef.current.store).getFilter(namespace);
|
|
52
|
+
// If the filter is already in the store, we have to make sure it ...
|
|
53
|
+
// - has both the filter and filterInfo
|
|
54
|
+
// - has all the fields the user passed to the hook
|
|
55
|
+
if (fromStore) {
|
|
56
|
+
var filterInfo_1 = buildDefaultFilterInfo_1.default(__assign(__assign({}, fromStore), { shouldRunImmediately: true, filter: __assign(__assign({}, (_a = options.defaultFilterInfo) === null || _a === void 0 ? void 0 : _a.filter), fromStore.filter) }));
|
|
57
|
+
return filterInfo_1;
|
|
58
|
+
}
|
|
59
|
+
}), filterInfo = _a[0], setFilterInfoState = _a[1];
|
|
60
|
+
var _b = react_1.useState(function () {
|
|
61
|
+
return store_1.getFilterStore(ctxRef.current.store).getData(namespace);
|
|
62
|
+
}), data = _b[0], setData = _b[1];
|
|
57
63
|
var _c = react_1.useState(!filterInfo), isLoading = _c[0], setIsLoading = _c[1];
|
|
58
64
|
var doesFilterExist = react_1.useRef(!!filterInfo);
|
|
59
65
|
var lastRefreshAtRef = react_1.useRef(
|
|
@@ -83,7 +89,7 @@ function useFilter(namespace, options) {
|
|
|
83
89
|
var makeRequest = function () {
|
|
84
90
|
lastRefreshAtRef.current = filterInfo.lastRefreshAt;
|
|
85
91
|
var response = ctxRef.current.onChange(filterInfo, updateReasonRef.current);
|
|
86
|
-
store_1.getFilterStore().saveFilter(namespace, ctxRef.current.onBeforeSaveFilter
|
|
92
|
+
store_1.getFilterStore(ctxRef.current.store).saveFilter(namespace, ctxRef.current.onBeforeSaveFilter
|
|
87
93
|
? ctxRef.current.onBeforeSaveFilter(filterInfo)
|
|
88
94
|
: filterInfo);
|
|
89
95
|
if (!response) {
|
|
@@ -132,7 +138,7 @@ function useFilter(namespace, options) {
|
|
|
132
138
|
}
|
|
133
139
|
if (response.data) {
|
|
134
140
|
setData(response.data);
|
|
135
|
-
store_1.getFilterStore().saveData(namespace, response.data);
|
|
141
|
+
store_1.getFilterStore(ctxRef.current.store).saveData(namespace, response.data);
|
|
136
142
|
}
|
|
137
143
|
}
|
|
138
144
|
if (isPromise(response)) {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { FilterStore } from './store';
|
|
1
2
|
import { UseFilterUpdateReason } from './useFilter';
|
|
2
3
|
interface UseSimpleFilterOptions<TFilter> {
|
|
3
4
|
/**
|
|
@@ -11,6 +12,7 @@ interface UseSimpleFilterOptions<TFilter> {
|
|
|
11
12
|
*/
|
|
12
13
|
debounceDuration?: number;
|
|
13
14
|
onBeforeSaveFilter?: (filterInfo: SimpleFilterInfo<TFilter>) => SimpleFilterInfo<TFilter>;
|
|
15
|
+
store?: FilterStore;
|
|
14
16
|
}
|
|
15
17
|
export interface SimpleFilterApi<TFilter> {
|
|
16
18
|
/**
|
package/dist/useSimpleFilter.js
CHANGED
|
@@ -27,14 +27,27 @@ function useSimpleFilter(namespace, options) {
|
|
|
27
27
|
debounceDuration: options.debounceDuration,
|
|
28
28
|
defaultFilterInfo: options.defaultFilterInfo,
|
|
29
29
|
onBeforeSaveFilter: options.onBeforeSaveFilter,
|
|
30
|
+
store: options.store,
|
|
30
31
|
};
|
|
31
32
|
var ctxRef = react_1.useRef(ctxRefValue);
|
|
32
33
|
react_1.useEffect(function () {
|
|
33
34
|
ctxRef.current = ctxRefValue;
|
|
34
35
|
});
|
|
35
36
|
var _a = react_1.useState(false), isLoading = _a[0], setIsLoading = _a[1];
|
|
36
|
-
var _b = react_1.useState(function () {
|
|
37
|
-
|
|
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];
|
|
38
51
|
var _c = react_1.useState(filterInfo), debouncedFilterInfo = _c[0], setDebouncedFilterInfo = _c[1];
|
|
39
52
|
// Not sure this is needed in simple mode?
|
|
40
53
|
var lastRefreshAtRef = react_1.useRef(-1);
|
|
@@ -50,7 +63,7 @@ function useSimpleFilter(namespace, options) {
|
|
|
50
63
|
var timeout = undefined;
|
|
51
64
|
function makeRequest() {
|
|
52
65
|
lastRefreshAtRef.current = filterInfo.lastRefreshAt;
|
|
53
|
-
store_1.getFilterStore().saveFilter(ctxRef.current.namespace, (ctxRef.current.onBeforeSaveFilter
|
|
66
|
+
store_1.getFilterStore(ctxRef.current.store).saveFilter(ctxRef.current.namespace, (ctxRef.current.onBeforeSaveFilter
|
|
54
67
|
? ctxRef.current.onBeforeSaveFilter(filterInfo)
|
|
55
68
|
: filterInfo));
|
|
56
69
|
setDebouncedFilterInfo(filterInfo);
|