@himanshu-sorathiya/react-kit 1.0.10 → 1.0.11
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/index.d.ts +78 -28
- package/dist/index.js +164 -135
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -34,34 +34,74 @@ export type DateOperator = "equals" | "before" | "after" | "between";
|
|
|
34
34
|
export type SelectOperator = "equals" | "notEquals";
|
|
35
35
|
export type MultiselectOperator = "in" | "notIn" | "intersects";
|
|
36
36
|
export type CustomOperator = "custom";
|
|
37
|
-
export
|
|
38
|
-
export interface FilterOptions {
|
|
37
|
+
export interface FilterOptions<T = unknown> {
|
|
39
38
|
caseSensitive?: boolean;
|
|
40
|
-
compare?: (itemValue:
|
|
39
|
+
compare?: (itemValue: unknown, filterValue: unknown, item: T) => boolean;
|
|
41
40
|
}
|
|
42
|
-
export
|
|
41
|
+
export type BaseFilterConfig<T> = FilterOptions<T> & {
|
|
43
42
|
id: string;
|
|
44
43
|
field: string;
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
44
|
+
isActive?: boolean;
|
|
45
|
+
};
|
|
46
|
+
export type FilterConfig<T = unknown> = BaseFilterConfig<T> & ({
|
|
47
|
+
type: "text";
|
|
48
|
+
operator: TextOperator;
|
|
49
|
+
value: string;
|
|
50
|
+
} | {
|
|
51
|
+
type: "number";
|
|
52
|
+
operator: "between";
|
|
53
|
+
value: {
|
|
54
|
+
min: number;
|
|
55
|
+
max: number;
|
|
56
|
+
};
|
|
57
|
+
} | {
|
|
58
|
+
type: "number";
|
|
59
|
+
operator: Exclude<NumberOperator, "between">;
|
|
60
|
+
value: number;
|
|
61
|
+
} | {
|
|
62
|
+
type: "boolean";
|
|
63
|
+
operator: BooleanOperator;
|
|
64
|
+
value: boolean;
|
|
65
|
+
} | {
|
|
66
|
+
type: "date";
|
|
67
|
+
operator: "between";
|
|
68
|
+
value: {
|
|
69
|
+
min: string | number | Date;
|
|
70
|
+
max: string | number | Date;
|
|
71
|
+
};
|
|
72
|
+
} | {
|
|
73
|
+
type: "date";
|
|
74
|
+
operator: Exclude<DateOperator, "between">;
|
|
75
|
+
value: string | number | Date;
|
|
76
|
+
} | {
|
|
77
|
+
type: "select";
|
|
78
|
+
operator: SelectOperator;
|
|
79
|
+
value: string | number;
|
|
80
|
+
} | {
|
|
81
|
+
type: "multiselect";
|
|
82
|
+
operator: MultiselectOperator;
|
|
83
|
+
value: (string | number)[];
|
|
84
|
+
} | {
|
|
85
|
+
type: "custom";
|
|
86
|
+
operator: CustomOperator;
|
|
87
|
+
value: unknown;
|
|
88
|
+
});
|
|
89
|
+
export type FilterState<T> = FilterConfig<T>[];
|
|
50
90
|
export interface UseFilterReturn<T> {
|
|
51
91
|
filteredItems: T[];
|
|
52
|
-
filters: FilterState
|
|
53
|
-
|
|
92
|
+
filters: FilterState<T>;
|
|
93
|
+
upsertFilter: (filter: FilterConfig<T>) => void;
|
|
54
94
|
removeFilter: (id: string | string[]) => void;
|
|
55
95
|
clearFilters: () => void;
|
|
56
96
|
resetFilters: () => void;
|
|
57
|
-
|
|
58
|
-
toggleFilter: (filter: FilterConfig) => void;
|
|
59
|
-
updateFilterConfig: (id: string, partialConfig: Partial<Omit<FilterConfig
|
|
60
|
-
getFilterValue: (id: string) =>
|
|
61
|
-
updateFilterValue: (id: string, value:
|
|
97
|
+
replaceFilters: (filters: FilterConfig<T>[]) => void;
|
|
98
|
+
toggleFilter: (filter: FilterConfig<T>) => void;
|
|
99
|
+
updateFilterConfig: (id: string, partialConfig: Partial<Omit<FilterConfig<T>, "id">>) => void;
|
|
100
|
+
getFilterValue: (id: string) => unknown;
|
|
101
|
+
updateFilterValue: (id: string, value: unknown) => void;
|
|
62
102
|
isFilterActive: (id: string) => boolean;
|
|
63
103
|
}
|
|
64
|
-
export declare function useFilter<T>(data: T[], initialFilters?: FilterState): UseFilterReturn<T>;
|
|
104
|
+
export declare function useFilter<T>(data: T[], initialFilters?: FilterState<T>): UseFilterReturn<T>;
|
|
65
105
|
export interface FuzzySearchOptions {
|
|
66
106
|
threshold?: number;
|
|
67
107
|
caseSensitive?: boolean;
|
|
@@ -128,32 +168,42 @@ export interface UsePaginationReturn<T> {
|
|
|
128
168
|
}
|
|
129
169
|
export declare function usePagination<T>(data: T[], initialPageSize: number, initialPageIndex?: number): UsePaginationReturn<T>;
|
|
130
170
|
export type SortType = "numeric" | "alphabetical" | "alphanumeric" | "boolean" | "date" | "basic" | "custom";
|
|
131
|
-
export interface
|
|
171
|
+
export interface BaseSortOptions {
|
|
132
172
|
desc?: boolean;
|
|
133
|
-
caseSensitive?: boolean;
|
|
134
173
|
disableSortRemoval?: boolean;
|
|
135
174
|
invertSorting?: boolean;
|
|
136
|
-
sortUndefined?: "first" | "last" |
|
|
137
|
-
compare?: (a: any, b: any) => number;
|
|
175
|
+
sortUndefined?: "first" | "last" | -1 | 1;
|
|
138
176
|
}
|
|
139
|
-
export interface
|
|
177
|
+
export interface BaseSortConfig extends BaseSortOptions {
|
|
140
178
|
id: string;
|
|
141
|
-
type: SortType;
|
|
142
179
|
field?: string;
|
|
143
180
|
}
|
|
144
|
-
export type
|
|
181
|
+
export type SortConfig = BaseSortConfig & ({
|
|
182
|
+
type: "numeric" | "boolean" | "date" | "basic";
|
|
183
|
+
} | {
|
|
184
|
+
type: "alphabetical" | "alphanumeric";
|
|
185
|
+
caseSensitive?: boolean;
|
|
186
|
+
} | {
|
|
187
|
+
type: "custom";
|
|
188
|
+
compare: (a: unknown, b: unknown) => number;
|
|
189
|
+
});
|
|
190
|
+
export type SortState = SortConfig[];
|
|
191
|
+
export type SortOptionsForType<T extends SortType> = Omit<Extract<SortConfig, {
|
|
192
|
+
type: T;
|
|
193
|
+
}>, "id" | "type" | "field">;
|
|
145
194
|
export interface UseSortReturn<T> {
|
|
146
195
|
sortedItems: T[];
|
|
147
196
|
sorts: SortState;
|
|
148
|
-
|
|
197
|
+
upsertSorts: (sort: SortConfig) => void;
|
|
149
198
|
removeSort: (id: string | string[]) => void;
|
|
150
199
|
clearSorts: () => void;
|
|
151
200
|
resetSorts: () => void;
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
toggleSort: (id: string, type: SortType, options?: SortOptions & {
|
|
201
|
+
replaceSorts: (sorts: SortState) => void;
|
|
202
|
+
toggleSort: <TType extends SortType>(id: string, type: TType, options?: SortOptionsForType<TType> & {
|
|
155
203
|
multi?: boolean;
|
|
204
|
+
field?: string;
|
|
156
205
|
}) => void;
|
|
206
|
+
getSortDirection: (id: string) => "asc" | "desc" | undefined;
|
|
157
207
|
getNextSortingOrder: (id: string) => "asc" | "desc" | "none";
|
|
158
208
|
getSortIndex: (id: string) => number | undefined;
|
|
159
209
|
}
|
package/dist/index.js
CHANGED
|
@@ -73,11 +73,11 @@ function p(e, t, n = {}) {
|
|
|
73
73
|
//#region src/utils/filterUtils.ts
|
|
74
74
|
var m = {
|
|
75
75
|
text: {
|
|
76
|
-
contains: (e, t, n) => n?.caseSensitive ? String(e).includes(String(t)) : String(e).toLowerCase().includes(String(t).toLowerCase()),
|
|
77
|
-
equals: (e, t, n) => n?.caseSensitive ? String(e) === String(t) : String(e).toLowerCase() === String(t).toLowerCase(),
|
|
78
|
-
startsWith: (e, t, n) => n?.caseSensitive ? String(e).startsWith(String(t)) : String(e).toLowerCase().startsWith(String(t).toLowerCase()),
|
|
79
|
-
endsWith: (e, t, n) => n?.caseSensitive ? String(e).endsWith(String(t)) : String(e).toLowerCase().endsWith(String(t).toLowerCase()),
|
|
80
|
-
notContains: (e, t, n) => n?.caseSensitive ? !String(e).includes(String(t)) : !String(e).toLowerCase().includes(String(t).toLowerCase())
|
|
76
|
+
contains: (e, t, n) => e == null ? !1 : n?.caseSensitive ? String(e).includes(String(t)) : String(e).toLowerCase().includes(String(t).toLowerCase()),
|
|
77
|
+
equals: (e, t, n) => e == null ? !1 : n?.caseSensitive ? String(e) === String(t) : String(e).toLowerCase() === String(t).toLowerCase(),
|
|
78
|
+
startsWith: (e, t, n) => e == null ? !1 : n?.caseSensitive ? String(e).startsWith(String(t)) : String(e).toLowerCase().startsWith(String(t).toLowerCase()),
|
|
79
|
+
endsWith: (e, t, n) => e == null ? !1 : n?.caseSensitive ? String(e).endsWith(String(t)) : String(e).toLowerCase().endsWith(String(t).toLowerCase()),
|
|
80
|
+
notContains: (e, t, n) => e == null ? !0 : n?.caseSensitive ? !String(e).includes(String(t)) : !String(e).toLowerCase().includes(String(t).toLowerCase())
|
|
81
81
|
},
|
|
82
82
|
number: {
|
|
83
83
|
equals: (e, t) => Number(e) === Number(t),
|
|
@@ -85,29 +85,35 @@ var m = {
|
|
|
85
85
|
lessThan: (e, t) => Number(e) < Number(t),
|
|
86
86
|
greaterThanOrEqual: (e, t) => Number(e) >= Number(t),
|
|
87
87
|
lessThanOrEqual: (e, t) => Number(e) <= Number(t),
|
|
88
|
-
between: (e, t) =>
|
|
88
|
+
between: (e, t) => {
|
|
89
|
+
if (typeof t != "object" || !t) return !1;
|
|
90
|
+
let { min: n, max: r } = t;
|
|
91
|
+
return n == null || r == null ? !1 : Number(e) >= Number(n) && Number(e) <= Number(r);
|
|
92
|
+
}
|
|
89
93
|
},
|
|
90
94
|
boolean: { equals: (e, t) => !!e == !!t },
|
|
91
95
|
date: {
|
|
92
96
|
equals: (e, t) => {
|
|
93
97
|
if (!e || !t) return !1;
|
|
94
|
-
let n = new Date(e)
|
|
95
|
-
return Number.isNaN(n) || Number.isNaN(r) ? !1 : n === r;
|
|
98
|
+
let n = new Date(e), r = new Date(t);
|
|
99
|
+
return Number.isNaN(n.getTime()) || Number.isNaN(r.getTime()) ? !1 : n.getFullYear() === r.getFullYear() && n.getMonth() === r.getMonth() && n.getDate() === r.getDate();
|
|
96
100
|
},
|
|
97
101
|
before: (e, t) => {
|
|
98
102
|
if (!e || !t) return !1;
|
|
99
|
-
let n = new Date(e).
|
|
103
|
+
let n = new Date(e).setHours(0, 0, 0, 0), r = new Date(t).setHours(0, 0, 0, 0);
|
|
100
104
|
return Number.isNaN(n) || Number.isNaN(r) ? !1 : n < r;
|
|
101
105
|
},
|
|
102
106
|
after: (e, t) => {
|
|
103
107
|
if (!e || !t) return !1;
|
|
104
|
-
let n = new Date(e).
|
|
108
|
+
let n = new Date(e).setHours(0, 0, 0, 0), r = new Date(t).setHours(0, 0, 0, 0);
|
|
105
109
|
return Number.isNaN(n) || Number.isNaN(r) ? !1 : n > r;
|
|
106
110
|
},
|
|
107
111
|
between: (e, t) => {
|
|
108
|
-
if (!e ||
|
|
109
|
-
let
|
|
110
|
-
|
|
112
|
+
if (!e || typeof t != "object" || !t) return !1;
|
|
113
|
+
let { min: n, max: r } = t;
|
|
114
|
+
if (n == null || r == null) return !1;
|
|
115
|
+
let i = new Date(e).setHours(0, 0, 0, 0), a = new Date(n).setHours(0, 0, 0, 0), o = new Date(r).setHours(0, 0, 0, 0);
|
|
116
|
+
return Number.isNaN(i) || Number.isNaN(a) || Number.isNaN(o) ? !1 : i >= a && i <= o;
|
|
111
117
|
}
|
|
112
118
|
},
|
|
113
119
|
select: {
|
|
@@ -124,20 +130,26 @@ var m = {
|
|
|
124
130
|
//#region src/utils/utils.ts
|
|
125
131
|
function h(e, t, n) {
|
|
126
132
|
if (typeof e != "object" || !e) return e;
|
|
127
|
-
let r =
|
|
128
|
-
return r.includes(".") ? r.split(".").reduce((e, t) => e?.[t], e) : e?.[r];
|
|
133
|
+
let r = t ?? n ?? "";
|
|
134
|
+
return Array.isArray(r) ? r.reduce((e, t) => e?.[t], e) : r.includes(".") ? r.split(".").reduce((e, t) => e?.[t], e) : e?.[r];
|
|
129
135
|
}
|
|
130
136
|
//#endregion
|
|
131
137
|
//#region src/hooks/useFilter.ts
|
|
132
138
|
function g(e, n = []) {
|
|
133
|
-
let [r, a] = o(n), s = i(() =>
|
|
134
|
-
let
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
139
|
+
let [r, a] = o(n), s = i(() => {
|
|
140
|
+
let t = r.filter((e) => e.isActive !== !1).map((e) => ({
|
|
141
|
+
...e,
|
|
142
|
+
pathArray: (e.field || e.id).split(".")
|
|
143
|
+
}));
|
|
144
|
+
return e.filter((e) => t.every((t) => {
|
|
145
|
+
let { id: n, type: r, operator: i, value: a, compare: o, pathArray: s } = t, c = h(e, s, n);
|
|
146
|
+
if (r === "custom") return o ? o(c, a, e) : !0;
|
|
147
|
+
let l = m[r];
|
|
148
|
+
if (!l) return !0;
|
|
149
|
+
let u = l[i];
|
|
150
|
+
return u ? u(c, a, t) : !0;
|
|
151
|
+
}));
|
|
152
|
+
}, [e, r]), c = t((e) => {
|
|
141
153
|
a((t) => t.some((t) => t.id === e.id) ? t.map((t) => t.id === e.id ? e : t) : [...t, e]);
|
|
142
154
|
}, []), l = t((e) => {
|
|
143
155
|
a((t) => Array.isArray(e) ? t.filter((t) => !e.includes(t.id)) : t.filter((t) => t.id !== e));
|
|
@@ -147,21 +159,22 @@ function g(e, n = []) {
|
|
|
147
159
|
a(n);
|
|
148
160
|
}, [n]), f = t((e) => {
|
|
149
161
|
a(e);
|
|
150
|
-
}, [])
|
|
151
|
-
a((n) => n.map((n) => n.id === e ? {
|
|
152
|
-
...n,
|
|
153
|
-
value: t
|
|
154
|
-
} : n));
|
|
155
|
-
}, []), _ = t((e) => r.some((t) => t.id === e), [r]);
|
|
162
|
+
}, []);
|
|
156
163
|
return {
|
|
157
164
|
filteredItems: s,
|
|
158
165
|
filters: r,
|
|
159
|
-
|
|
166
|
+
upsertFilter: c,
|
|
160
167
|
removeFilter: l,
|
|
161
168
|
clearFilters: u,
|
|
162
169
|
resetFilters: d,
|
|
163
170
|
toggleFilter: t((e) => {
|
|
164
|
-
a((t) => t.some((t) => t.id === e.id) ? t.
|
|
171
|
+
a((t) => t.some((t) => t.id === e.id) ? t.map((t) => t.id === e.id ? {
|
|
172
|
+
...t,
|
|
173
|
+
isActive: t.isActive === !1
|
|
174
|
+
} : t) : [...t, {
|
|
175
|
+
...e,
|
|
176
|
+
isActive: !0
|
|
177
|
+
}]);
|
|
165
178
|
}, []),
|
|
166
179
|
updateFilterConfig: t((e, t) => {
|
|
167
180
|
a((n) => n.map((n) => n.id === e ? {
|
|
@@ -169,10 +182,18 @@ function g(e, n = []) {
|
|
|
169
182
|
...t
|
|
170
183
|
} : n));
|
|
171
184
|
}, []),
|
|
172
|
-
|
|
173
|
-
getFilterValue:
|
|
174
|
-
updateFilterValue:
|
|
175
|
-
|
|
185
|
+
replaceFilters: f,
|
|
186
|
+
getFilterValue: t((e) => r.find((t) => t.id === e)?.value, [r]),
|
|
187
|
+
updateFilterValue: t((e, t) => {
|
|
188
|
+
a((n) => n.map((n) => n.id === e ? {
|
|
189
|
+
...n,
|
|
190
|
+
value: t
|
|
191
|
+
} : n));
|
|
192
|
+
}, []),
|
|
193
|
+
isFilterActive: t((e) => {
|
|
194
|
+
let t = r.find((t) => t.id === e);
|
|
195
|
+
return t ? t.isActive !== !1 : !1;
|
|
196
|
+
}, [r])
|
|
176
197
|
};
|
|
177
198
|
}
|
|
178
199
|
//#endregion
|
|
@@ -358,47 +379,49 @@ function b(e, t, { enabled: n = !0, preventDefault: i = !0, stopPropagation: o =
|
|
|
358
379
|
//#region src/hooks/usePagination.ts
|
|
359
380
|
function x(e, n, r = 0) {
|
|
360
381
|
let [a, s] = o(n), [c, l] = o(r), u = Math.max(1, Math.ceil(e.length / Math.max(1, a))), d = Math.min(Math.max(0, c), u - 1);
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
382
|
+
c !== d && l(d);
|
|
383
|
+
let f = i(() => typeof a != "number" || a < 1 ? [] : e.slice(c * a, (c + 1) * a), [
|
|
384
|
+
c,
|
|
385
|
+
a,
|
|
386
|
+
e
|
|
387
|
+
]), p = c > 0, m = c < u - 1, h = t(() => {
|
|
388
|
+
l((e) => e < u - 1 ? e + 1 : e);
|
|
389
|
+
}, [u]), g = t(() => {
|
|
390
|
+
l((e) => e > 0 ? e - 1 : e);
|
|
391
|
+
}, []), _ = t(() => {
|
|
392
|
+
l(0);
|
|
393
|
+
}, []), v = t(() => {
|
|
394
|
+
l(u - 1);
|
|
395
|
+
}, [u]), y = t((e) => {
|
|
396
|
+
typeof e == "number" && e >= 0 && e <= u - 1 && l(e);
|
|
397
|
+
}, [u]), b = t((t) => {
|
|
398
|
+
if (typeof t == "number" && t > 0) {
|
|
399
|
+
s(t);
|
|
400
|
+
let n = Math.max(1, Math.ceil(e.length / Math.max(1, t)));
|
|
401
|
+
l((e) => Math.min(Math.max(0, e), n - 1));
|
|
402
|
+
}
|
|
403
|
+
}, [e.length]), x = t(() => {
|
|
404
|
+
l(Math.min(Math.max(0, r), u - 1));
|
|
405
|
+
}, [r, u]);
|
|
406
|
+
return {
|
|
407
|
+
currentItems: f,
|
|
367
408
|
pageSize: a,
|
|
368
409
|
pageIndex: c,
|
|
369
410
|
totalPages: u,
|
|
370
|
-
canPrevious:
|
|
371
|
-
canNext:
|
|
372
|
-
nextPage:
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
firstPage: t(() => {
|
|
379
|
-
l(0);
|
|
380
|
-
}, []),
|
|
381
|
-
lastPage: t(() => {
|
|
382
|
-
l(u - 1);
|
|
383
|
-
}, [u]),
|
|
384
|
-
setPageIndex: t((e) => {
|
|
385
|
-
typeof e == "number" && e >= 0 && e <= u - 1 && l(e);
|
|
386
|
-
}, [u]),
|
|
387
|
-
setPageSize: t((t) => {
|
|
388
|
-
if (typeof t == "number" && t > 0) {
|
|
389
|
-
s(t);
|
|
390
|
-
let n = Math.max(1, Math.ceil(e.length / Math.max(1, t)));
|
|
391
|
-
l((e) => Math.min(Math.max(0, e), n - 1));
|
|
392
|
-
}
|
|
393
|
-
}, [e.length]),
|
|
394
|
-
resetPageIndex: t(() => {
|
|
395
|
-
l(Math.min(Math.max(0, r), u - 1));
|
|
396
|
-
}, [r, u]),
|
|
411
|
+
canPrevious: p,
|
|
412
|
+
canNext: m,
|
|
413
|
+
nextPage: h,
|
|
414
|
+
previousPage: g,
|
|
415
|
+
firstPage: _,
|
|
416
|
+
lastPage: v,
|
|
417
|
+
setPageSize: b,
|
|
418
|
+
setPageIndex: y,
|
|
397
419
|
resetPageSize: t(() => {
|
|
398
420
|
s(Math.max(1, n));
|
|
399
421
|
let t = Math.max(1, Math.ceil(e.length / Math.max(1, n)));
|
|
400
422
|
l((e) => Math.min(Math.max(0, e), t - 1));
|
|
401
|
-
}, [n, e.length])
|
|
423
|
+
}, [n, e.length]),
|
|
424
|
+
resetPageIndex: x
|
|
402
425
|
};
|
|
403
426
|
}
|
|
404
427
|
//#endregion
|
|
@@ -412,7 +435,7 @@ function S(e, t, n = {}) {
|
|
|
412
435
|
function C(e, t, n = {}) {
|
|
413
436
|
let { sortUndefined: r, desc: i = !1 } = n, a = k(e, t, r, i);
|
|
414
437
|
if (a !== null) return a;
|
|
415
|
-
let o =
|
|
438
|
+
let o = Number(e), s = Number(t), c = Number.isNaN(o), l = Number.isNaN(s);
|
|
416
439
|
return c || l ? k(c ? void 0 : o, l ? void 0 : s, r, i) ?? 0 : o - s;
|
|
417
440
|
}
|
|
418
441
|
function w(e, t, n = {}) {
|
|
@@ -433,8 +456,8 @@ function T(e, t, n = {}) {
|
|
|
433
456
|
function E(e, t, n = {}) {
|
|
434
457
|
let { desc: r = !1, sortUndefined: i } = n, a = k(e, t, i, r);
|
|
435
458
|
if (a !== null) return a;
|
|
436
|
-
let o = new Date(e).getTime(), s = new Date(t).getTime();
|
|
437
|
-
return (
|
|
459
|
+
let o = new Date(e).getTime(), s = new Date(t).getTime(), c = Number.isNaN(o), l = Number.isNaN(s);
|
|
460
|
+
return (c || l) && (a = k(c ? void 0 : o, l ? void 0 : s, i, r), a !== null) ? a : o - s;
|
|
438
461
|
}
|
|
439
462
|
function D(e, t, n = {}) {
|
|
440
463
|
let { desc: r = !1, sortUndefined: i } = n, a = k(e, t, i, r);
|
|
@@ -444,102 +467,108 @@ function O(e, t, n = {}) {
|
|
|
444
467
|
let { desc: r = !1, sortUndefined: i, compare: a } = n, o = k(e, t, i, r);
|
|
445
468
|
return o === null ? typeof a == "function" ? a(e, t) : e < t ? -1 : +(e > t) : o;
|
|
446
469
|
}
|
|
447
|
-
function k(e, t, n =
|
|
448
|
-
let i = e
|
|
449
|
-
if (i
|
|
450
|
-
if (i
|
|
451
|
-
if (n === "first") return i
|
|
452
|
-
if (n === "last") return i
|
|
470
|
+
function k(e, t, n = "last", r) {
|
|
471
|
+
let i = e == null || e === "", a = t == null || t === "";
|
|
472
|
+
if (i && a) return 0;
|
|
473
|
+
if (!i && !a) return null;
|
|
474
|
+
if (n === "first") return i ? -1 : 1;
|
|
475
|
+
if (n === "last") return i ? 1 : -1;
|
|
453
476
|
if (n === -1) {
|
|
454
477
|
let e = r ? 1 : -1;
|
|
455
|
-
return i
|
|
478
|
+
return i ? e : -e;
|
|
456
479
|
}
|
|
457
480
|
if (n === 1) {
|
|
458
481
|
let e = r ? 1 : -1;
|
|
459
|
-
return i
|
|
482
|
+
return i ? -e : e;
|
|
460
483
|
}
|
|
461
484
|
return null;
|
|
462
485
|
}
|
|
463
486
|
//#endregion
|
|
464
487
|
//#region src/hooks/useSort.ts
|
|
465
488
|
function A(e, n = []) {
|
|
466
|
-
let [r, a] = o(n)
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
489
|
+
let [r, a] = o(n), s = i(() => {
|
|
490
|
+
let t = r.map((e) => ({
|
|
491
|
+
...e,
|
|
492
|
+
pathArray: (e.field || e.id).split(".")
|
|
493
|
+
}));
|
|
494
|
+
return [...e].sort((e, n) => {
|
|
495
|
+
for (let r of t) {
|
|
496
|
+
let { type: t, id: i, desc: a = !1, invertSorting: o = !1, pathArray: s } = r, c = h(e, s, i), l = h(n, s, i), u;
|
|
497
|
+
switch (t) {
|
|
472
498
|
case "numeric":
|
|
473
|
-
u = C(c, l,
|
|
499
|
+
u = C(c, l, r);
|
|
474
500
|
break;
|
|
475
501
|
case "alphabetical":
|
|
476
|
-
u = w(c, l,
|
|
502
|
+
u = w(c, l, r);
|
|
477
503
|
break;
|
|
478
504
|
case "alphanumeric":
|
|
479
|
-
u = T(c, l,
|
|
505
|
+
u = T(c, l, r);
|
|
480
506
|
break;
|
|
481
507
|
case "boolean":
|
|
482
|
-
u = S(c, l,
|
|
508
|
+
u = S(c, l, r);
|
|
483
509
|
break;
|
|
484
510
|
case "date":
|
|
485
|
-
u = E(c, l,
|
|
511
|
+
u = E(c, l, r);
|
|
486
512
|
break;
|
|
487
513
|
case "basic":
|
|
488
|
-
u = D(c, l,
|
|
514
|
+
u = D(c, l, r);
|
|
489
515
|
break;
|
|
490
516
|
case "custom":
|
|
491
|
-
u = O(c, l,
|
|
517
|
+
u = O(c, l, r);
|
|
492
518
|
break;
|
|
493
|
-
default: u = D(c, l,
|
|
519
|
+
default: u = D(c, l, r);
|
|
494
520
|
}
|
|
495
|
-
if (u !== 0) return u * (
|
|
521
|
+
if (u !== 0) return u * (a === o ? 1 : -1);
|
|
496
522
|
}
|
|
497
523
|
return 0;
|
|
498
|
-
})
|
|
524
|
+
});
|
|
525
|
+
}, [r, e]), c = t((e) => a((t) => t.some((t) => t.id === e.id) ? t.map((t) => t.id === e.id ? e : t) : [...t, e]), []), l = t((e) => {
|
|
526
|
+
a((t) => Array.isArray(e) ? t.filter((t) => !e.includes(t.id)) : t.filter((t) => t.id !== e));
|
|
527
|
+
}, []), u = t(() => a([]), []), d = t(() => a(n), [n]), f = t((e) => a(e), []), p = t((e, t, n) => {
|
|
528
|
+
let { multi: r = !1, ...i } = n || {};
|
|
529
|
+
a((n) => {
|
|
530
|
+
let a = n.find((t) => t.id === e);
|
|
531
|
+
if (!a) {
|
|
532
|
+
let a = {
|
|
533
|
+
id: e,
|
|
534
|
+
type: t,
|
|
535
|
+
...i,
|
|
536
|
+
desc: !1
|
|
537
|
+
};
|
|
538
|
+
return r ? [...n, a] : [a];
|
|
539
|
+
}
|
|
540
|
+
if (!a.desc) {
|
|
541
|
+
let t = {
|
|
542
|
+
...a,
|
|
543
|
+
...i,
|
|
544
|
+
desc: !0
|
|
545
|
+
};
|
|
546
|
+
return r ? n.map((n) => n.id === e ? t : n) : [t];
|
|
547
|
+
}
|
|
548
|
+
if (a.disableSortRemoval || i.disableSortRemoval) {
|
|
549
|
+
let t = {
|
|
550
|
+
...a,
|
|
551
|
+
...i,
|
|
552
|
+
desc: !1
|
|
553
|
+
};
|
|
554
|
+
return r ? n.map((n) => n.id === e ? t : n) : [t];
|
|
555
|
+
}
|
|
556
|
+
return r ? n.filter((t) => t.id !== e) : [];
|
|
557
|
+
});
|
|
558
|
+
}, []);
|
|
559
|
+
return {
|
|
560
|
+
sortedItems: s,
|
|
499
561
|
sorts: r,
|
|
500
|
-
|
|
501
|
-
removeSort:
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
resetSorts: t(() => a(n), [n]),
|
|
506
|
-
setSorts: t((e) => a(e), []),
|
|
562
|
+
upsertSorts: c,
|
|
563
|
+
removeSort: l,
|
|
564
|
+
clearSorts: u,
|
|
565
|
+
resetSorts: d,
|
|
566
|
+
replaceSorts: f,
|
|
507
567
|
getSortDirection: t((e) => {
|
|
508
568
|
let t = r.find((t) => t.id === e);
|
|
509
569
|
return t ? t.desc ? "desc" : "asc" : void 0;
|
|
510
570
|
}, [r]),
|
|
511
|
-
toggleSort:
|
|
512
|
-
let { multi: r = !1, ...i } = n || {};
|
|
513
|
-
a((n) => {
|
|
514
|
-
let a = n.find((t) => t.id === e);
|
|
515
|
-
if (!a) {
|
|
516
|
-
let a = {
|
|
517
|
-
id: e,
|
|
518
|
-
type: t,
|
|
519
|
-
...i,
|
|
520
|
-
desc: !1
|
|
521
|
-
};
|
|
522
|
-
return r ? [...n, a] : [a];
|
|
523
|
-
}
|
|
524
|
-
if (!a.desc) {
|
|
525
|
-
let t = {
|
|
526
|
-
...a,
|
|
527
|
-
...i,
|
|
528
|
-
desc: !0
|
|
529
|
-
};
|
|
530
|
-
return r ? n.map((n) => n.id === e ? t : n) : [t];
|
|
531
|
-
}
|
|
532
|
-
if (a.disableSortRemoval || i.disableSortRemoval) {
|
|
533
|
-
let t = {
|
|
534
|
-
...a,
|
|
535
|
-
...i,
|
|
536
|
-
desc: !1
|
|
537
|
-
};
|
|
538
|
-
return r ? n.map((n) => n.id === e ? t : n) : [t];
|
|
539
|
-
}
|
|
540
|
-
return r ? n.filter((t) => t.id !== e) : [];
|
|
541
|
-
});
|
|
542
|
-
}, []),
|
|
571
|
+
toggleSort: p,
|
|
543
572
|
getNextSortingOrder: t((e) => {
|
|
544
573
|
let t = r.find((t) => t.id === e);
|
|
545
574
|
return t ? t.desc ? t.disableSortRemoval ? "asc" : "none" : "desc" : "asc";
|