@himanshu-sorathiya/react-kit 1.0.10 → 1.0.12
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 +126 -53
- package/dist/index.js +325 -201
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
// Generated by dts-bundle-generator v9.5.1
|
|
2
2
|
|
|
3
|
-
import { RefObject } from 'react';
|
|
3
|
+
import { CSSProperties, RefObject } from 'react';
|
|
4
4
|
|
|
5
5
|
export interface ModalLayoutProps {
|
|
6
|
+
modalId: string;
|
|
6
7
|
children: React.ReactNode;
|
|
7
|
-
|
|
8
|
+
wrapperClassName?: string;
|
|
9
|
+
wrapperStyle?: CSSProperties;
|
|
10
|
+
containerClassName?: string;
|
|
11
|
+
containerStyle?: CSSProperties;
|
|
8
12
|
}
|
|
9
|
-
export declare function ModalLayout({ children,
|
|
13
|
+
export declare function ModalLayout({ modalId, children, wrapperClassName, wrapperStyle, containerClassName, containerStyle, }: ModalLayoutProps): import("react").ReactPortal | null;
|
|
10
14
|
export interface DebounceOptions {
|
|
11
15
|
maxWait?: number;
|
|
12
16
|
leading?: boolean;
|
|
@@ -34,34 +38,74 @@ export type DateOperator = "equals" | "before" | "after" | "between";
|
|
|
34
38
|
export type SelectOperator = "equals" | "notEquals";
|
|
35
39
|
export type MultiselectOperator = "in" | "notIn" | "intersects";
|
|
36
40
|
export type CustomOperator = "custom";
|
|
37
|
-
export
|
|
38
|
-
export interface FilterOptions {
|
|
41
|
+
export interface FilterOptions<T = unknown> {
|
|
39
42
|
caseSensitive?: boolean;
|
|
40
|
-
compare?: (itemValue:
|
|
43
|
+
compare?: (itemValue: unknown, filterValue: unknown, item: T) => boolean;
|
|
41
44
|
}
|
|
42
|
-
export
|
|
45
|
+
export type BaseFilterConfig<T> = FilterOptions<T> & {
|
|
43
46
|
id: string;
|
|
44
47
|
field: string;
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
isActive?: boolean;
|
|
49
|
+
};
|
|
50
|
+
export type FilterConfig<T = unknown> = BaseFilterConfig<T> & ({
|
|
51
|
+
type: "text";
|
|
52
|
+
operator: TextOperator;
|
|
53
|
+
value: string;
|
|
54
|
+
} | {
|
|
55
|
+
type: "number";
|
|
56
|
+
operator: "between";
|
|
57
|
+
value: {
|
|
58
|
+
min: number;
|
|
59
|
+
max: number;
|
|
60
|
+
};
|
|
61
|
+
} | {
|
|
62
|
+
type: "number";
|
|
63
|
+
operator: Exclude<NumberOperator, "between">;
|
|
64
|
+
value: number;
|
|
65
|
+
} | {
|
|
66
|
+
type: "boolean";
|
|
67
|
+
operator: BooleanOperator;
|
|
68
|
+
value: boolean;
|
|
69
|
+
} | {
|
|
70
|
+
type: "date";
|
|
71
|
+
operator: "between";
|
|
72
|
+
value: {
|
|
73
|
+
min: string | number | Date;
|
|
74
|
+
max: string | number | Date;
|
|
75
|
+
};
|
|
76
|
+
} | {
|
|
77
|
+
type: "date";
|
|
78
|
+
operator: Exclude<DateOperator, "between">;
|
|
79
|
+
value: string | number | Date;
|
|
80
|
+
} | {
|
|
81
|
+
type: "select";
|
|
82
|
+
operator: SelectOperator;
|
|
83
|
+
value: string | number;
|
|
84
|
+
} | {
|
|
85
|
+
type: "multiselect";
|
|
86
|
+
operator: MultiselectOperator;
|
|
87
|
+
value: (string | number)[];
|
|
88
|
+
} | {
|
|
89
|
+
type: "custom";
|
|
90
|
+
operator: CustomOperator;
|
|
91
|
+
value: unknown;
|
|
92
|
+
});
|
|
93
|
+
export type FilterState<T> = FilterConfig<T>[];
|
|
50
94
|
export interface UseFilterReturn<T> {
|
|
51
95
|
filteredItems: T[];
|
|
52
|
-
filters: FilterState
|
|
53
|
-
|
|
96
|
+
filters: FilterState<T>;
|
|
97
|
+
upsertFilter: (filter: FilterConfig<T>) => void;
|
|
54
98
|
removeFilter: (id: string | string[]) => void;
|
|
55
99
|
clearFilters: () => void;
|
|
56
100
|
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:
|
|
101
|
+
replaceFilters: (filters: FilterConfig<T>[]) => void;
|
|
102
|
+
toggleFilter: (filter: FilterConfig<T>) => void;
|
|
103
|
+
updateFilterConfig: (id: string, partialConfig: Partial<Omit<FilterConfig<T>, "id">>) => void;
|
|
104
|
+
getFilterValue: (id: string) => unknown;
|
|
105
|
+
updateFilterValue: (id: string, value: unknown) => void;
|
|
62
106
|
isFilterActive: (id: string) => boolean;
|
|
63
107
|
}
|
|
64
|
-
export declare function useFilter<T>(data: T[], initialFilters?: FilterState): UseFilterReturn<T>;
|
|
108
|
+
export declare function useFilter<T>(data: T[], initialFilters?: FilterState<T>): UseFilterReturn<T>;
|
|
65
109
|
export interface FuzzySearchOptions {
|
|
66
110
|
threshold?: number;
|
|
67
111
|
caseSensitive?: boolean;
|
|
@@ -80,38 +124,56 @@ declare const validKeyEventTypes: readonly [
|
|
|
80
124
|
"keypress"
|
|
81
125
|
];
|
|
82
126
|
export type KeyEventType = (typeof validKeyEventTypes)[number];
|
|
83
|
-
export interface
|
|
127
|
+
export interface BaseKeyOptions {
|
|
84
128
|
enabled?: boolean;
|
|
85
129
|
target?: RefObject<HTMLElement | null> | Window;
|
|
86
|
-
}
|
|
87
|
-
export interface KeyEventModifiers {
|
|
88
130
|
preventDefault?: boolean;
|
|
89
131
|
stopPropagation?: boolean;
|
|
90
|
-
|
|
91
|
-
}
|
|
92
|
-
export interface KeyChordModifiers {
|
|
132
|
+
ignoreWhenFocusedInInputs?: boolean;
|
|
93
133
|
ctrlKey?: boolean;
|
|
94
134
|
shiftKey?: boolean;
|
|
95
135
|
altKey?: boolean;
|
|
96
136
|
metaKey?: boolean;
|
|
97
137
|
}
|
|
98
|
-
export
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
|
|
138
|
+
export type KeyOptions = BaseKeyOptions & ({
|
|
139
|
+
eventType?: "keydown" | "keypress";
|
|
140
|
+
preventRepeat?: boolean;
|
|
141
|
+
} | {
|
|
142
|
+
eventType: "keyup";
|
|
143
|
+
preventRepeat?: never;
|
|
144
|
+
});
|
|
104
145
|
export type UseKeyReturn = void;
|
|
105
|
-
export declare function useKey(key: string,
|
|
106
|
-
export interface
|
|
146
|
+
export declare function useKey(key: string, handler: (e: KeyboardEvent) => void, { enabled, preventDefault, stopPropagation, eventType, preventRepeat, ignoreWhenFocusedInInputs, ctrlKey, shiftKey, altKey, metaKey, target, }?: KeyOptions): UseKeyReturn;
|
|
147
|
+
export interface UseModalStateReturn<TData> {
|
|
148
|
+
isOpen: boolean;
|
|
107
149
|
id: string | null;
|
|
108
150
|
data: TData | undefined;
|
|
109
|
-
openModal: <T = any>(id: string, data?: T) => void;
|
|
110
|
-
closeModal: () => void;
|
|
111
151
|
}
|
|
112
|
-
export
|
|
152
|
+
export interface UseModalActionsReturn {
|
|
153
|
+
openModal: <T = unknown>(id: string, data?: T) => void;
|
|
154
|
+
closeModal: () => void;
|
|
155
|
+
clearModal: () => void;
|
|
156
|
+
}
|
|
157
|
+
export type UseModalReturn<TData> = UseModalStateReturn<TData> & UseModalActionsReturn;
|
|
158
|
+
export declare function useModalState<TData = unknown>(): UseModalStateReturn<TData>;
|
|
159
|
+
export declare function useModalActions(): UseModalActionsReturn;
|
|
160
|
+
export declare function useModal<TData = unknown>(): UseModalReturn<TData>;
|
|
161
|
+
export interface UseOrderReturn<T> {
|
|
162
|
+
orderedItems: T[];
|
|
163
|
+
moveUp: (index: number) => void;
|
|
164
|
+
moveDown: (index: number) => void;
|
|
165
|
+
canMoveUp: (index: number) => boolean;
|
|
166
|
+
canMoveDown: (index: number) => boolean;
|
|
167
|
+
moveToTop: (index: number) => void;
|
|
168
|
+
moveToBottom: (index: number) => void;
|
|
169
|
+
move: (fromIndex: number, toIndex: number) => void;
|
|
170
|
+
swap: (indexA: number, indexB: number) => void;
|
|
171
|
+
replaceOrder: (newOrderedItems: T[]) => void;
|
|
172
|
+
resetOrder: () => void;
|
|
173
|
+
}
|
|
174
|
+
export declare function useOrder<T>(initialItems: T[]): UseOrderReturn<T>;
|
|
113
175
|
export interface UsePaginationReturn<T> {
|
|
114
|
-
|
|
176
|
+
pageItems: T[];
|
|
115
177
|
pageSize: number;
|
|
116
178
|
pageIndex: number;
|
|
117
179
|
totalPages: number;
|
|
@@ -119,41 +181,52 @@ export interface UsePaginationReturn<T> {
|
|
|
119
181
|
canNext: boolean;
|
|
120
182
|
nextPage: () => void;
|
|
121
183
|
previousPage: () => void;
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
184
|
+
goToFirstPage: () => void;
|
|
185
|
+
goToLastPage: () => void;
|
|
186
|
+
goToPage: (newPageIndex: number) => void;
|
|
187
|
+
changePageSize: (newPageSize: number) => void;
|
|
126
188
|
resetPageIndex: () => void;
|
|
127
189
|
resetPageSize: () => void;
|
|
190
|
+
resetPagination: () => void;
|
|
128
191
|
}
|
|
129
192
|
export declare function usePagination<T>(data: T[], initialPageSize: number, initialPageIndex?: number): UsePaginationReturn<T>;
|
|
130
193
|
export type SortType = "numeric" | "alphabetical" | "alphanumeric" | "boolean" | "date" | "basic" | "custom";
|
|
131
|
-
export interface
|
|
194
|
+
export interface BaseSortOptions {
|
|
132
195
|
desc?: boolean;
|
|
133
|
-
caseSensitive?: boolean;
|
|
134
196
|
disableSortRemoval?: boolean;
|
|
135
197
|
invertSorting?: boolean;
|
|
136
|
-
sortUndefined?: "first" | "last" |
|
|
137
|
-
compare?: (a: any, b: any) => number;
|
|
198
|
+
sortUndefined?: "first" | "last" | -1 | 1;
|
|
138
199
|
}
|
|
139
|
-
export interface
|
|
200
|
+
export interface BaseSortConfig extends BaseSortOptions {
|
|
140
201
|
id: string;
|
|
141
|
-
type: SortType;
|
|
142
202
|
field?: string;
|
|
143
203
|
}
|
|
144
|
-
export type
|
|
204
|
+
export type SortConfig = BaseSortConfig & ({
|
|
205
|
+
type: "numeric" | "boolean" | "date" | "basic";
|
|
206
|
+
} | {
|
|
207
|
+
type: "alphabetical" | "alphanumeric";
|
|
208
|
+
caseSensitive?: boolean;
|
|
209
|
+
} | {
|
|
210
|
+
type: "custom";
|
|
211
|
+
compare: (a: unknown, b: unknown) => number;
|
|
212
|
+
});
|
|
213
|
+
export type SortState = SortConfig[];
|
|
214
|
+
export type SortOptionsForType<T extends SortType> = Omit<Extract<SortConfig, {
|
|
215
|
+
type: T;
|
|
216
|
+
}>, "id" | "type" | "field">;
|
|
145
217
|
export interface UseSortReturn<T> {
|
|
146
218
|
sortedItems: T[];
|
|
147
219
|
sorts: SortState;
|
|
148
|
-
|
|
220
|
+
upsertSorts: (sort: SortConfig) => void;
|
|
149
221
|
removeSort: (id: string | string[]) => void;
|
|
150
222
|
clearSorts: () => void;
|
|
151
223
|
resetSorts: () => void;
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
toggleSort: (id: string, type: SortType, options?: SortOptions & {
|
|
224
|
+
replaceSorts: (sorts: SortState) => void;
|
|
225
|
+
toggleSort: <TType extends SortType>(id: string, type: TType, options?: SortOptionsForType<TType> & {
|
|
155
226
|
multi?: boolean;
|
|
227
|
+
field?: string;
|
|
156
228
|
}) => void;
|
|
229
|
+
getSortDirection: (id: string) => "asc" | "desc" | undefined;
|
|
157
230
|
getNextSortingOrder: (id: string) => "asc" | "desc" | "none";
|
|
158
231
|
getSortIndex: (id: string) => number | undefined;
|
|
159
232
|
}
|
package/dist/index.js
CHANGED
|
@@ -1,38 +1,64 @@
|
|
|
1
|
-
import { createContext as e, useCallback as t, useContext as n, useEffect as r,
|
|
2
|
-
import { createPortal as
|
|
3
|
-
import { jsx as
|
|
1
|
+
import { createContext as e, useCallback as t, useContext as n, useEffect as r, useLayoutEffect as i, useMemo as a, useRef as o, useState as s } from "react";
|
|
2
|
+
import { createPortal as c } from "react-dom";
|
|
3
|
+
import { jsx as l } from "react/jsx-runtime";
|
|
4
4
|
//#region src/context/ModalContext.tsx
|
|
5
|
-
var
|
|
5
|
+
var u = e(null), d = e(null);
|
|
6
6
|
//#endregion
|
|
7
7
|
//#region src/hooks/useModal.ts
|
|
8
|
-
function
|
|
9
|
-
let e = n(
|
|
10
|
-
if (!e) throw Error("
|
|
8
|
+
function f() {
|
|
9
|
+
let e = n(u);
|
|
10
|
+
if (!e) throw Error("useModalState must be used within a ModalProvider");
|
|
11
11
|
return e;
|
|
12
12
|
}
|
|
13
|
+
function p() {
|
|
14
|
+
let e = n(d);
|
|
15
|
+
if (!e) throw Error("useModalActions must be used within a ModalProvider");
|
|
16
|
+
return e;
|
|
17
|
+
}
|
|
18
|
+
function m() {
|
|
19
|
+
return {
|
|
20
|
+
...f(),
|
|
21
|
+
...p()
|
|
22
|
+
};
|
|
23
|
+
}
|
|
13
24
|
//#endregion
|
|
14
25
|
//#region src/components/Modal.tsx
|
|
15
|
-
function
|
|
16
|
-
let { id:
|
|
26
|
+
function h({ modalId: e, children: t, wrapperClassName: n = "", wrapperStyle: i, containerClassName: a = "", containerStyle: u }) {
|
|
27
|
+
let { isOpen: d, id: m } = f(), { closeModal: h, clearModal: g } = p(), [_, v] = s(!1), y = o(null), b = m === e, x = d && b;
|
|
17
28
|
return r(() => {
|
|
18
|
-
let e =
|
|
19
|
-
e && (
|
|
20
|
-
}, [
|
|
21
|
-
ref:
|
|
29
|
+
let e = y.current;
|
|
30
|
+
e && (x && !e.open ? (v(!1), e.showModal()) : !x && e.open && v(!0));
|
|
31
|
+
}, [x]), typeof document > "u" || !b && !_ ? null : c(/* @__PURE__ */ l("dialog", {
|
|
32
|
+
ref: y,
|
|
22
33
|
onCancel: (e) => {
|
|
23
|
-
e.preventDefault(),
|
|
34
|
+
e.preventDefault(), h();
|
|
35
|
+
},
|
|
36
|
+
onClose: h,
|
|
37
|
+
onClick: (e) => {
|
|
38
|
+
let t = y.current;
|
|
39
|
+
if (!t) return;
|
|
40
|
+
let n = t.getBoundingClientRect();
|
|
41
|
+
(e.clientX < n.x || e.clientX > n.x + n.width || e.clientY < n.y || e.clientY > n.y + n.height) && h();
|
|
42
|
+
},
|
|
43
|
+
onAnimationEnd: () => {
|
|
44
|
+
if (_) {
|
|
45
|
+
let e = y.current;
|
|
46
|
+
e && e.close(), v(!1), b && g();
|
|
47
|
+
}
|
|
24
48
|
},
|
|
25
|
-
className: `universal-modal ${
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
49
|
+
className: `universal-modal ${n}`.trim(),
|
|
50
|
+
style: i,
|
|
51
|
+
children: /* @__PURE__ */ l("div", {
|
|
52
|
+
className: `modal-container ${a}`.trim(),
|
|
53
|
+
style: u,
|
|
54
|
+
children: t
|
|
29
55
|
})
|
|
30
56
|
}), document.body);
|
|
31
57
|
}
|
|
32
58
|
//#endregion
|
|
33
59
|
//#region src/hooks/useDebounce.ts
|
|
34
|
-
function
|
|
35
|
-
let [
|
|
60
|
+
function g(e, n, i = {}) {
|
|
61
|
+
let [a, c] = s(!1), l = i.maxWait, u = !!i.leading, d = !u && i.trailing === !1 ? !0 : i.trailing ?? !u, f = o(e), p = o(null), m = o(-1), h = o(-1), g = o(null);
|
|
36
62
|
r(() => {
|
|
37
63
|
f.current = e;
|
|
38
64
|
}, [e]);
|
|
@@ -56,28 +82,28 @@ function f(e, n, i = {}) {
|
|
|
56
82
|
]),
|
|
57
83
|
cancel: _,
|
|
58
84
|
flush: v,
|
|
59
|
-
isPending:
|
|
85
|
+
isPending: a
|
|
60
86
|
};
|
|
61
87
|
}
|
|
62
88
|
//#endregion
|
|
63
89
|
//#region src/hooks/useDebouncedValue.ts
|
|
64
|
-
function
|
|
65
|
-
let [i, a] =
|
|
90
|
+
function _(e, t, n = {}) {
|
|
91
|
+
let [i, a] = s(e), { debouncedFunc: o } = g((e) => {
|
|
66
92
|
a(e);
|
|
67
93
|
}, t, n);
|
|
68
94
|
return r(() => {
|
|
69
|
-
|
|
70
|
-
}, [e,
|
|
95
|
+
o(e);
|
|
96
|
+
}, [e, o]), i;
|
|
71
97
|
}
|
|
72
98
|
//#endregion
|
|
73
99
|
//#region src/utils/filterUtils.ts
|
|
74
|
-
var
|
|
100
|
+
var v = {
|
|
75
101
|
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())
|
|
102
|
+
contains: (e, t, n) => e == null ? !1 : n?.caseSensitive ? String(e).includes(String(t)) : String(e).toLowerCase().includes(String(t).toLowerCase()),
|
|
103
|
+
equals: (e, t, n) => e == null ? !1 : n?.caseSensitive ? String(e) === String(t) : String(e).toLowerCase() === String(t).toLowerCase(),
|
|
104
|
+
startsWith: (e, t, n) => e == null ? !1 : n?.caseSensitive ? String(e).startsWith(String(t)) : String(e).toLowerCase().startsWith(String(t).toLowerCase()),
|
|
105
|
+
endsWith: (e, t, n) => e == null ? !1 : n?.caseSensitive ? String(e).endsWith(String(t)) : String(e).toLowerCase().endsWith(String(t).toLowerCase()),
|
|
106
|
+
notContains: (e, t, n) => e == null ? !0 : n?.caseSensitive ? !String(e).includes(String(t)) : !String(e).toLowerCase().includes(String(t).toLowerCase())
|
|
81
107
|
},
|
|
82
108
|
number: {
|
|
83
109
|
equals: (e, t) => Number(e) === Number(t),
|
|
@@ -85,29 +111,35 @@ var m = {
|
|
|
85
111
|
lessThan: (e, t) => Number(e) < Number(t),
|
|
86
112
|
greaterThanOrEqual: (e, t) => Number(e) >= Number(t),
|
|
87
113
|
lessThanOrEqual: (e, t) => Number(e) <= Number(t),
|
|
88
|
-
between: (e, t) =>
|
|
114
|
+
between: (e, t) => {
|
|
115
|
+
if (typeof t != "object" || !t) return !1;
|
|
116
|
+
let { min: n, max: r } = t;
|
|
117
|
+
return n == null || r == null ? !1 : Number(e) >= Number(n) && Number(e) <= Number(r);
|
|
118
|
+
}
|
|
89
119
|
},
|
|
90
120
|
boolean: { equals: (e, t) => !!e == !!t },
|
|
91
121
|
date: {
|
|
92
122
|
equals: (e, t) => {
|
|
93
123
|
if (!e || !t) return !1;
|
|
94
|
-
let n = new Date(e)
|
|
95
|
-
return Number.isNaN(n) || Number.isNaN(r) ? !1 : n === r;
|
|
124
|
+
let n = new Date(e), r = new Date(t);
|
|
125
|
+
return Number.isNaN(n.getTime()) || Number.isNaN(r.getTime()) ? !1 : n.getFullYear() === r.getFullYear() && n.getMonth() === r.getMonth() && n.getDate() === r.getDate();
|
|
96
126
|
},
|
|
97
127
|
before: (e, t) => {
|
|
98
128
|
if (!e || !t) return !1;
|
|
99
|
-
let n = new Date(e).
|
|
129
|
+
let n = new Date(e).setHours(0, 0, 0, 0), r = new Date(t).setHours(0, 0, 0, 0);
|
|
100
130
|
return Number.isNaN(n) || Number.isNaN(r) ? !1 : n < r;
|
|
101
131
|
},
|
|
102
132
|
after: (e, t) => {
|
|
103
133
|
if (!e || !t) return !1;
|
|
104
|
-
let n = new Date(e).
|
|
134
|
+
let n = new Date(e).setHours(0, 0, 0, 0), r = new Date(t).setHours(0, 0, 0, 0);
|
|
105
135
|
return Number.isNaN(n) || Number.isNaN(r) ? !1 : n > r;
|
|
106
136
|
},
|
|
107
137
|
between: (e, t) => {
|
|
108
|
-
if (!e ||
|
|
109
|
-
let
|
|
110
|
-
|
|
138
|
+
if (!e || typeof t != "object" || !t) return !1;
|
|
139
|
+
let { min: n, max: r } = t;
|
|
140
|
+
if (n == null || r == null) return !1;
|
|
141
|
+
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);
|
|
142
|
+
return Number.isNaN(i) || Number.isNaN(a) || Number.isNaN(o) ? !1 : i >= a && i <= o;
|
|
111
143
|
}
|
|
112
144
|
},
|
|
113
145
|
select: {
|
|
@@ -122,62 +154,77 @@ var m = {
|
|
|
122
154
|
};
|
|
123
155
|
//#endregion
|
|
124
156
|
//#region src/utils/utils.ts
|
|
125
|
-
function
|
|
157
|
+
function y(e, t, n) {
|
|
126
158
|
if (typeof e != "object" || !e) return e;
|
|
127
|
-
let r =
|
|
128
|
-
return r.includes(".") ? r.split(".").reduce((e, t) => e?.[t], e) : e?.[r];
|
|
159
|
+
let r = t ?? n ?? "";
|
|
160
|
+
return Array.isArray(r) ? r.reduce((e, t) => e?.[t], e) : r.includes(".") ? r.split(".").reduce((e, t) => e?.[t], e) : e?.[r];
|
|
129
161
|
}
|
|
130
162
|
//#endregion
|
|
131
163
|
//#region src/hooks/useFilter.ts
|
|
132
|
-
function
|
|
133
|
-
let [r,
|
|
134
|
-
let
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
164
|
+
function b(e, n = []) {
|
|
165
|
+
let [r, i] = s(n), o = a(() => {
|
|
166
|
+
let t = r.filter((e) => e.isActive !== !1).map((e) => ({
|
|
167
|
+
...e,
|
|
168
|
+
pathArray: (e.field || e.id).split(".")
|
|
169
|
+
}));
|
|
170
|
+
return e.filter((e) => t.every((t) => {
|
|
171
|
+
let { id: n, type: r, operator: i, value: a, compare: o, pathArray: s } = t, c = y(e, s, n);
|
|
172
|
+
if (r === "custom") return o ? o(c, a, e) : !0;
|
|
173
|
+
let l = v[r];
|
|
174
|
+
if (!l) return !0;
|
|
175
|
+
let u = l[i];
|
|
176
|
+
return u ? u(c, a, t) : !0;
|
|
177
|
+
}));
|
|
178
|
+
}, [e, r]), c = t((e) => {
|
|
179
|
+
i((t) => t.some((t) => t.id === e.id) ? t.map((t) => t.id === e.id ? e : t) : [...t, e]);
|
|
142
180
|
}, []), l = t((e) => {
|
|
143
|
-
|
|
181
|
+
i((t) => Array.isArray(e) ? t.filter((t) => !e.includes(t.id)) : t.filter((t) => t.id !== e));
|
|
144
182
|
}, []), u = t(() => {
|
|
145
|
-
|
|
183
|
+
i([]);
|
|
146
184
|
}, []), d = t(() => {
|
|
147
|
-
|
|
185
|
+
i(n);
|
|
148
186
|
}, [n]), f = t((e) => {
|
|
149
|
-
|
|
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]);
|
|
187
|
+
i(e);
|
|
188
|
+
}, []);
|
|
156
189
|
return {
|
|
157
|
-
filteredItems:
|
|
190
|
+
filteredItems: o,
|
|
158
191
|
filters: r,
|
|
159
|
-
|
|
192
|
+
upsertFilter: c,
|
|
160
193
|
removeFilter: l,
|
|
161
194
|
clearFilters: u,
|
|
162
195
|
resetFilters: d,
|
|
163
196
|
toggleFilter: t((e) => {
|
|
164
|
-
|
|
197
|
+
i((t) => t.some((t) => t.id === e.id) ? t.map((t) => t.id === e.id ? {
|
|
198
|
+
...t,
|
|
199
|
+
isActive: t.isActive === !1
|
|
200
|
+
} : t) : [...t, {
|
|
201
|
+
...e,
|
|
202
|
+
isActive: !0
|
|
203
|
+
}]);
|
|
165
204
|
}, []),
|
|
166
205
|
updateFilterConfig: t((e, t) => {
|
|
167
|
-
|
|
206
|
+
i((n) => n.map((n) => n.id === e ? {
|
|
168
207
|
...n,
|
|
169
208
|
...t
|
|
170
209
|
} : n));
|
|
171
210
|
}, []),
|
|
172
|
-
|
|
173
|
-
getFilterValue:
|
|
174
|
-
updateFilterValue:
|
|
175
|
-
|
|
211
|
+
replaceFilters: f,
|
|
212
|
+
getFilterValue: t((e) => r.find((t) => t.id === e)?.value, [r]),
|
|
213
|
+
updateFilterValue: t((e, t) => {
|
|
214
|
+
i((n) => n.map((n) => n.id === e ? {
|
|
215
|
+
...n,
|
|
216
|
+
value: t
|
|
217
|
+
} : n));
|
|
218
|
+
}, []),
|
|
219
|
+
isFilterActive: t((e) => {
|
|
220
|
+
let t = r.find((t) => t.id === e);
|
|
221
|
+
return t ? t.isActive !== !1 : !1;
|
|
222
|
+
}, [r])
|
|
176
223
|
};
|
|
177
224
|
}
|
|
178
225
|
//#endregion
|
|
179
226
|
//#region src/utils/fuzzySearchUtils.ts
|
|
180
|
-
function
|
|
227
|
+
function x(e, t, n = !1) {
|
|
181
228
|
let r = e.trim(), i = t.trim(), a = r.length > 1 && r === r.toUpperCase() && /^[A-Z]+$/.test(r);
|
|
182
229
|
if (n || (r = r.toLowerCase(), i = i.toLowerCase()), r === i) return 1;
|
|
183
230
|
if (r === "" || i === "") return 0;
|
|
@@ -226,11 +273,11 @@ function _(e, t, n = !1) {
|
|
|
226
273
|
}
|
|
227
274
|
//#endregion
|
|
228
275
|
//#region src/hooks/useFuzzySearch.ts
|
|
229
|
-
function
|
|
230
|
-
let
|
|
276
|
+
function S(e, t, n, r = {}) {
|
|
277
|
+
let i = r.threshold ?? .01, o = r.caseSensitive ?? !1, s = r.matchStrategy ?? "any", c = r.exactPhraseBonus ?? !0, l = a(() => n.length === 0 || e.length === 0 ? [] : e.map((e, t) => {
|
|
231
278
|
let r = [], i = [];
|
|
232
279
|
for (let [t, a] of n) {
|
|
233
|
-
let n =
|
|
280
|
+
let n = y(e, t);
|
|
234
281
|
if (Array.isArray(n)) {
|
|
235
282
|
for (let e of n) if (e != null && e !== "" && typeof e != "object") {
|
|
236
283
|
let t = String(e);
|
|
@@ -258,12 +305,12 @@ function v(e, t, n, r = {}) {
|
|
|
258
305
|
combinedFlatText: i.join(" ")
|
|
259
306
|
};
|
|
260
307
|
}), [e, n]);
|
|
261
|
-
return
|
|
308
|
+
return a(() => {
|
|
262
309
|
let n = t.trim();
|
|
263
310
|
if (!n || l.length === 0) return e;
|
|
264
311
|
let r = n.split(/\s+/).filter((e) => e.length > 0);
|
|
265
312
|
if (r.length === 0) return e;
|
|
266
|
-
let
|
|
313
|
+
let a = [], u = .3;
|
|
267
314
|
for (let e of l) {
|
|
268
315
|
let t = 0, n = 0, l = !1;
|
|
269
316
|
for (let i of r) {
|
|
@@ -276,7 +323,7 @@ function v(e, t, n, r = {}) {
|
|
|
276
323
|
let e = Math.abs(i.length - n.length), t = Math.max(i.length, n.length);
|
|
277
324
|
if (t > 0 && (t - e) / t < u) continue;
|
|
278
325
|
}
|
|
279
|
-
let e =
|
|
326
|
+
let e = x(i, n, o) * t.weight;
|
|
280
327
|
e > r && (r = e);
|
|
281
328
|
}
|
|
282
329
|
}
|
|
@@ -288,19 +335,19 @@ function v(e, t, n, r = {}) {
|
|
|
288
335
|
let t = r.map((e) => e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join("\\s+");
|
|
289
336
|
new RegExp(t, o ? "g" : "gi").test(e.combinedFlatText) && (n += .15);
|
|
290
337
|
}
|
|
291
|
-
n >=
|
|
338
|
+
n >= i && a.push({
|
|
292
339
|
item: e.item,
|
|
293
340
|
score: n,
|
|
294
341
|
index: e.index
|
|
295
342
|
});
|
|
296
343
|
}
|
|
297
344
|
}
|
|
298
|
-
return
|
|
345
|
+
return a.toSorted((e, t) => t.score === e.score ? e.index - t.index : t.score - e.score).map((e) => e.item);
|
|
299
346
|
}, [
|
|
300
347
|
l,
|
|
301
348
|
e,
|
|
302
349
|
t,
|
|
303
|
-
|
|
350
|
+
i,
|
|
304
351
|
o,
|
|
305
352
|
s,
|
|
306
353
|
c
|
|
@@ -308,42 +355,45 @@ function v(e, t, n, r = {}) {
|
|
|
308
355
|
}
|
|
309
356
|
//#endregion
|
|
310
357
|
//#region src/constants/keyConstants.ts
|
|
311
|
-
var
|
|
358
|
+
var C = [
|
|
312
359
|
"keydown",
|
|
313
360
|
"keyup",
|
|
314
361
|
"keypress"
|
|
315
362
|
];
|
|
316
363
|
//#endregion
|
|
317
364
|
//#region src/hooks/useKey.ts
|
|
318
|
-
function
|
|
319
|
-
let
|
|
320
|
-
|
|
321
|
-
|
|
365
|
+
function w(e, t, { enabled: n = !0, preventDefault: a = !0, stopPropagation: s = !0, eventType: c = "keydown", preventRepeat: l = !1, ignoreWhenFocusedInInputs: u = !0, ctrlKey: d = !1, shiftKey: f = !1, altKey: p = !1, metaKey: m = !1, target: h = window } = {}) {
|
|
366
|
+
let g = o(t), _ = o(n), v = o(!1);
|
|
367
|
+
i(() => {
|
|
368
|
+
g.current = t;
|
|
322
369
|
}, [t]), r(() => {
|
|
323
|
-
|
|
370
|
+
_.current = n;
|
|
324
371
|
}, [n]), r(() => {
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
372
|
+
let t = h && "current" in h ? h.current : h;
|
|
373
|
+
if (!t) return;
|
|
374
|
+
let n = e.toLowerCase(), r = C.includes(c) ? c : "keydown", i = l && r !== "keyup";
|
|
375
|
+
function o() {
|
|
376
|
+
v.current = !1;
|
|
377
|
+
}
|
|
378
|
+
function y(e) {
|
|
379
|
+
if (!(e instanceof KeyboardEvent)) return;
|
|
380
|
+
let t = e.key.toLowerCase();
|
|
381
|
+
(t === n || d && t === "control" || f && t === "shift" || p && t === "alt" || m && t === "meta") && (v.current = !1);
|
|
331
382
|
}
|
|
332
|
-
function
|
|
333
|
-
if (!(
|
|
334
|
-
let
|
|
335
|
-
if (!(
|
|
336
|
-
if (
|
|
337
|
-
|
|
383
|
+
function b(e) {
|
|
384
|
+
if (!(e instanceof KeyboardEvent) || !_.current) return;
|
|
385
|
+
let t = e.target;
|
|
386
|
+
if (!(u && t instanceof HTMLElement && (t instanceof HTMLInputElement || t instanceof HTMLTextAreaElement || t instanceof HTMLSelectElement || t.isContentEditable)) && e.ctrlKey === d && e.shiftKey === f && e.altKey === p && e.metaKey === m && n === e.key.toLowerCase()) {
|
|
387
|
+
if (i && v.current) return;
|
|
388
|
+
v.current = !0, g.current(e), a && e.preventDefault(), s && e.stopPropagation();
|
|
338
389
|
}
|
|
339
390
|
}
|
|
340
|
-
return
|
|
341
|
-
|
|
391
|
+
return t.addEventListener(r, b), i && (t.addEventListener("keyup", y), window.addEventListener("blur", o)), () => {
|
|
392
|
+
t.removeEventListener(r, b), i && (t.removeEventListener("keyup", y), window.removeEventListener("blur", o));
|
|
342
393
|
};
|
|
343
394
|
}, [
|
|
344
395
|
e,
|
|
345
|
-
|
|
346
|
-
o,
|
|
396
|
+
a,
|
|
347
397
|
s,
|
|
348
398
|
c,
|
|
349
399
|
l,
|
|
@@ -351,20 +401,79 @@ function b(e, t, { enabled: n = !0, preventDefault: i = !0, stopPropagation: o =
|
|
|
351
401
|
d,
|
|
352
402
|
f,
|
|
353
403
|
p,
|
|
354
|
-
|
|
404
|
+
m,
|
|
405
|
+
h
|
|
355
406
|
]);
|
|
356
407
|
}
|
|
357
408
|
//#endregion
|
|
409
|
+
//#region src/hooks/useOrder.ts
|
|
410
|
+
function T(e) {
|
|
411
|
+
let n = o(e), [r, i] = s(e);
|
|
412
|
+
return {
|
|
413
|
+
orderedItems: r,
|
|
414
|
+
moveUp: t((e) => {
|
|
415
|
+
typeof e == "number" && i((t) => {
|
|
416
|
+
if (e <= 0 || e >= t.length) return t;
|
|
417
|
+
let n = [...t];
|
|
418
|
+
return [n[e], n[e - 1]] = [n[e - 1], n[e]], n;
|
|
419
|
+
});
|
|
420
|
+
}, []),
|
|
421
|
+
moveDown: t((e) => {
|
|
422
|
+
typeof e == "number" && i((t) => {
|
|
423
|
+
if (e < 0 || e >= t.length - 1) return t;
|
|
424
|
+
let n = [...t];
|
|
425
|
+
return [n[e], n[e + 1]] = [n[e + 1], n[e]], n;
|
|
426
|
+
});
|
|
427
|
+
}, []),
|
|
428
|
+
canMoveUp: t((e) => e > 0, []),
|
|
429
|
+
canMoveDown: t((e) => e < r.length - 1, [r.length]),
|
|
430
|
+
moveToTop: t((e) => {
|
|
431
|
+
typeof e == "number" && i((t) => {
|
|
432
|
+
if (e <= 0 || e >= t.length) return t;
|
|
433
|
+
let n = [...t], [r] = n.splice(e, 1);
|
|
434
|
+
return n.unshift(r), n;
|
|
435
|
+
});
|
|
436
|
+
}, []),
|
|
437
|
+
moveToBottom: t((e) => {
|
|
438
|
+
typeof e == "number" && i((t) => {
|
|
439
|
+
if (e < 0 || e >= t.length - 1) return t;
|
|
440
|
+
let n = [...t], [r] = n.splice(e, 1);
|
|
441
|
+
return n.push(r), n;
|
|
442
|
+
});
|
|
443
|
+
}, []),
|
|
444
|
+
move: t((e, t) => {
|
|
445
|
+
typeof e != "number" || typeof t != "number" || e === t || i((n) => {
|
|
446
|
+
if (e < 0 || e >= n.length || t < 0 || t >= n.length) return n;
|
|
447
|
+
let r = [...n], [i] = r.splice(e, 1);
|
|
448
|
+
return r.splice(t, 0, i), r;
|
|
449
|
+
});
|
|
450
|
+
}, []),
|
|
451
|
+
swap: t((e, t) => {
|
|
452
|
+
typeof e != "number" || typeof t != "number" || e === t || i((n) => {
|
|
453
|
+
if (e < 0 || e >= n.length || t < 0 || t >= n.length) return n;
|
|
454
|
+
let r = [...n];
|
|
455
|
+
return [r[e], r[t]] = [r[t], r[e]], r;
|
|
456
|
+
});
|
|
457
|
+
}, []),
|
|
458
|
+
replaceOrder: t((e) => {
|
|
459
|
+
i(e);
|
|
460
|
+
}, []),
|
|
461
|
+
resetOrder: t(() => {
|
|
462
|
+
i(n.current);
|
|
463
|
+
}, [])
|
|
464
|
+
};
|
|
465
|
+
}
|
|
466
|
+
//#endregion
|
|
358
467
|
//#region src/hooks/usePagination.ts
|
|
359
|
-
function
|
|
360
|
-
let [
|
|
468
|
+
function E(e, n, r = 0) {
|
|
469
|
+
let [i, o] = s(n), [c, l] = s(r), u = Math.max(1, Math.ceil(e.length / Math.max(1, i))), d = Math.min(Math.max(0, c), u - 1);
|
|
361
470
|
return c !== d && l(d), {
|
|
362
|
-
|
|
471
|
+
pageItems: a(() => typeof i != "number" || i < 1 ? [] : e.slice(c * i, (c + 1) * i), [
|
|
363
472
|
c,
|
|
364
|
-
|
|
473
|
+
i,
|
|
365
474
|
e
|
|
366
475
|
]),
|
|
367
|
-
pageSize:
|
|
476
|
+
pageSize: i,
|
|
368
477
|
pageIndex: c,
|
|
369
478
|
totalPages: u,
|
|
370
479
|
canPrevious: c > 0,
|
|
@@ -375,18 +484,18 @@ function x(e, n, r = 0) {
|
|
|
375
484
|
previousPage: t(() => {
|
|
376
485
|
l((e) => e > 0 ? e - 1 : e);
|
|
377
486
|
}, []),
|
|
378
|
-
|
|
487
|
+
goToFirstPage: t(() => {
|
|
379
488
|
l(0);
|
|
380
489
|
}, []),
|
|
381
|
-
|
|
490
|
+
goToLastPage: t(() => {
|
|
382
491
|
l(u - 1);
|
|
383
492
|
}, [u]),
|
|
384
|
-
|
|
493
|
+
goToPage: t((e) => {
|
|
385
494
|
typeof e == "number" && e >= 0 && e <= u - 1 && l(e);
|
|
386
495
|
}, [u]),
|
|
387
|
-
|
|
496
|
+
changePageSize: t((t) => {
|
|
388
497
|
if (typeof t == "number" && t > 0) {
|
|
389
|
-
|
|
498
|
+
o(t);
|
|
390
499
|
let n = Math.max(1, Math.ceil(e.length / Math.max(1, t)));
|
|
391
500
|
l((e) => Math.min(Math.max(0, e), n - 1));
|
|
392
501
|
}
|
|
@@ -395,34 +504,43 @@ function x(e, n, r = 0) {
|
|
|
395
504
|
l(Math.min(Math.max(0, r), u - 1));
|
|
396
505
|
}, [r, u]),
|
|
397
506
|
resetPageSize: t(() => {
|
|
398
|
-
|
|
507
|
+
o(Math.max(1, n));
|
|
399
508
|
let t = Math.max(1, Math.ceil(e.length / Math.max(1, n)));
|
|
400
509
|
l((e) => Math.min(Math.max(0, e), t - 1));
|
|
401
|
-
}, [n, e.length])
|
|
510
|
+
}, [n, e.length]),
|
|
511
|
+
resetPagination: t(() => {
|
|
512
|
+
o(Math.max(1, n));
|
|
513
|
+
let t = Math.max(1, Math.ceil(e.length / Math.max(1, n)));
|
|
514
|
+
l(Math.min(Math.max(0, r), t - 1));
|
|
515
|
+
}, [
|
|
516
|
+
n,
|
|
517
|
+
r,
|
|
518
|
+
e.length
|
|
519
|
+
])
|
|
402
520
|
};
|
|
403
521
|
}
|
|
404
522
|
//#endregion
|
|
405
523
|
//#region src/utils/sortUtils.ts
|
|
406
|
-
function
|
|
407
|
-
let { sortUndefined: r, desc: i = !1 } = n, a =
|
|
524
|
+
function D(e, t, n = {}) {
|
|
525
|
+
let { sortUndefined: r, desc: i = !1 } = n, a = P(e, t, r, i);
|
|
408
526
|
if (a !== null) return a;
|
|
409
527
|
let o = !!e;
|
|
410
528
|
return o === !!t ? 0 : o ? 1 : -1;
|
|
411
529
|
}
|
|
412
|
-
function
|
|
413
|
-
let { sortUndefined: r, desc: i = !1 } = n, a =
|
|
530
|
+
function O(e, t, n = {}) {
|
|
531
|
+
let { sortUndefined: r, desc: i = !1 } = n, a = P(e, t, r, i);
|
|
414
532
|
if (a !== null) return a;
|
|
415
|
-
let o =
|
|
416
|
-
return c || l ?
|
|
533
|
+
let o = Number(e), s = Number(t), c = Number.isNaN(o), l = Number.isNaN(s);
|
|
534
|
+
return c || l ? P(c ? void 0 : o, l ? void 0 : s, r, i) ?? 0 : o - s;
|
|
417
535
|
}
|
|
418
|
-
function
|
|
419
|
-
let { desc: r = !1, sortUndefined: i, caseSensitive: a = !1 } = n, o =
|
|
536
|
+
function k(e, t, n = {}) {
|
|
537
|
+
let { desc: r = !1, sortUndefined: i, caseSensitive: a = !1 } = n, o = P(e, t, i, r);
|
|
420
538
|
if (o !== null) return o;
|
|
421
539
|
let s = String(e), c = String(t);
|
|
422
540
|
return s.localeCompare(c, void 0, { sensitivity: a ? "variant" : "base" });
|
|
423
541
|
}
|
|
424
|
-
function
|
|
425
|
-
let { desc: r = !1, sortUndefined: i, caseSensitive: a = !1 } = n, o =
|
|
542
|
+
function A(e, t, n = {}) {
|
|
543
|
+
let { desc: r = !1, sortUndefined: i, caseSensitive: a = !1 } = n, o = P(e, t, i, r);
|
|
426
544
|
if (o !== null) return o;
|
|
427
545
|
let s = String(e), c = String(t);
|
|
428
546
|
return s.localeCompare(c, void 0, {
|
|
@@ -430,116 +548,122 @@ function T(e, t, n = {}) {
|
|
|
430
548
|
sensitivity: a ? "variant" : "base"
|
|
431
549
|
});
|
|
432
550
|
}
|
|
433
|
-
function
|
|
434
|
-
let { desc: r = !1, sortUndefined: i } = n, a =
|
|
551
|
+
function j(e, t, n = {}) {
|
|
552
|
+
let { desc: r = !1, sortUndefined: i } = n, a = P(e, t, i, r);
|
|
435
553
|
if (a !== null) return a;
|
|
436
|
-
let o = new Date(e).getTime(), s = new Date(t).getTime();
|
|
437
|
-
return (
|
|
554
|
+
let o = new Date(e).getTime(), s = new Date(t).getTime(), c = Number.isNaN(o), l = Number.isNaN(s);
|
|
555
|
+
return (c || l) && (a = P(c ? void 0 : o, l ? void 0 : s, i, r), a !== null) ? a : o - s;
|
|
438
556
|
}
|
|
439
|
-
function
|
|
440
|
-
let { desc: r = !1, sortUndefined: i } = n, a =
|
|
557
|
+
function M(e, t, n = {}) {
|
|
558
|
+
let { desc: r = !1, sortUndefined: i } = n, a = P(e, t, i, r);
|
|
441
559
|
return a === null ? e < t ? -1 : +(e > t) : a;
|
|
442
560
|
}
|
|
443
|
-
function
|
|
444
|
-
let { desc: r = !1, sortUndefined: i, compare: a } = n, o =
|
|
561
|
+
function N(e, t, n = {}) {
|
|
562
|
+
let { desc: r = !1, sortUndefined: i, compare: a } = n, o = P(e, t, i, r);
|
|
445
563
|
return o === null ? typeof a == "function" ? a(e, t) : e < t ? -1 : +(e > t) : o;
|
|
446
564
|
}
|
|
447
|
-
function
|
|
448
|
-
let i = e
|
|
449
|
-
if (i
|
|
450
|
-
if (i
|
|
451
|
-
if (n === "first") return i
|
|
452
|
-
if (n === "last") return i
|
|
565
|
+
function P(e, t, n = "last", r) {
|
|
566
|
+
let i = e == null || e === "", a = t == null || t === "";
|
|
567
|
+
if (i && a) return 0;
|
|
568
|
+
if (!i && !a) return null;
|
|
569
|
+
if (n === "first") return i ? -1 : 1;
|
|
570
|
+
if (n === "last") return i ? 1 : -1;
|
|
453
571
|
if (n === -1) {
|
|
454
572
|
let e = r ? 1 : -1;
|
|
455
|
-
return i
|
|
573
|
+
return i ? e : -e;
|
|
456
574
|
}
|
|
457
575
|
if (n === 1) {
|
|
458
576
|
let e = r ? 1 : -1;
|
|
459
|
-
return i
|
|
577
|
+
return i ? -e : e;
|
|
460
578
|
}
|
|
461
579
|
return null;
|
|
462
580
|
}
|
|
463
581
|
//#endregion
|
|
464
582
|
//#region src/hooks/useSort.ts
|
|
465
|
-
function
|
|
466
|
-
let [r,
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
583
|
+
function F(e, n = []) {
|
|
584
|
+
let [r, i] = s(n), o = a(() => {
|
|
585
|
+
let t = r.map((e) => ({
|
|
586
|
+
...e,
|
|
587
|
+
pathArray: (e.field || e.id).split(".")
|
|
588
|
+
}));
|
|
589
|
+
return [...e].sort((e, n) => {
|
|
590
|
+
for (let r of t) {
|
|
591
|
+
let { type: t, id: i, desc: a = !1, invertSorting: o = !1, pathArray: s } = r, c = y(e, s, i), l = y(n, s, i), u;
|
|
592
|
+
switch (t) {
|
|
472
593
|
case "numeric":
|
|
473
|
-
u =
|
|
594
|
+
u = O(c, l, r);
|
|
474
595
|
break;
|
|
475
596
|
case "alphabetical":
|
|
476
|
-
u =
|
|
597
|
+
u = k(c, l, r);
|
|
477
598
|
break;
|
|
478
599
|
case "alphanumeric":
|
|
479
|
-
u =
|
|
600
|
+
u = A(c, l, r);
|
|
480
601
|
break;
|
|
481
602
|
case "boolean":
|
|
482
|
-
u =
|
|
603
|
+
u = D(c, l, r);
|
|
483
604
|
break;
|
|
484
605
|
case "date":
|
|
485
|
-
u =
|
|
606
|
+
u = j(c, l, r);
|
|
486
607
|
break;
|
|
487
608
|
case "basic":
|
|
488
|
-
u =
|
|
609
|
+
u = M(c, l, r);
|
|
489
610
|
break;
|
|
490
611
|
case "custom":
|
|
491
|
-
u =
|
|
612
|
+
u = N(c, l, r);
|
|
492
613
|
break;
|
|
493
|
-
default: u =
|
|
614
|
+
default: u = M(c, l, r);
|
|
494
615
|
}
|
|
495
|
-
if (u !== 0) return u * (
|
|
616
|
+
if (u !== 0) return u * (a === o ? 1 : -1);
|
|
496
617
|
}
|
|
497
618
|
return 0;
|
|
498
|
-
})
|
|
619
|
+
});
|
|
620
|
+
}, [r, e]), c = t((e) => i((t) => t.some((t) => t.id === e.id) ? t.map((t) => t.id === e.id ? e : t) : [...t, e]), []), l = t((e) => {
|
|
621
|
+
i((t) => Array.isArray(e) ? t.filter((t) => !e.includes(t.id)) : t.filter((t) => t.id !== e));
|
|
622
|
+
}, []), u = t(() => i([]), []), d = t(() => i(n), [n]), f = t((e) => i(e), []), p = t((e, t, n) => {
|
|
623
|
+
let { multi: r = !1, ...a } = n || {};
|
|
624
|
+
i((n) => {
|
|
625
|
+
let i = n.find((t) => t.id === e);
|
|
626
|
+
if (!i) {
|
|
627
|
+
let i = {
|
|
628
|
+
id: e,
|
|
629
|
+
type: t,
|
|
630
|
+
...a,
|
|
631
|
+
desc: !1
|
|
632
|
+
};
|
|
633
|
+
return r ? [...n, i] : [i];
|
|
634
|
+
}
|
|
635
|
+
if (!i.desc) {
|
|
636
|
+
let t = {
|
|
637
|
+
...i,
|
|
638
|
+
...a,
|
|
639
|
+
desc: !0
|
|
640
|
+
};
|
|
641
|
+
return r ? n.map((n) => n.id === e ? t : n) : [t];
|
|
642
|
+
}
|
|
643
|
+
if (i.disableSortRemoval || a.disableSortRemoval) {
|
|
644
|
+
let t = {
|
|
645
|
+
...i,
|
|
646
|
+
...a,
|
|
647
|
+
desc: !1
|
|
648
|
+
};
|
|
649
|
+
return r ? n.map((n) => n.id === e ? t : n) : [t];
|
|
650
|
+
}
|
|
651
|
+
return r ? n.filter((t) => t.id !== e) : [];
|
|
652
|
+
});
|
|
653
|
+
}, []);
|
|
654
|
+
return {
|
|
655
|
+
sortedItems: o,
|
|
499
656
|
sorts: r,
|
|
500
|
-
|
|
501
|
-
removeSort:
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
resetSorts: t(() => a(n), [n]),
|
|
506
|
-
setSorts: t((e) => a(e), []),
|
|
657
|
+
upsertSorts: c,
|
|
658
|
+
removeSort: l,
|
|
659
|
+
clearSorts: u,
|
|
660
|
+
resetSorts: d,
|
|
661
|
+
replaceSorts: f,
|
|
507
662
|
getSortDirection: t((e) => {
|
|
508
663
|
let t = r.find((t) => t.id === e);
|
|
509
664
|
return t ? t.desc ? "desc" : "asc" : void 0;
|
|
510
665
|
}, [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
|
-
}, []),
|
|
666
|
+
toggleSort: p,
|
|
543
667
|
getNextSortingOrder: t((e) => {
|
|
544
668
|
let t = r.find((t) => t.id === e);
|
|
545
669
|
return t ? t.desc ? t.disableSortRemoval ? "asc" : "none" : "desc" : "asc";
|
|
@@ -552,8 +676,8 @@ function A(e, n = []) {
|
|
|
552
676
|
}
|
|
553
677
|
//#endregion
|
|
554
678
|
//#region src/hooks/useThrottle.ts
|
|
555
|
-
function
|
|
556
|
-
let [
|
|
679
|
+
function I(e, n, i = {}) {
|
|
680
|
+
let [a, c] = s(!1), l = i.leading ?? !0, u = i.trailing ?? !0, d = o(e), f = o(null), p = o(-1), m = o(null);
|
|
557
681
|
r(() => {
|
|
558
682
|
d.current = e;
|
|
559
683
|
}, [e]);
|
|
@@ -582,8 +706,8 @@ function j(e, n, i = {}) {
|
|
|
582
706
|
]),
|
|
583
707
|
cancel: h,
|
|
584
708
|
flush: g,
|
|
585
|
-
isPending:
|
|
709
|
+
isPending: a
|
|
586
710
|
};
|
|
587
711
|
}
|
|
588
712
|
//#endregion
|
|
589
|
-
export {
|
|
713
|
+
export { h as ModalLayout, g as useDebounce, _ as useDebouncedValue, b as useFilter, S as useFuzzySearch, w as useKey, m as useModal, p as useModalActions, f as useModalState, T as useOrder, E as usePagination, F as useSort, I as useThrottle };
|