@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.
Files changed (77) hide show
  1. package/dist/cjs/_virtual/_rolldown/runtime.js +29 -0
  2. package/dist/cjs/lib/buildDefaultFilterInfo.d.ts +5 -0
  3. package/dist/cjs/lib/buildDefaultFilterInfo.js +27 -0
  4. package/dist/{lib → cjs/lib}/getOffsetFromPage.d.ts +2 -1
  5. package/dist/cjs/lib/getOffsetFromPage.js +8 -0
  6. package/dist/{lib → cjs/lib}/getPageFromOffset.d.ts +2 -1
  7. package/dist/cjs/lib/getPageFromOffset.js +8 -0
  8. package/dist/{lib → cjs/lib}/shallowEqual.d.ts +2 -1
  9. package/dist/cjs/lib/shallowEqual.js +24 -0
  10. package/dist/cjs/store/index.d.ts +14 -0
  11. package/dist/cjs/store/index.js +18 -0
  12. package/dist/cjs/store/localStorageStore.d.ts +5 -0
  13. package/dist/cjs/store/localStorageStore.js +33 -0
  14. package/dist/cjs/store/memoryStore.d.ts +5 -0
  15. package/dist/cjs/store/memoryStore.js +25 -0
  16. package/dist/cjs/store/reduxHelpers/createActions.d.ts +16 -0
  17. package/dist/cjs/store/reduxHelpers/createActions.js +16 -0
  18. package/dist/cjs/store/reduxHelpers/createReducer.d.ts +10 -0
  19. package/dist/cjs/store/reduxHelpers/createReducer.js +25 -0
  20. package/dist/cjs/store/reduxStore.d.ts +18 -0
  21. package/dist/cjs/store/reduxStore.js +63 -0
  22. package/dist/cjs/store/urlParamStore.d.ts +8 -0
  23. package/dist/cjs/store/urlParamStore.js +68 -0
  24. package/dist/cjs/useFilter.d.ts +106 -0
  25. package/dist/cjs/useFilter.js +251 -0
  26. package/dist/cjs/useSimpleFilter.d.ts +89 -0
  27. package/dist/cjs/useSimpleFilter.js +198 -0
  28. package/dist/esm/lib/buildDefaultFilterInfo.d.mts +6 -0
  29. package/dist/esm/lib/buildDefaultFilterInfo.mjs +27 -0
  30. package/dist/esm/lib/getOffsetFromPage.d.mts +4 -0
  31. package/dist/esm/lib/getOffsetFromPage.mjs +7 -0
  32. package/dist/esm/lib/getPageFromOffset.d.mts +4 -0
  33. package/dist/esm/lib/getPageFromOffset.mjs +7 -0
  34. package/dist/esm/lib/shallowEqual.d.mts +4 -0
  35. package/dist/esm/lib/shallowEqual.mjs +23 -0
  36. package/dist/esm/store/index.d.mts +14 -0
  37. package/dist/esm/store/index.mjs +15 -0
  38. package/dist/esm/store/localStorageStore.d.mts +6 -0
  39. package/dist/esm/store/localStorageStore.mjs +32 -0
  40. package/dist/esm/store/memoryStore.d.mts +6 -0
  41. package/dist/esm/store/memoryStore.mjs +24 -0
  42. package/dist/esm/store/reduxHelpers/createActions.d.mts +16 -0
  43. package/dist/esm/store/reduxHelpers/createActions.mjs +15 -0
  44. package/dist/esm/store/reduxHelpers/createReducer.d.mts +11 -0
  45. package/dist/esm/store/reduxHelpers/createReducer.mjs +24 -0
  46. package/dist/esm/store/reduxStore.d.mts +18 -0
  47. package/dist/esm/store/reduxStore.mjs +61 -0
  48. package/dist/esm/store/urlParamStore.d.mts +8 -0
  49. package/dist/esm/store/urlParamStore.mjs +63 -0
  50. package/dist/esm/useFilter.d.mts +106 -0
  51. package/dist/esm/useFilter.mjs +251 -0
  52. package/dist/esm/useSimpleFilter.d.mts +89 -0
  53. package/dist/esm/useSimpleFilter.mjs +198 -0
  54. package/package.json +33 -43
  55. package/dist/lib/buildDefaultFilterInfo.d.ts +0 -3
  56. package/dist/lib/buildDefaultFilterInfo.js +0 -35
  57. package/dist/lib/getOffsetFromPage.js +0 -6
  58. package/dist/lib/getPageFromOffset.js +0 -6
  59. package/dist/lib/shallowEqual.js +0 -23
  60. package/dist/store/index.d.ts +0 -10
  61. package/dist/store/index.js +0 -16
  62. package/dist/store/localStorageStore.d.ts +0 -3
  63. package/dist/store/localStorageStore.js +0 -31
  64. package/dist/store/memoryStore.d.ts +0 -3
  65. package/dist/store/memoryStore.js +0 -23
  66. package/dist/store/reduxHelpers/createActions.d.ts +0 -16
  67. package/dist/store/reduxHelpers/createActions.js +0 -27
  68. package/dist/store/reduxHelpers/createReducer.d.ts +0 -8
  69. package/dist/store/reduxHelpers/createReducer.js +0 -26
  70. package/dist/store/reduxStore.d.ts +0 -15
  71. package/dist/store/reduxStore.js +0 -67
  72. package/dist/store/urlParamStore.d.ts +0 -4
  73. package/dist/store/urlParamStore.js +0 -91
  74. package/dist/useFilter.d.ts +0 -103
  75. package/dist/useFilter.js +0 -254
  76. package/dist/useSimpleFilter.d.ts +0 -86
  77. 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": "1.11.2",
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": "^2.3.0",
11
- "@testing-library/react": "^12.0.0",
12
- "@types/jest": "^26.0.24",
13
- "@types/qs": "^6.9.7",
14
- "@types/react": "^17.0.14",
15
- "@types/redux": "^3.6.0",
16
- "eslint": "^7.30.0",
17
- "jest": "^27.0.6",
18
- "prettier": "^2.3.2",
19
- "react": "^17.0.2",
20
- "react-dom": "^17.0.2",
21
- "ts-jest": "^27.0.3",
22
- "typescript": "^4.3.5"
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,3 +0,0 @@
1
- import { FilterInfo } from '../useFilter';
2
- declare function buildDefaultFilterInfo<T>(filterInfo?: Partial<FilterInfo<T>>): FilterInfo<T>;
3
- export default buildDefaultFilterInfo;
@@ -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;
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- function getOffsetFromPage(page, pageSize) {
4
- return pageSize * (page - 1);
5
- }
6
- exports.default = getOffsetFromPage;
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- function getPageFromOffset(offset, pageSize) {
4
- return Math.floor(offset / pageSize) + 1;
5
- }
6
- exports.default = getPageFromOffset;
@@ -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;
@@ -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;
@@ -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,3 +0,0 @@
1
- import { FilterStore } from '.';
2
- declare const localStorageStore: FilterStore;
3
- export default localStorageStore;
@@ -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,3 +0,0 @@
1
- import { FilterStore } from '.';
2
- declare const memoryStore: FilterStore;
3
- export default memoryStore;
@@ -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 {};