@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.
Files changed (3) hide show
  1. package/dist/index.d.ts +78 -28
  2. package/dist/index.js +164 -135
  3. 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 type FilterOperator = TextOperator | NumberOperator | BooleanOperator | DateOperator | SelectOperator | MultiselectOperator | CustomOperator;
38
- export interface FilterOptions {
37
+ export interface FilterOptions<T = unknown> {
39
38
  caseSensitive?: boolean;
40
- compare?: (itemValue: any, filterValue: any, item: any) => boolean;
39
+ compare?: (itemValue: unknown, filterValue: unknown, item: T) => boolean;
41
40
  }
42
- export interface FilterConfig extends FilterOptions {
41
+ export type BaseFilterConfig<T> = FilterOptions<T> & {
43
42
  id: string;
44
43
  field: string;
45
- type: FilterType;
46
- operator: FilterOperator;
47
- value: any;
48
- }
49
- export type FilterState = FilterConfig[];
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
- addFilter: (filter: FilterConfig) => void;
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
- setFilters: (filters: FilterConfig[]) => void;
58
- toggleFilter: (filter: FilterConfig) => void;
59
- updateFilterConfig: (id: string, partialConfig: Partial<Omit<FilterConfig, "id">>) => void;
60
- getFilterValue: (id: string) => any;
61
- updateFilterValue: (id: string, value: any) => void;
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 SortOptions {
171
+ export interface BaseSortOptions {
132
172
  desc?: boolean;
133
- caseSensitive?: boolean;
134
173
  disableSortRemoval?: boolean;
135
174
  invertSorting?: boolean;
136
- sortUndefined?: "first" | "last" | false | -1 | 1;
137
- compare?: (a: any, b: any) => number;
175
+ sortUndefined?: "first" | "last" | -1 | 1;
138
176
  }
139
- export interface SortConfig extends SortOptions {
177
+ export interface BaseSortConfig extends BaseSortOptions {
140
178
  id: string;
141
- type: SortType;
142
179
  field?: string;
143
180
  }
144
- export type SortState = Array<SortConfig>;
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
- addSort: (sort: SortConfig) => void;
197
+ upsertSorts: (sort: SortConfig) => void;
149
198
  removeSort: (id: string | string[]) => void;
150
199
  clearSorts: () => void;
151
200
  resetSorts: () => void;
152
- setSorts: (sorts: SortState) => void;
153
- getSortDirection: (id: string) => "asc" | "desc" | undefined;
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) => Number(e) >= Number(t.min) && Number(e) <= Number(t.max)
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).getTime(), r = new Date(t).getTime();
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).getTime(), r = new Date(t).getTime();
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).getTime(), r = new Date(t).getTime();
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 || !t?.min || !t?.max) return !1;
109
- let n = new Date(e).getTime(), r = new Date(t.min).getTime(), i = new Date(t.max).getTime();
110
- return Number.isNaN(n) || Number.isNaN(r) || Number.isNaN(i) ? !1 : n >= r && n <= i;
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 = (t || n) ?? "";
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(() => e.filter((e) => r.every((t) => {
134
- let { id: n, field: r, type: i, operator: a, value: o, compare: s } = t, c = h(e, r, n);
135
- if (i === "custom" || a === "custom") return s ? s(c, o, e) : !0;
136
- let l = m[i];
137
- if (!l) return !0;
138
- let u = l[a];
139
- return u ? u(c, o, t) : !0;
140
- })), [e, r]), c = t((e) => {
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
- }, []), p = t((e) => r.find((t) => t.id === e)?.value, [r]), g = t((e, t) => {
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
- addFilter: c,
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.filter((t) => t.id !== e.id) : [...t, e]);
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
- setFilters: f,
173
- getFilterValue: p,
174
- updateFilterValue: g,
175
- isFilterActive: _
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
- return c !== d && l(d), {
362
- currentItems: i(() => typeof a != "number" || a < 1 ? [] : e.slice(c * a, (c + 1) * a), [
363
- c,
364
- a,
365
- e
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: c > 0,
371
- canNext: c < u - 1,
372
- nextPage: t(() => {
373
- l((e) => e < u - 1 ? e + 1 : e);
374
- }, [u]),
375
- previousPage: t(() => {
376
- l((e) => e > 0 ? e - 1 : e);
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 = e === "" || e === null ? NaN : Number(e), s = t === "" || t === null ? NaN : Number(t), c = Number.isNaN(o), l = Number.isNaN(s);
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 (Number.isNaN(o) ? 0 : o) - (Number.isNaN(s) ? 0 : s);
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 = !1, r) {
448
- let i = e ?? void 0, a = t ?? void 0;
449
- if (i !== void 0 && a !== void 0) return null;
450
- if (i === void 0 && a === void 0 || n === !1) return 0;
451
- if (n === "first") return i === void 0 ? -1 : 1;
452
- if (n === "last") return i === void 0 ? 1 : -1;
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 === void 0 ? e : -e;
478
+ return i ? e : -e;
456
479
  }
457
480
  if (n === 1) {
458
481
  let e = r ? 1 : -1;
459
- return i === void 0 ? -e : e;
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
- return {
468
- sortedItems: i(() => e.toSorted((e, t) => {
469
- for (let n of r) {
470
- let { type: r, field: i, id: a, desc: o = !1, invertSorting: s = !1 } = n, c = h(e, i, a), l = h(t, i, a), u;
471
- switch (r) {
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, n);
499
+ u = C(c, l, r);
474
500
  break;
475
501
  case "alphabetical":
476
- u = w(c, l, n);
502
+ u = w(c, l, r);
477
503
  break;
478
504
  case "alphanumeric":
479
- u = T(c, l, n);
505
+ u = T(c, l, r);
480
506
  break;
481
507
  case "boolean":
482
- u = S(c, l, n);
508
+ u = S(c, l, r);
483
509
  break;
484
510
  case "date":
485
- u = E(c, l, n);
511
+ u = E(c, l, r);
486
512
  break;
487
513
  case "basic":
488
- u = D(c, l, n);
514
+ u = D(c, l, r);
489
515
  break;
490
516
  case "custom":
491
- u = O(c, l, n);
517
+ u = O(c, l, r);
492
518
  break;
493
- default: u = D(c, l, n);
519
+ default: u = D(c, l, r);
494
520
  }
495
- if (u !== 0) return u * (o === s ? 1 : -1);
521
+ if (u !== 0) return u * (a === o ? 1 : -1);
496
522
  }
497
523
  return 0;
498
- }), [r, e]),
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
- addSort: t((e) => a((t) => t.some((t) => t.id === e.id) ? t.map((t) => t.id === e.id ? e : t) : [...t, e]), []),
501
- removeSort: t((e) => {
502
- a((t) => Array.isArray(e) ? t.filter((t) => !e.includes(t.id)) : t.filter((t) => t.id !== e));
503
- }, []),
504
- clearSorts: t(() => a([]), []),
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: t((e, t, n) => {
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";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@himanshu-sorathiya/react-kit",
3
- "version": "1.0.10",
3
+ "version": "1.0.11",
4
4
  "description": "An opinionated collection of react hooks, and reusable UI components.",
5
5
  "type": "module",
6
6
  "module": "./dist/index.js",