datastake-daf 0.6.367 → 0.6.368

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.
@@ -1,281 +1,321 @@
1
- import { useCallback, useEffect, useMemo, useState } from 'react';
2
- import { getDefaultActiveFilters } from '../utils/filters';
3
- import { StorageManager } from '../../helpers/StorageManager';
1
+ import { useCallback, useEffect, useMemo, useState } from "react";
2
+ import { getDefaultActiveFilters } from "../utils/filters";
3
+ import { StorageManager } from "../../helpers/StorageManager";
4
+
5
+ const NEW_PAGINATION_TITLES = ["nashiriki"];
4
6
 
5
7
  export const useFilters = ({
6
- view,
7
- module,
8
- filtersConfig,
9
- goTo,
10
- location,
11
- selectFiltersConfig,
12
- defaultPageSize = 20,
13
- defaultActiveFilters,
14
- defaultUrlParams = {},
15
- doPagination = true,
16
- getRedirectLink,
8
+ view,
9
+ module,
10
+ filtersConfig,
11
+ goTo,
12
+ location,
13
+ selectFiltersConfig,
14
+ defaultPageSize = 20,
15
+ defaultActiveFilters,
16
+ defaultUrlParams = {},
17
+ doPagination = true,
18
+ getRedirectLink,
17
19
  }) => {
18
- const params = useMemo(() => new URLSearchParams(location.search), [location.search]);
19
- const [activeFilters, setActiveFilters] = useState(
20
- defaultActiveFilters || getDefaultActiveFilters(params, selectFiltersConfig, defaultPageSize, defaultUrlParams, doPagination)
21
- );
22
- const [pagination, setPagination] = useState(
23
- defaultActiveFilters ? {
24
- current: defaultActiveFilters.page || 1,
25
- pageSize: defaultActiveFilters.pageSize || defaultPageSize,
26
- showSizeChanger: true,
27
- } : {
28
- current: !isNaN(Number(params.get('page'))) ? Number(params.get('page')) || 1 : 1,
29
- pageSize: !isNaN(Number(params.get('pageSize'))) ? Number(params.get('pageSize')) || defaultPageSize : defaultPageSize,
30
- showSizeChanger: true,
31
- });
32
-
33
- useEffect(() => {
34
- if (defaultActiveFilters) {
35
- setPagination((prev) => ({
36
- ...prev,
37
- current: defaultActiveFilters.page || 1,
38
- pageSize: defaultActiveFilters.pageSize || defaultPageSize,
39
- showSizeChanger: true,
40
- }));
41
- return;
42
- }
43
- setPagination((prev) => ({
44
- ...prev,
45
- current: !isNaN(Number(params.get('page'))) ? Number(params.get('page')) || 1 : 1,
46
- pageSize: !isNaN(Number(params.get('pageSize'))) ? Number(params.get('pageSize')) || defaultPageSize : defaultPageSize,
47
- showSizeChanger: true,
48
- }));
49
- }, []);
50
-
51
- const updateQuery = useCallback((filters, page) => {
52
- const qs = Object.keys(filters)
53
- .filter((key) => {
54
- if (!doPagination) {
55
- return !!filters[key] && key !== 'page' && key !== 'pageSize';
56
- }
57
-
58
- return !!filters[key];
59
- })
60
- .map(key => {
61
- if (filters[key] && typeof filters[key] === 'object') {
62
- return `${key}=${JSON.stringify(filters[key])}`;
63
- }
64
- return `${key}=${filters[key]}`;
65
- })
66
- .join('&');
67
-
68
- if (view) {
69
- if (typeof getRedirectLink === 'function') {
70
- goTo(getRedirectLink(
71
- view === 'mine-monitoring'
72
- ? (qs !== '' ? `${location.pathname}?${qs}`
73
- : doPagination ? `${location.pathname}?page=${page}`
74
- : location.pathname)
75
- : (qs !== '' ? `${`/app/${view}`}?${qs}`
76
- : doPagination ? `${`/app/${view}`}?page=${page}`
77
- : `${`/app/${view}`}`)
78
- ));
79
- return;
80
- }
81
-
82
- if (view === 'mine-monitoring') {
83
- goTo(
84
- qs !== '' ? `${location.pathname}?${qs}`
85
- : doPagination ? `${location.pathname}?page=${page}`
86
- : location.pathname);
87
- } else {
88
- goTo(
89
- qs !== '' ? `${`/app/${module}/${view}`}?${qs}`
90
- : doPagination ? `${`/app/${module}/${view}`}?page=${page}`
91
- : `${`/app/${module}/${view}`}`);
92
- }
93
- }
94
- }, [module, view, location.pathname]); // Updated dependency array
95
-
96
- const defaultFilters = useMemo(() => {
97
- const def = {};
98
- Object.keys(selectFiltersConfig).forEach((key) => {
99
- if (activeFilters[key]) {
100
- def[key] = activeFilters[key];
101
- }
102
- });
103
- return def;
104
- }, [activeFilters, selectFiltersConfig]);
105
-
106
- const newFiltersConfig = useMemo(() => {
107
- const o = filtersConfig;
108
- Object.keys(filtersConfig).forEach((key) => {
109
- if (params.has(key)) {
110
- o[key] = params.get(key);
111
- }
112
- });
113
- return o;
114
- }, [params, filtersConfig]);
115
-
116
- useEffect(() => {
117
- const filteredFilters = Object.keys(activeFilters).reduce((all, key) => {
118
- if (activeFilters[key]) {
119
- all[key] = activeFilters[key];
120
- }
121
- return all;
122
- }, {});
123
-
124
- const filters = StorageManager.saveFilters(module, view, { ...filteredFilters });
125
-
126
- if (!filters.pageSize) {
127
- filters.page = 1;
128
- filters.pageSize = pagination.pageSize;
129
- }
130
-
131
- updateQuery(filters, 1);
132
- }, [activeFilters]);
133
-
134
- const onFiltersChange = useCallback((filters) => {
135
- const filteredFilters = Object.keys(filters).reduce((all, key) => {
136
- const conf = selectFiltersConfig[key];
137
- if (conf) {
138
- const { show } = conf;
139
- if (typeof show === 'function') {
140
- if (show(filters)) {
141
- return all;
142
- }
143
- }
144
- }
145
-
146
- if (Array.isArray(filters[key]) && !filters[key].length) {
147
- all[key] = undefined;
148
- return all;
149
- }
150
-
151
- all[key] = filters[key];
152
- return all;
153
- }, {});
154
-
155
- setActiveFilters((prev) => {
156
- const o = { ...prev };
157
- Object.keys(o).forEach((k) => {
158
- if (Object.keys(selectFiltersConfig).includes(k) || k === 'authorId') {
159
- delete o[k];
160
- }
161
- });
162
- Object.entries(filteredFilters).forEach(([k, v]) => {
163
- o[k] = v;
164
- });
165
-
166
- if (doPagination) {
167
- o.page = 1;
168
- }
169
-
170
- return o;
171
- });
172
- setPagination((prev) => ({ ...prev, current: 1 }));
173
- }, [selectFiltersConfig]);
174
-
175
- const onTableChange = (page, f, sorter) => {
176
- const { sortBy, sortDir } = activeFilters;
177
- const { columnKey, order } = sorter || {};
178
-
179
- let fs = {
180
- ...activeFilters,
181
- page: page.pageSize !== activeFilters.pageSize ? 1 : page.current,
182
- pageSize: page.pageSize || defaultPageSize,
183
- };
184
-
185
- if (sorter && (columnKey !== sortBy || order !== sortDir)) {
186
- fs.page = 1;
187
- }
188
-
189
- if (order) {
190
- fs = { ...fs, sortDir: order, sortBy: columnKey };
191
- } else if (sortBy || sortDir) {
192
- fs = Object.keys(fs).reduce((all, key) => {
193
- if (key !== 'sortDir' && key !== 'sortBy') {
194
- if (key === 'page' || key === 'pageSize') {
195
- all[key] = fs[key];
196
- } else {
197
- all[key] = activeFilters[key];
198
- }
199
- }
200
- return all;
201
- }, {});
202
- }
203
-
204
- setActiveFilters(fs);
205
-
206
- if (isNaN(page.current)) {
207
- page.current = 1;
208
- }
209
-
210
- const filters = StorageManager.saveFilters(module, view, { page: page.current }, true);
211
-
212
- updateQuery(filters, page.current);
213
- setPagination((prev) => ({
214
- ...prev,
215
- current: fs.page,
216
- pageSize: fs.pageSize || defaultPageSize
217
- }));
218
- };
219
-
220
- const onSearch = useCallback((activeFilter, value) => {
221
- setActiveFilters((prev) => ({
222
- ...prev,
223
- page: 1,
224
- searchParams: activeFilter,
225
- search: value,
226
- }));
227
- setPagination((prev) => ({ ...prev, current: 1 }));
228
- }, []);
229
-
230
- const totalPages = useMemo(() => {
231
- return Math.ceil(pagination.total / pagination.pageSize);
232
- }, [pagination]);
233
-
234
- const canGoPrev = useMemo(() => pagination.current !== 1, [pagination]);
235
- const canGoNext = useMemo(() => pagination.current !== totalPages && totalPages, [pagination, totalPages]);
236
-
237
- const goPrev = () => {
238
- if (!canGoPrev) {
239
- return;
240
- }
241
-
242
- const { sortDir, sortBy } = activeFilters;
243
-
244
- onTableChange(
245
- { ...pagination, current: pagination.current - 1 },
246
- undefined,
247
- sortBy && sortDir ? { sortBy, sortDir } : undefined
248
- );
249
- };
250
-
251
- const goNext = () => {
252
- if (!canGoNext) {
253
- return;
254
- }
255
-
256
- const { sortDir, sortBy } = activeFilters;
257
-
258
- onTableChange(
259
- { ...pagination, current: pagination.current + 1 },
260
- undefined,
261
- sortBy && sortDir ? { columnKey: sortBy, order: sortDir } : undefined
262
- );
263
- };
264
-
265
- return {
266
- newFiltersConfig,
267
- totalPages,
268
- canGoNext,
269
- canGoPrev,
270
- goPrev,
271
- goNext,
272
- pagination,
273
- activeFilters,
274
- onSearch,
275
- defaultFilters,
276
- onTableChange,
277
- setPagination,
278
- onFiltersChange,
279
- setActiveFilters,
280
- };
20
+ const PAGE = NEW_PAGINATION_TITLES.includes(module) ? "skip" : "page";
21
+ const PAGE_SIZE = NEW_PAGINATION_TITLES.includes(module) ? "take" : "pageSize";
22
+
23
+ const params = useMemo(() => new URLSearchParams(location.search), [location.search]);
24
+ const [activeFilters, setActiveFilters] = useState(
25
+ defaultActiveFilters ||
26
+ getDefaultActiveFilters(
27
+ params,
28
+ selectFiltersConfig,
29
+ defaultPageSize,
30
+ defaultUrlParams,
31
+ doPagination,
32
+ ),
33
+ );
34
+ const [pagination, setPagination] = useState(
35
+ defaultActiveFilters
36
+ ? {
37
+ current: defaultActiveFilters[PAGE] || 1,
38
+ [PAGE_SIZE]: defaultActiveFilters[PAGE_SIZE] || defaultPageSize,
39
+ showSizeChanger: true,
40
+ }
41
+ : {
42
+ current: !isNaN(Number(params.get(PAGE))) ? Number(params.get(PAGE)) || 1 : 1,
43
+ [PAGE_SIZE]: !isNaN(Number(params.get(PAGE_SIZE)))
44
+ ? Number(params.get(PAGE_SIZE)) || defaultPageSize
45
+ : defaultPageSize,
46
+ showSizeChanger: true,
47
+ },
48
+ );
49
+
50
+ useEffect(() => {
51
+ if (defaultActiveFilters) {
52
+ setPagination((prev) => ({
53
+ ...prev,
54
+ current: defaultActiveFilters[PAGE] || 1,
55
+ [PAGE_SIZE]: defaultActiveFilters[PAGE_SIZE] || defaultPageSize,
56
+ showSizeChanger: true,
57
+ }));
58
+ return;
59
+ }
60
+ setPagination((prev) => ({
61
+ ...prev,
62
+ current: !isNaN(Number(params.get(PAGE))) ? Number(params.get(PAGE)) || 1 : 1,
63
+ [PAGE_SIZE]: !isNaN(Number(params.get(PAGE_SIZE)))
64
+ ? Number(params.get(PAGE_SIZE)) || defaultPageSize
65
+ : defaultPageSize,
66
+ showSizeChanger: true,
67
+ }));
68
+ }, []);
69
+
70
+ const updateQuery = useCallback(
71
+ (filters, page) => {
72
+ const qs = Object.keys(filters)
73
+ .filter((key) => {
74
+ if (!doPagination) {
75
+ return !!filters[key] && key !== PAGE && key !== PAGE_SIZE;
76
+ }
77
+
78
+ return !!filters[key];
79
+ })
80
+ .map((key) => {
81
+ if (filters[key] && typeof filters[key] === "object") {
82
+ return `${key}=${JSON.stringify(filters[key])}`;
83
+ }
84
+ return `${key}=${filters[key]}`;
85
+ })
86
+ .join("&");
87
+
88
+ if (view) {
89
+ if (typeof getRedirectLink === "function") {
90
+ goTo(
91
+ getRedirectLink(
92
+ view === "mine-monitoring"
93
+ ? qs !== ""
94
+ ? `${location.pathname}?${qs}`
95
+ : doPagination
96
+ ? `${location.pathname}?${PAGE}=${page}`
97
+ : location.pathname
98
+ : qs !== ""
99
+ ? `${`/app/${view}`}?${qs}`
100
+ : doPagination
101
+ ? `${`/app/${view}`}?${PAGE}=${page}`
102
+ : `${`/app/${view}`}`,
103
+ ),
104
+ );
105
+ return;
106
+ }
107
+
108
+ if (view === "mine-monitoring") {
109
+ goTo(
110
+ qs !== ""
111
+ ? `${location.pathname}?${qs}`
112
+ : doPagination
113
+ ? `${location.pathname}?${PAGE}=${page}`
114
+ : location.pathname,
115
+ );
116
+ } else {
117
+ goTo(
118
+ qs !== ""
119
+ ? `${`/app/${module}/${view}`}?${qs}`
120
+ : doPagination
121
+ ? `${`/app/${module}/${view}`}?${PAGE}=${page}`
122
+ : `${`/app/${module}/${view}`}`,
123
+ );
124
+ }
125
+ }
126
+ },
127
+ [module, view, location.pathname],
128
+ ); // Updated dependency array
129
+
130
+ const defaultFilters = useMemo(() => {
131
+ const def = {};
132
+ Object.keys(selectFiltersConfig).forEach((key) => {
133
+ if (activeFilters[key]) {
134
+ def[key] = activeFilters[key];
135
+ }
136
+ });
137
+ return def;
138
+ }, [activeFilters, selectFiltersConfig]);
139
+
140
+ const newFiltersConfig = useMemo(() => {
141
+ const o = filtersConfig;
142
+ Object.keys(filtersConfig).forEach((key) => {
143
+ if (params.has(key)) {
144
+ o[key] = params.get(key);
145
+ }
146
+ });
147
+ return o;
148
+ }, [params, filtersConfig]);
149
+
150
+ useEffect(() => {
151
+ const filteredFilters = Object.keys(activeFilters).reduce((all, key) => {
152
+ if (activeFilters[key]) {
153
+ all[key] = activeFilters[key];
154
+ }
155
+ return all;
156
+ }, {});
157
+
158
+ const filters = StorageManager.saveFilters(module, view, { ...filteredFilters });
159
+
160
+ if (!filters[PAGE_SIZE]) {
161
+ filters[PAGE] = 1;
162
+ filters[PAGE_SIZE] = pagination[PAGE_SIZE];
163
+ }
164
+
165
+ updateQuery(filters, 1);
166
+ }, [activeFilters]);
167
+
168
+ const onFiltersChange = useCallback(
169
+ (filters) => {
170
+ const filteredFilters = Object.keys(filters).reduce((all, key) => {
171
+ const conf = selectFiltersConfig[key];
172
+ if (conf) {
173
+ const { show } = conf;
174
+ if (typeof show === "function") {
175
+ if (show(filters)) {
176
+ return all;
177
+ }
178
+ }
179
+ }
180
+
181
+ if (Array.isArray(filters[key]) && !filters[key].length) {
182
+ all[key] = undefined;
183
+ return all;
184
+ }
185
+
186
+ all[key] = filters[key];
187
+ return all;
188
+ }, {});
189
+
190
+ setActiveFilters((prev) => {
191
+ const o = { ...prev };
192
+ Object.keys(o).forEach((k) => {
193
+ if (Object.keys(selectFiltersConfig).includes(k) || k === "authorId") {
194
+ delete o[k];
195
+ }
196
+ });
197
+ Object.entries(filteredFilters).forEach(([k, v]) => {
198
+ o[k] = v;
199
+ });
200
+
201
+ if (doPagination) {
202
+ o[PAGE] = 1;
203
+ }
204
+
205
+ return o;
206
+ });
207
+ setPagination((prev) => ({ ...prev, current: 1 }));
208
+ },
209
+ [selectFiltersConfig],
210
+ );
211
+
212
+ const onTableChange = (page, f, sorter) => {
213
+ const { sortBy, sortDir } = activeFilters;
214
+ const { columnKey, order } = sorter || {};
215
+
216
+ let fs = {
217
+ ...activeFilters,
218
+ [PAGE]: page[PAGE_SIZE] !== activeFilters[PAGE_SIZE] ? 1 : page.current,
219
+ [PAGE_SIZE]: page[PAGE_SIZE] || defaultPageSize,
220
+ };
221
+
222
+ if (sorter && (columnKey !== sortBy || order !== sortDir)) {
223
+ fs[PAGE] = 1;
224
+ }
225
+
226
+ if (order) {
227
+ fs = { ...fs, sortDir: order, sortBy: columnKey };
228
+ } else if (sortBy || sortDir) {
229
+ fs = Object.keys(fs).reduce((all, key) => {
230
+ if (key !== "sortDir" && key !== "sortBy") {
231
+ if (key === PAGE || key === PAGE_SIZE) {
232
+ all[key] = fs[key];
233
+ } else {
234
+ all[key] = activeFilters[key];
235
+ }
236
+ }
237
+ return all;
238
+ }, {});
239
+ }
240
+
241
+ setActiveFilters(fs);
242
+
243
+ if (isNaN(page.current)) {
244
+ page.current = 1;
245
+ }
246
+
247
+ const filters = StorageManager.saveFilters(module, view, { [PAGE]: page.current }, true);
248
+
249
+ updateQuery(filters, page.current);
250
+ setPagination((prev) => ({
251
+ ...prev,
252
+ current: fs[PAGE],
253
+ [PAGE_SIZE]: fs[PAGE_SIZE] || defaultPageSize,
254
+ }));
255
+ };
256
+
257
+ const onSearch = useCallback((activeFilter, value) => {
258
+ setActiveFilters((prev) => ({
259
+ ...prev,
260
+ [PAGE]: 1,
261
+ searchParams: activeFilter,
262
+ search: value,
263
+ }));
264
+ setPagination((prev) => ({ ...prev, current: 1 }));
265
+ }, []);
266
+
267
+ const totalPages = useMemo(() => {
268
+ return Math.ceil(pagination.total / pagination[PAGE_SIZE]);
269
+ }, [pagination]);
270
+
271
+ const canGoPrev = useMemo(() => pagination.current !== 1, [pagination]);
272
+ const canGoNext = useMemo(
273
+ () => pagination.current !== totalPages && totalPages,
274
+ [pagination, totalPages],
275
+ );
276
+
277
+ const goPrev = () => {
278
+ if (!canGoPrev) {
279
+ return;
280
+ }
281
+
282
+ const { sortDir, sortBy } = activeFilters;
283
+
284
+ onTableChange(
285
+ { ...pagination, current: pagination.current - 1 },
286
+ undefined,
287
+ sortBy && sortDir ? { sortBy, sortDir } : undefined,
288
+ );
289
+ };
290
+
291
+ const goNext = () => {
292
+ if (!canGoNext) {
293
+ return;
294
+ }
295
+
296
+ const { sortDir, sortBy } = activeFilters;
297
+
298
+ onTableChange(
299
+ { ...pagination, current: pagination.current + 1 },
300
+ undefined,
301
+ sortBy && sortDir ? { columnKey: sortBy, order: sortDir } : undefined,
302
+ );
303
+ };
304
+
305
+ return {
306
+ newFiltersConfig,
307
+ totalPages,
308
+ canGoNext,
309
+ canGoPrev,
310
+ goPrev,
311
+ goNext,
312
+ pagination,
313
+ activeFilters,
314
+ onSearch,
315
+ defaultFilters,
316
+ onTableChange,
317
+ setPagination,
318
+ onFiltersChange,
319
+ setActiveFilters,
320
+ };
281
321
  };
@@ -1,17 +1,20 @@
1
1
  import { useEffect, useState } from "react";
2
2
 
3
+ const PAGE = "page";
4
+ const PAGE_SIZE = "pageSize";
5
+
3
6
  export default function useSource({ user = {}, t = () => {}, getData = () => {}, id }) {
4
7
  const [loading, setLoading] = useState(true);
5
8
  const [partners, setPartners] = useState([]);
6
9
  const [selectedPartners, setSelectedPartners] = useState({ loading: true });
7
-
10
+
8
11
  useEffect(() => {
9
12
  async function fetchPartners() {
10
13
  try {
11
14
  setLoading(true);
12
15
  const { data } = await getData({
13
- page: 1,
14
- pageSize: 100,
16
+ [PAGE]: 1,
17
+ [PAGE_SIZE]: 100,
15
18
  type: "partners",
16
19
  });
17
20