@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.
- package/dist/cjs/_virtual/_rolldown/runtime.js +29 -0
- package/dist/cjs/lib/buildDefaultFilterInfo.d.ts +5 -0
- package/dist/cjs/lib/buildDefaultFilterInfo.js +27 -0
- package/dist/{lib → cjs/lib}/getOffsetFromPage.d.ts +2 -1
- package/dist/cjs/lib/getOffsetFromPage.js +8 -0
- package/dist/{lib → cjs/lib}/getPageFromOffset.d.ts +2 -1
- package/dist/cjs/lib/getPageFromOffset.js +8 -0
- package/dist/{lib → cjs/lib}/shallowEqual.d.ts +2 -1
- package/dist/cjs/lib/shallowEqual.js +24 -0
- package/dist/cjs/store/index.d.ts +14 -0
- package/dist/cjs/store/index.js +18 -0
- package/dist/cjs/store/localStorageStore.d.ts +5 -0
- package/dist/cjs/store/localStorageStore.js +33 -0
- package/dist/cjs/store/memoryStore.d.ts +5 -0
- package/dist/cjs/store/memoryStore.js +25 -0
- package/dist/cjs/store/reduxHelpers/createActions.d.ts +16 -0
- package/dist/cjs/store/reduxHelpers/createActions.js +16 -0
- package/dist/cjs/store/reduxHelpers/createReducer.d.ts +10 -0
- package/dist/cjs/store/reduxHelpers/createReducer.js +25 -0
- package/dist/cjs/store/reduxStore.d.ts +18 -0
- package/dist/cjs/store/reduxStore.js +63 -0
- package/dist/cjs/store/urlParamStore.d.ts +8 -0
- package/dist/cjs/store/urlParamStore.js +68 -0
- package/dist/cjs/useFilter.d.ts +106 -0
- package/dist/cjs/useFilter.js +251 -0
- package/dist/cjs/useSimpleFilter.d.ts +89 -0
- package/dist/cjs/useSimpleFilter.js +198 -0
- package/dist/esm/lib/buildDefaultFilterInfo.d.mts +6 -0
- package/dist/esm/lib/buildDefaultFilterInfo.mjs +27 -0
- package/dist/esm/lib/getOffsetFromPage.d.mts +4 -0
- package/dist/esm/lib/getOffsetFromPage.mjs +7 -0
- package/dist/esm/lib/getPageFromOffset.d.mts +4 -0
- package/dist/esm/lib/getPageFromOffset.mjs +7 -0
- package/dist/esm/lib/shallowEqual.d.mts +4 -0
- package/dist/esm/lib/shallowEqual.mjs +23 -0
- package/dist/esm/store/index.d.mts +14 -0
- package/dist/esm/store/index.mjs +15 -0
- package/dist/esm/store/localStorageStore.d.mts +6 -0
- package/dist/esm/store/localStorageStore.mjs +32 -0
- package/dist/esm/store/memoryStore.d.mts +6 -0
- package/dist/esm/store/memoryStore.mjs +24 -0
- package/dist/esm/store/reduxHelpers/createActions.d.mts +16 -0
- package/dist/esm/store/reduxHelpers/createActions.mjs +15 -0
- package/dist/esm/store/reduxHelpers/createReducer.d.mts +11 -0
- package/dist/esm/store/reduxHelpers/createReducer.mjs +24 -0
- package/dist/esm/store/reduxStore.d.mts +18 -0
- package/dist/esm/store/reduxStore.mjs +61 -0
- package/dist/esm/store/urlParamStore.d.mts +8 -0
- package/dist/esm/store/urlParamStore.mjs +63 -0
- package/dist/esm/useFilter.d.mts +106 -0
- package/dist/esm/useFilter.mjs +251 -0
- package/dist/esm/useSimpleFilter.d.mts +89 -0
- package/dist/esm/useSimpleFilter.mjs +198 -0
- package/package.json +33 -43
- package/dist/lib/buildDefaultFilterInfo.d.ts +0 -3
- package/dist/lib/buildDefaultFilterInfo.js +0 -35
- package/dist/lib/getOffsetFromPage.js +0 -6
- package/dist/lib/getPageFromOffset.js +0 -6
- package/dist/lib/shallowEqual.js +0 -23
- package/dist/store/index.d.ts +0 -10
- package/dist/store/index.js +0 -16
- package/dist/store/localStorageStore.d.ts +0 -3
- package/dist/store/localStorageStore.js +0 -31
- package/dist/store/memoryStore.d.ts +0 -3
- package/dist/store/memoryStore.js +0 -23
- package/dist/store/reduxHelpers/createActions.d.ts +0 -16
- package/dist/store/reduxHelpers/createActions.js +0 -27
- package/dist/store/reduxHelpers/createReducer.d.ts +0 -8
- package/dist/store/reduxHelpers/createReducer.js +0 -26
- package/dist/store/reduxStore.d.ts +0 -15
- package/dist/store/reduxStore.js +0 -67
- package/dist/store/urlParamStore.d.ts +0 -4
- package/dist/store/urlParamStore.js +0 -91
- package/dist/useFilter.d.ts +0 -103
- package/dist/useFilter.js +0 -254
- package/dist/useSimpleFilter.d.ts +0 -86
- package/dist/useSimpleFilter.js +0 -173
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { FilterStore } from "./store/index.mjs";
|
|
2
|
+
import { UseFilterUpdateReason } from "./useFilter.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/useSimpleFilter.d.ts
|
|
5
|
+
interface UseSimpleFilterOptions<TFilter> {
|
|
6
|
+
/**
|
|
7
|
+
* Default values for your filter. When calling `.reset` your filter will be
|
|
8
|
+
* set to this.
|
|
9
|
+
* Changing these values does not cause a call to happen.
|
|
10
|
+
*/
|
|
11
|
+
defaultFilterInfo?: Partial<SimpleFilterInfo<TFilter>>;
|
|
12
|
+
/**
|
|
13
|
+
* In case you want to change the default debounce duration.
|
|
14
|
+
*/
|
|
15
|
+
debounceDuration?: number;
|
|
16
|
+
onBeforeSaveFilter?: (filterInfo: SimpleFilterInfo<TFilter>) => SimpleFilterInfo<TFilter>;
|
|
17
|
+
store?: FilterStore;
|
|
18
|
+
}
|
|
19
|
+
interface SimpleFilterApi<TFilter> {
|
|
20
|
+
/**
|
|
21
|
+
* Really more "is debouncing", since simple mode doesn't know when your code
|
|
22
|
+
* is doing anything.
|
|
23
|
+
*/
|
|
24
|
+
isLoading: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Access to the filter and its metadata.
|
|
27
|
+
*/
|
|
28
|
+
filterInfo: SimpleFilterInfo<TFilter>;
|
|
29
|
+
/**
|
|
30
|
+
* Same as the regular `filterInfo`, but updates in a debounced fashion.
|
|
31
|
+
*/
|
|
32
|
+
debouncedFilterInfo: SimpleFilterInfo<TFilter>;
|
|
33
|
+
/**
|
|
34
|
+
* Why the last update happened.
|
|
35
|
+
*/
|
|
36
|
+
updateReason: UseFilterUpdateReason;
|
|
37
|
+
/**
|
|
38
|
+
* Update one or more values in your filter.
|
|
39
|
+
*/
|
|
40
|
+
updateFilter: (filter: Partial<TFilter>, shouldRunImmediately?: boolean) => void;
|
|
41
|
+
/**
|
|
42
|
+
* Does the boring math for you based on your `pageSize` and `totalResults`.
|
|
43
|
+
*/
|
|
44
|
+
pagingInfo: (total: string | number | null | undefined) => {
|
|
45
|
+
totalResults: number;
|
|
46
|
+
totalPages: number;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Resets the filter back to `defaultFilterInfo`.
|
|
50
|
+
*/
|
|
51
|
+
resetFilter: (shouldRunImmediately?: boolean) => void;
|
|
52
|
+
/**
|
|
53
|
+
* Changes the offset. Will update `page`.
|
|
54
|
+
*/
|
|
55
|
+
setOffset: (offset: number | string, shouldRunImmediately?: boolean) => void;
|
|
56
|
+
/**
|
|
57
|
+
* Changes the page. Will update `offset`.
|
|
58
|
+
*/
|
|
59
|
+
setPage: (page: number | string, shouldRunImmediately?: boolean) => void;
|
|
60
|
+
/**
|
|
61
|
+
* Changes the page size.
|
|
62
|
+
*/
|
|
63
|
+
setPageSize: (pageSize: number | string, shouldRunImmediately?: boolean) => void;
|
|
64
|
+
/**
|
|
65
|
+
* Change the sort method.
|
|
66
|
+
*/
|
|
67
|
+
setSort: (sort: string, shouldRunImmediately?: boolean) => void;
|
|
68
|
+
/**
|
|
69
|
+
* Changes the cursor.
|
|
70
|
+
*/
|
|
71
|
+
setCursor: (cursor: string | null | undefined, shouldRunImmediately?: boolean) => void;
|
|
72
|
+
/**
|
|
73
|
+
* Forces a refresh of the filter.
|
|
74
|
+
*/
|
|
75
|
+
forceRefresh: (shouldRunImmediately?: boolean) => void;
|
|
76
|
+
}
|
|
77
|
+
interface SimpleFilterInfo<TFilter> {
|
|
78
|
+
filter: TFilter;
|
|
79
|
+
sort?: string;
|
|
80
|
+
offset: number;
|
|
81
|
+
page: number;
|
|
82
|
+
pageSize: number;
|
|
83
|
+
lastRefreshAt: number;
|
|
84
|
+
cursor?: string | null;
|
|
85
|
+
shouldRunImmediately: boolean;
|
|
86
|
+
}
|
|
87
|
+
declare function useSimpleFilter<TFilter extends Record<string, unknown>>(namespace: string, options: UseSimpleFilterOptions<TFilter>): SimpleFilterApi<TFilter>;
|
|
88
|
+
//#endregion
|
|
89
|
+
export { SimpleFilterApi, SimpleFilterInfo, useSimpleFilter as default };
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import getOffsetFromPage from "./lib/getOffsetFromPage.mjs";
|
|
2
|
+
import getPageFromOffset from "./lib/getPageFromOffset.mjs";
|
|
3
|
+
import shallowEqual from "./lib/shallowEqual.mjs";
|
|
4
|
+
import { getFilterStore } from "./store/index.mjs";
|
|
5
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
6
|
+
|
|
7
|
+
//#region src/useSimpleFilter.ts
|
|
8
|
+
function useSimpleFilter(namespace, options) {
|
|
9
|
+
const ctxRefValue = {
|
|
10
|
+
namespace,
|
|
11
|
+
debounceDuration: options.debounceDuration,
|
|
12
|
+
defaultFilterInfo: options.defaultFilterInfo,
|
|
13
|
+
onBeforeSaveFilter: options.onBeforeSaveFilter,
|
|
14
|
+
store: options.store
|
|
15
|
+
};
|
|
16
|
+
const ctxRef = useRef(ctxRefValue);
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
ctxRef.current = ctxRefValue;
|
|
19
|
+
});
|
|
20
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
21
|
+
const [filterInfo, setFilterInfoState] = useState(() => {
|
|
22
|
+
const fromStore = getFilterStore(ctxRef.current.store).getFilter(namespace);
|
|
23
|
+
if (fromStore) {
|
|
24
|
+
const filterInfo = buildDefaultFilterInfo({
|
|
25
|
+
...fromStore,
|
|
26
|
+
shouldRunImmediately: true,
|
|
27
|
+
filter: {
|
|
28
|
+
...options.defaultFilterInfo?.filter,
|
|
29
|
+
...fromStore.filter
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
return filterInfo;
|
|
33
|
+
} else {
|
|
34
|
+
return buildDefaultFilterInfo({
|
|
35
|
+
...options.defaultFilterInfo,
|
|
36
|
+
shouldRunImmediately: true
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
const [debouncedFilterInfo, setDebouncedFilterInfo] = useState(filterInfo);
|
|
41
|
+
const lastRefreshAtRef = useRef(-1);
|
|
42
|
+
const updateReasonRef = useRef("initial");
|
|
43
|
+
useEffect(() => {
|
|
44
|
+
setIsLoading(true);
|
|
45
|
+
if (lastRefreshAtRef.current === filterInfo.lastRefreshAt) {
|
|
46
|
+
setIsLoading(false);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
let timeout = undefined;
|
|
50
|
+
function makeRequest() {
|
|
51
|
+
lastRefreshAtRef.current = filterInfo.lastRefreshAt;
|
|
52
|
+
getFilterStore(ctxRef.current.store).saveFilter(ctxRef.current.namespace, ctxRef.current.onBeforeSaveFilter ? ctxRef.current.onBeforeSaveFilter(filterInfo) : filterInfo);
|
|
53
|
+
setDebouncedFilterInfo(filterInfo);
|
|
54
|
+
setIsLoading(false);
|
|
55
|
+
}
|
|
56
|
+
if (filterInfo.shouldRunImmediately) {
|
|
57
|
+
makeRequest();
|
|
58
|
+
} else {
|
|
59
|
+
timeout = setTimeout(makeRequest, ctxRef.current.debounceDuration ?? 500);
|
|
60
|
+
}
|
|
61
|
+
return () => {
|
|
62
|
+
if (timeout) {
|
|
63
|
+
clearTimeout(timeout);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
}, [filterInfo]);
|
|
67
|
+
const previousTotalRef = useRef(0);
|
|
68
|
+
const api = {
|
|
69
|
+
isLoading,
|
|
70
|
+
filterInfo,
|
|
71
|
+
debouncedFilterInfo,
|
|
72
|
+
updateReason: updateReasonRef.current,
|
|
73
|
+
updateFilter: useCallback((filter, shouldRunImmediately = false) => {
|
|
74
|
+
updateReasonRef.current = "filter";
|
|
75
|
+
setFilterInfoState((previous) => {
|
|
76
|
+
const nextFilter = {
|
|
77
|
+
...previous.filter,
|
|
78
|
+
...filter
|
|
79
|
+
};
|
|
80
|
+
if (shallowEqual(previous.filter, nextFilter)) {
|
|
81
|
+
return previous;
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
...previous,
|
|
85
|
+
shouldRunImmediately,
|
|
86
|
+
offset: 0,
|
|
87
|
+
page: 1,
|
|
88
|
+
totalResults: 1,
|
|
89
|
+
totalPages: 1,
|
|
90
|
+
filter: nextFilter,
|
|
91
|
+
cursor: undefined,
|
|
92
|
+
lastRefreshAt: new Date().getTime()
|
|
93
|
+
};
|
|
94
|
+
});
|
|
95
|
+
}, []),
|
|
96
|
+
pagingInfo: useCallback((total) => {
|
|
97
|
+
const normalized = Number(total == null ? previousTotalRef.current : total);
|
|
98
|
+
previousTotalRef.current = normalized;
|
|
99
|
+
return {
|
|
100
|
+
totalResults: normalized,
|
|
101
|
+
totalPages: Math.ceil(normalized / filterInfo.pageSize)
|
|
102
|
+
};
|
|
103
|
+
}, [filterInfo.pageSize]),
|
|
104
|
+
resetFilter: useCallback((shouldRunImmediately = false) => {
|
|
105
|
+
updateReasonRef.current = "filter";
|
|
106
|
+
setFilterInfoState({
|
|
107
|
+
...buildDefaultFilterInfo(ctxRef.current.defaultFilterInfo),
|
|
108
|
+
shouldRunImmediately
|
|
109
|
+
});
|
|
110
|
+
}, []),
|
|
111
|
+
setOffset: useCallback((offset, shouldRunImmediately = false) => {
|
|
112
|
+
updateReasonRef.current = "pagination";
|
|
113
|
+
const offsetNumber = Number(offset);
|
|
114
|
+
setFilterInfoState((previous) => ({
|
|
115
|
+
...previous,
|
|
116
|
+
offset: offsetNumber,
|
|
117
|
+
page: getPageFromOffset(offsetNumber, previous.pageSize),
|
|
118
|
+
lastRefreshAt: new Date().getTime(),
|
|
119
|
+
shouldRunImmediately
|
|
120
|
+
}));
|
|
121
|
+
}, []),
|
|
122
|
+
setPage: useCallback((page, shouldRunImmediately = false) => {
|
|
123
|
+
updateReasonRef.current = "pagination";
|
|
124
|
+
const pageNumber = Number(page);
|
|
125
|
+
setFilterInfoState((previous) => ({
|
|
126
|
+
...previous,
|
|
127
|
+
offset: getOffsetFromPage(pageNumber, previous.pageSize),
|
|
128
|
+
page: pageNumber,
|
|
129
|
+
lastRefreshAt: new Date().getTime(),
|
|
130
|
+
shouldRunImmediately
|
|
131
|
+
}));
|
|
132
|
+
}, []),
|
|
133
|
+
setPageSize: useCallback((pageSize, shouldRunImmediately = false) => {
|
|
134
|
+
updateReasonRef.current = "pagination";
|
|
135
|
+
setFilterInfoState((previous) => {
|
|
136
|
+
const pageSizeNumber = Number(pageSize);
|
|
137
|
+
const page = getPageFromOffset(previous.offset, pageSizeNumber);
|
|
138
|
+
const offset = getOffsetFromPage(page, pageSizeNumber);
|
|
139
|
+
return {
|
|
140
|
+
...previous,
|
|
141
|
+
pageSize: pageSizeNumber,
|
|
142
|
+
offset,
|
|
143
|
+
page,
|
|
144
|
+
lastRefreshAt: new Date().getTime(),
|
|
145
|
+
shouldRunImmediately
|
|
146
|
+
};
|
|
147
|
+
});
|
|
148
|
+
}, []),
|
|
149
|
+
setSort: useCallback((sort, shouldRunImmediately = false) => {
|
|
150
|
+
updateReasonRef.current = "filter";
|
|
151
|
+
setFilterInfoState((previous) => ({
|
|
152
|
+
...previous,
|
|
153
|
+
sort,
|
|
154
|
+
lastRefreshAt: new Date().getTime(),
|
|
155
|
+
shouldRunImmediately
|
|
156
|
+
}));
|
|
157
|
+
}, []),
|
|
158
|
+
setCursor: useCallback((cursor, shouldRunImmediately = false) => {
|
|
159
|
+
updateReasonRef.current = "pagination";
|
|
160
|
+
setFilterInfoState((previous) => ({
|
|
161
|
+
...previous,
|
|
162
|
+
cursor,
|
|
163
|
+
lastRefreshAt: new Date().getTime(),
|
|
164
|
+
shouldRunImmediately
|
|
165
|
+
}));
|
|
166
|
+
}, []),
|
|
167
|
+
forceRefresh: useCallback((shouldRunImmediately = false) => {
|
|
168
|
+
updateReasonRef.current = "filter";
|
|
169
|
+
setFilterInfoState((previous) => ({
|
|
170
|
+
...previous,
|
|
171
|
+
lastRefreshAt: new Date().getTime(),
|
|
172
|
+
shouldRunImmediately
|
|
173
|
+
}));
|
|
174
|
+
}, [])
|
|
175
|
+
};
|
|
176
|
+
return api;
|
|
177
|
+
}
|
|
178
|
+
function buildDefaultFilterInfo(filterInfo = {}) {
|
|
179
|
+
const merged = {
|
|
180
|
+
filter: {},
|
|
181
|
+
sort: undefined,
|
|
182
|
+
pageSize: 20,
|
|
183
|
+
lastRefreshAt: new Date().getTime(),
|
|
184
|
+
offset: 0,
|
|
185
|
+
page: 1,
|
|
186
|
+
shouldRunImmediately: false,
|
|
187
|
+
...filterInfo
|
|
188
|
+
};
|
|
189
|
+
if (filterInfo.page != null && filterInfo.offset == null) {
|
|
190
|
+
merged.offset = getOffsetFromPage(filterInfo.page, merged.pageSize);
|
|
191
|
+
} else if (filterInfo.page == null && filterInfo.offset != null) {
|
|
192
|
+
merged.page = getPageFromOffset(filterInfo.offset, merged.pageSize);
|
|
193
|
+
}
|
|
194
|
+
return merged;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
//#endregion
|
|
198
|
+
export { useSimpleFilter as default };
|
package/package.json
CHANGED
|
@@ -1,55 +1,45 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@promoboxx/use-filter",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"description": "",
|
|
5
|
-
"main": "dist/useFilter.js",
|
|
5
|
+
"main": "./dist/cjs/useFilter.js",
|
|
6
|
+
"module": "./dist/esm/useFilter.mjs",
|
|
6
7
|
"keywords": [],
|
|
7
8
|
"author": "",
|
|
8
9
|
"license": "ISC",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"import": "./dist/esm/useFilter.mjs",
|
|
13
|
+
"require": "./dist/cjs/useFilter.js"
|
|
14
|
+
},
|
|
15
|
+
"./store": {
|
|
16
|
+
"import": "./dist/esm/store/index.mjs",
|
|
17
|
+
"require": "./dist/cjs/store/index.js"
|
|
18
|
+
},
|
|
19
|
+
"./*": {
|
|
20
|
+
"import": "./dist/esm/*.mjs",
|
|
21
|
+
"require": "./dist/cjs/*.js"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
9
24
|
"devDependencies": {
|
|
10
|
-
"@promoboxx/eslint-config": "^
|
|
11
|
-
"@testing-library/react": "^
|
|
12
|
-
"@types/
|
|
13
|
-
"@types/
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
25
|
+
"@promoboxx/eslint-config": "^4.0.4",
|
|
26
|
+
"@testing-library/react": "^16.3.2",
|
|
27
|
+
"@types/qs": "^6.9.8",
|
|
28
|
+
"@types/react": "^19.2.15",
|
|
29
|
+
"eslint": "^9.39.4",
|
|
30
|
+
"jsdom": "^29.1.1",
|
|
31
|
+
"prettier": "^3.0.3",
|
|
32
|
+
"react": "^19.2.6",
|
|
33
|
+
"react-dom": "^19.2.6",
|
|
34
|
+
"redux": "^5.0.1",
|
|
35
|
+
"tsdown": "^0.22.1",
|
|
36
|
+
"typescript": "^6.0.3",
|
|
37
|
+
"vitest": "^4.1.7"
|
|
23
38
|
},
|
|
24
|
-
"files": [
|
|
25
|
-
"dist/lib/getOffsetFromPage.d.ts",
|
|
26
|
-
"dist/lib/getPageFromOffset.d.ts",
|
|
27
|
-
"dist/lib/getPageFromOffset.js",
|
|
28
|
-
"dist/lib/shallowEqual.d.ts",
|
|
29
|
-
"dist/lib/shallowEqual.js",
|
|
30
|
-
"dist/lib/buildDefaultFilterInfo.d.ts",
|
|
31
|
-
"dist/lib/getOffsetFromPage.js",
|
|
32
|
-
"dist/lib/buildDefaultFilterInfo.js",
|
|
33
|
-
"dist/useFilter.d.ts",
|
|
34
|
-
"dist/useFilter.js",
|
|
35
|
-
"dist/useSimpleFilter.d.ts",
|
|
36
|
-
"dist/useSimpleFilter.js",
|
|
37
|
-
"dist/store/memoryStore.d.ts",
|
|
38
|
-
"dist/store/reduxStore.d.ts",
|
|
39
|
-
"dist/store/localStorageStore.d.ts",
|
|
40
|
-
"dist/store/reduxHelpers/createReducer.d.ts",
|
|
41
|
-
"dist/store/reduxHelpers/createActions.d.ts",
|
|
42
|
-
"dist/store/reduxHelpers/createActions.js",
|
|
43
|
-
"dist/store/reduxHelpers/createReducer.js",
|
|
44
|
-
"dist/store/index.d.ts",
|
|
45
|
-
"dist/store/index.js",
|
|
46
|
-
"dist/store/localStorageStore.js",
|
|
47
|
-
"dist/store/urlParamStore.d.ts",
|
|
48
|
-
"dist/store/urlParamStore.js",
|
|
49
|
-
"dist/store/memoryStore.js",
|
|
50
|
-
"dist/store/reduxStore.js"
|
|
51
|
-
],
|
|
52
39
|
"dependencies": {
|
|
53
40
|
"qs": "^6.11.2"
|
|
41
|
+
},
|
|
42
|
+
"peerDependencies": {
|
|
43
|
+
"react": ">=16.8.0"
|
|
54
44
|
}
|
|
55
45
|
}
|
|
@@ -1,35 +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 getOffsetFromPage_1 = __importDefault(require("./getOffsetFromPage"));
|
|
18
|
-
var getPageFromOffset_1 = __importDefault(require("./getPageFromOffset"));
|
|
19
|
-
function buildDefaultFilterInfo(filterInfo) {
|
|
20
|
-
if (filterInfo === void 0) { filterInfo = {}; }
|
|
21
|
-
var merged = __assign({
|
|
22
|
-
// Cast here to work around "'T' could be instantiated with an arbitrary
|
|
23
|
-
// type which could be unrelated to '{}'"
|
|
24
|
-
filter: {}, sort: undefined, pageSize: 20, lastRefreshAt: new Date().getTime(), totalResults: 1, totalPages: 1, offset: 0, page: 1, shouldRunImmediately: false }, filterInfo);
|
|
25
|
-
// If there's a page but no offset, set the offset.
|
|
26
|
-
if (filterInfo.page != null && filterInfo.offset == null) {
|
|
27
|
-
merged.offset = getOffsetFromPage_1.default(filterInfo.page, merged.pageSize);
|
|
28
|
-
// If there's an offset but no page, set the page.
|
|
29
|
-
}
|
|
30
|
-
else if (filterInfo.page == null && filterInfo.offset != null) {
|
|
31
|
-
merged.page = getPageFromOffset_1.default(filterInfo.offset, merged.pageSize);
|
|
32
|
-
}
|
|
33
|
-
return merged;
|
|
34
|
-
}
|
|
35
|
-
exports.default = buildDefaultFilterInfo;
|
package/dist/lib/shallowEqual.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
var shallowEqual = function (objA, objB) {
|
|
4
|
-
if (Object.is(objA, objB)) {
|
|
5
|
-
return true;
|
|
6
|
-
}
|
|
7
|
-
if (typeof objA !== 'object' || !objA || typeof objB !== 'object' || !objB) {
|
|
8
|
-
return false;
|
|
9
|
-
}
|
|
10
|
-
var keysA = Object.keys(objA);
|
|
11
|
-
var keysB = Object.keys(objB);
|
|
12
|
-
if (keysA.length !== keysB.length) {
|
|
13
|
-
return false;
|
|
14
|
-
}
|
|
15
|
-
for (var _i = 0, keysA_1 = keysA; _i < keysA_1.length; _i++) {
|
|
16
|
-
var key = keysA_1[_i];
|
|
17
|
-
if (!Object.is(objA[key], objB[key])) {
|
|
18
|
-
return false;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
return true;
|
|
22
|
-
};
|
|
23
|
-
exports.default = shallowEqual;
|
package/dist/store/index.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { FilterInfo } from '../useFilter';
|
|
2
|
-
export interface FilterStore {
|
|
3
|
-
getFilter<TFilter = any>(namespace: string): FilterInfo<TFilter> | null | undefined;
|
|
4
|
-
saveFilter<TFilter = any>(namespace: string, filter: FilterInfo<TFilter>): void;
|
|
5
|
-
getData<TResult = any>(namespace: string): TResult | null | undefined;
|
|
6
|
-
saveData<TResult = any>(namespace: string, data: TResult): void;
|
|
7
|
-
clear(): void;
|
|
8
|
-
}
|
|
9
|
-
export declare function setFilterStore(newStore: FilterStore): void;
|
|
10
|
-
export declare function getFilterStore(optionalStore?: FilterStore): FilterStore;
|
package/dist/store/index.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getFilterStore = exports.setFilterStore = void 0;
|
|
4
|
-
var globalStore;
|
|
5
|
-
function setFilterStore(newStore) {
|
|
6
|
-
globalStore = newStore;
|
|
7
|
-
}
|
|
8
|
-
exports.setFilterStore = setFilterStore;
|
|
9
|
-
function getFilterStore(optionalStore) {
|
|
10
|
-
var resolvedStore = optionalStore || globalStore;
|
|
11
|
-
if (!resolvedStore) {
|
|
12
|
-
throw new Error('A store must be set with setFilterStore');
|
|
13
|
-
}
|
|
14
|
-
return resolvedStore;
|
|
15
|
-
}
|
|
16
|
-
exports.getFilterStore = getFilterStore;
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
var prefix = 'useFilter';
|
|
4
|
-
var localStorageStore = {
|
|
5
|
-
getFilter: function (namespace) {
|
|
6
|
-
var item = localStorage.getItem(prefix + "/" + namespace + "/filter");
|
|
7
|
-
if (item) {
|
|
8
|
-
return JSON.parse(item);
|
|
9
|
-
}
|
|
10
|
-
},
|
|
11
|
-
saveFilter: function (namespace, filter) {
|
|
12
|
-
localStorage.setItem(prefix + "/" + namespace + "/filter", JSON.stringify(filter));
|
|
13
|
-
},
|
|
14
|
-
getData: function (namespace) {
|
|
15
|
-
var item = localStorage.getItem(prefix + "/" + namespace + "/data");
|
|
16
|
-
if (item) {
|
|
17
|
-
return JSON.parse(item);
|
|
18
|
-
}
|
|
19
|
-
},
|
|
20
|
-
saveData: function (namespace, data) {
|
|
21
|
-
localStorage.setItem(prefix + "/" + namespace + "/data", JSON.stringify(data));
|
|
22
|
-
},
|
|
23
|
-
clear: function () {
|
|
24
|
-
for (var key in localStorage) {
|
|
25
|
-
if (key.startsWith(prefix)) {
|
|
26
|
-
localStorage.removeItem(key);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
},
|
|
30
|
-
};
|
|
31
|
-
exports.default = localStorageStore;
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
var cachedFilters = {};
|
|
4
|
-
var cachedData = {};
|
|
5
|
-
var memoryStore = {
|
|
6
|
-
getFilter: function (namespace) {
|
|
7
|
-
return cachedFilters[namespace];
|
|
8
|
-
},
|
|
9
|
-
saveFilter: function (namespace, filter) {
|
|
10
|
-
cachedFilters[namespace] = filter;
|
|
11
|
-
},
|
|
12
|
-
getData: function (namespace) {
|
|
13
|
-
return cachedData[namespace];
|
|
14
|
-
},
|
|
15
|
-
saveData: function (namespace, data) {
|
|
16
|
-
cachedData[namespace] = data;
|
|
17
|
-
},
|
|
18
|
-
clear: function () {
|
|
19
|
-
cachedFilters = {};
|
|
20
|
-
cachedData = {};
|
|
21
|
-
},
|
|
22
|
-
};
|
|
23
|
-
exports.default = memoryStore;
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
interface CreateActions {
|
|
2
|
-
<Namespace extends string, PayloadCreatorMap extends ReduxPayloadCreatorMap>(namespace: Namespace, actions: PayloadCreatorMap): ReduxActionCreatorMap<Namespace, PayloadCreatorMap>;
|
|
3
|
-
}
|
|
4
|
-
declare type ReduxPayloadCreatorMap = Record<string, (...args: any[]) => any>;
|
|
5
|
-
export declare type ReduxActionCreatorMap<Namespace extends string, PayloadCreatorMap extends ReduxPayloadCreatorMap> = {
|
|
6
|
-
[Type in keyof PayloadCreatorMap]: Type extends string ? ReduxActionCreator<Namespace, Type, PayloadCreatorMap[Type]> : undefined;
|
|
7
|
-
};
|
|
8
|
-
export interface ReduxActionCreator<Namespace extends string = string, Type extends string = string, Fn extends (...args: any[]) => any = (...args: any[]) => any> {
|
|
9
|
-
(...args: Parameters<Fn>): {
|
|
10
|
-
type: `${Namespace}/${Type}`;
|
|
11
|
-
payload: ReturnType<Fn>;
|
|
12
|
-
};
|
|
13
|
-
actionType: `${Namespace}/${Type}`;
|
|
14
|
-
}
|
|
15
|
-
declare const createActions: CreateActions;
|
|
16
|
-
export default createActions;
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
var createActions = function (namespace, payloadCreatorMap) {
|
|
4
|
-
var actionCreators = {};
|
|
5
|
-
var _loop_1 = function (key) {
|
|
6
|
-
actionCreators[key] = (function () {
|
|
7
|
-
var args = [];
|
|
8
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
9
|
-
args[_i] = arguments[_i];
|
|
10
|
-
}
|
|
11
|
-
return ({
|
|
12
|
-
type: namespace + "/" + key,
|
|
13
|
-
payload: payloadCreatorMap[key].apply(payloadCreatorMap, args),
|
|
14
|
-
// Need to cast here because there's no way to assign a function + extra
|
|
15
|
-
// attributes in one go.
|
|
16
|
-
});
|
|
17
|
-
});
|
|
18
|
-
actionCreators[key].actionType = namespace + "/" + key;
|
|
19
|
-
};
|
|
20
|
-
for (var key in payloadCreatorMap) {
|
|
21
|
-
_loop_1(key);
|
|
22
|
-
}
|
|
23
|
-
// TODO There's probably a better type to use here, but it's not super
|
|
24
|
-
// important since `CreateActions` already specifies one.
|
|
25
|
-
return actionCreators;
|
|
26
|
-
};
|
|
27
|
-
exports.default = createActions;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { Action } from 'redux';
|
|
2
|
-
import { ReduxActionCreator } from './createActions';
|
|
3
|
-
interface ReduxReducerBuilder<State> {
|
|
4
|
-
addHandler: <ActionCreator extends ReduxActionCreator>(actionCreator: ActionCreator, handler: (state: State, action: ReturnType<ActionCreator>) => State) => ReduxReducerBuilder<State>;
|
|
5
|
-
addCase: <HandlerAction extends Action>(actionType: string, handler: (state: State, action: HandlerAction) => State) => ReduxReducerBuilder<State>;
|
|
6
|
-
}
|
|
7
|
-
declare function createReducer<State>(initialState: State, builderFn: (builder: ReduxReducerBuilder<State>) => void): (state: State | undefined, action: Action) => State;
|
|
8
|
-
export default createReducer;
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
function createReducer(initialState, builderFn) {
|
|
4
|
-
var handlers = {};
|
|
5
|
-
var builder = {
|
|
6
|
-
addHandler: function (actionCreator, handler) {
|
|
7
|
-
// TODO There's probably a better type to use here.
|
|
8
|
-
handlers[actionCreator.actionType] = handler;
|
|
9
|
-
return builder;
|
|
10
|
-
},
|
|
11
|
-
addCase: function (actionType, handler) {
|
|
12
|
-
// TODO There's probably a better type to use here.
|
|
13
|
-
handlers[actionType] = handler;
|
|
14
|
-
return builder;
|
|
15
|
-
},
|
|
16
|
-
};
|
|
17
|
-
builderFn(builder);
|
|
18
|
-
return function (state, action) {
|
|
19
|
-
if (state === void 0) { state = initialState; }
|
|
20
|
-
if (handlers[action.type]) {
|
|
21
|
-
return handlers[action.type](state, action);
|
|
22
|
-
}
|
|
23
|
-
return state;
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
exports.default = createReducer;
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { Store } from 'redux';
|
|
2
|
-
import { FilterInfo } from '../useFilter';
|
|
3
|
-
import { FilterStore } from '.';
|
|
4
|
-
interface CreateReduxStoreConfig {
|
|
5
|
-
store: Store<{
|
|
6
|
-
useFilter: UseFilterReduxState;
|
|
7
|
-
}>;
|
|
8
|
-
}
|
|
9
|
-
export declare function createReduxStore(config: CreateReduxStoreConfig): FilterStore;
|
|
10
|
-
interface UseFilterReduxState {
|
|
11
|
-
data: Record<string, any>;
|
|
12
|
-
filters: Record<string, FilterInfo<any>>;
|
|
13
|
-
}
|
|
14
|
-
export declare const useFilterReduxReducer: (state: UseFilterReduxState | undefined, action: import("redux").Action<any>) => UseFilterReduxState;
|
|
15
|
-
export {};
|