pam-grid 1.0.5 → 1.0.7
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.css +16 -381
- package/dist/index.css.map +1 -1
- package/dist/index.d.mts +40 -21
- package/dist/index.d.ts +40 -21
- package/dist/index.js +326 -367
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +318 -359
- package/dist/index.mjs.map +1 -1
- package/dist/styles/pam.grid.css +16 -381
- package/dist/styles/pam.grid.css.map +1 -1
- package/package.json +1 -1
- package/dist/Box-QGC2UZ43.svg +0 -9
- package/dist/NoSearchResult-R4W2UYSR.svg +0 -15
package/dist/index.js
CHANGED
|
@@ -43,63 +43,10 @@ __export(index_exports, {
|
|
|
43
43
|
module.exports = __toCommonJS(index_exports);
|
|
44
44
|
|
|
45
45
|
// src/components/PamGrid.tsx
|
|
46
|
-
var
|
|
47
|
-
|
|
48
|
-
// src/components/PamHeaderOption.tsx
|
|
49
|
-
var import_react4 = require("react");
|
|
50
|
-
var import_react_dom = require("react-dom");
|
|
51
|
-
|
|
52
|
-
// src/core/useDropdownPosition.ts
|
|
53
|
-
var import_react = require("react");
|
|
54
|
-
var useDropdownPosition = (triggerRef, menuRef, isOpen, level = 0) => {
|
|
55
|
-
const [style, setStyle] = (0, import_react.useState)({
|
|
56
|
-
position: "fixed",
|
|
57
|
-
visibility: "hidden"
|
|
58
|
-
});
|
|
59
|
-
(0, import_react.useLayoutEffect)(() => {
|
|
60
|
-
if (!isOpen || !triggerRef.current || !menuRef.current) return;
|
|
61
|
-
const updatePosition = () => {
|
|
62
|
-
if (!triggerRef.current || !menuRef.current) return null;
|
|
63
|
-
const btn = triggerRef.current.getBoundingClientRect();
|
|
64
|
-
const menu = menuRef.current;
|
|
65
|
-
const menuHeight = menu.offsetHeight;
|
|
66
|
-
const menuWidth = menu.offsetWidth;
|
|
67
|
-
const vh = window.innerHeight;
|
|
68
|
-
const vw = window.innerWidth;
|
|
69
|
-
const spaceBelow = vh - btn.bottom;
|
|
70
|
-
const spaceAbove = btn.top;
|
|
71
|
-
const openUp = menuHeight > spaceBelow && spaceAbove > spaceBelow;
|
|
72
|
-
let top = openUp ? btn.top - menuHeight : btn.bottom;
|
|
73
|
-
if (top < 8) top = 8;
|
|
74
|
-
if (top + menuHeight > vh - 8) top = vh - menuHeight - 8;
|
|
75
|
-
let left = btn.left;
|
|
76
|
-
if (level === 0) {
|
|
77
|
-
if (left + menuWidth > vw - 8) left = vw - menuWidth - 8;
|
|
78
|
-
} else {
|
|
79
|
-
left = btn.right;
|
|
80
|
-
if (left + menuWidth > vw - 8) {
|
|
81
|
-
left = btn.left - menuWidth;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
setStyle({
|
|
85
|
-
position: "fixed",
|
|
86
|
-
top,
|
|
87
|
-
left,
|
|
88
|
-
zIndex: 99999,
|
|
89
|
-
maxHeight: vh - 16,
|
|
90
|
-
overflowY: "auto"
|
|
91
|
-
});
|
|
92
|
-
};
|
|
93
|
-
requestAnimationFrame(updatePosition);
|
|
94
|
-
setTimeout(updatePosition, 50);
|
|
95
|
-
window.addEventListener("resize", updatePosition);
|
|
96
|
-
return () => window.removeEventListener("resize", updatePosition);
|
|
97
|
-
}, [isOpen, level]);
|
|
98
|
-
return style;
|
|
99
|
-
};
|
|
46
|
+
var import_react4 = __toESM(require("react"));
|
|
100
47
|
|
|
101
48
|
// src/components/AdvanceFilter.tsx
|
|
102
|
-
var
|
|
49
|
+
var import_react = require("react");
|
|
103
50
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
104
51
|
var OPERATORS = {
|
|
105
52
|
number: [
|
|
@@ -129,10 +76,10 @@ function AdvanceFilter({
|
|
|
129
76
|
onApply,
|
|
130
77
|
onClear
|
|
131
78
|
}) {
|
|
132
|
-
const [operation, setOperation] = (0,
|
|
133
|
-
const [v1, setV1] = (0,
|
|
134
|
-
const [v2, setV2] = (0,
|
|
135
|
-
(0,
|
|
79
|
+
const [operation, setOperation] = (0, import_react.useState)("");
|
|
80
|
+
const [v1, setV1] = (0, import_react.useState)("");
|
|
81
|
+
const [v2, setV2] = (0, import_react.useState)("");
|
|
82
|
+
(0, import_react.useEffect)(() => {
|
|
136
83
|
if (!value) {
|
|
137
84
|
setOperation("");
|
|
138
85
|
setV1("");
|
|
@@ -207,7 +154,7 @@ function AdvanceFilter({
|
|
|
207
154
|
}
|
|
208
155
|
|
|
209
156
|
// src/core/utils.ts
|
|
210
|
-
var
|
|
157
|
+
var import_react2 = require("react");
|
|
211
158
|
function getAdvancedFilterType(column) {
|
|
212
159
|
const f = column.enableAdvancedFilter;
|
|
213
160
|
if (!f) return null;
|
|
@@ -246,7 +193,7 @@ function useLocalStorageState(key, initialValue) {
|
|
|
246
193
|
return initialValue;
|
|
247
194
|
}
|
|
248
195
|
};
|
|
249
|
-
const [value, setValue] = (0,
|
|
196
|
+
const [value, setValue] = (0, import_react2.useState)(getValue);
|
|
250
197
|
const updateValue = (newValue) => {
|
|
251
198
|
setValue(newValue);
|
|
252
199
|
localStorage.setItem(key, JSON.stringify(newValue));
|
|
@@ -256,7 +203,7 @@ function useLocalStorageState(key, initialValue) {
|
|
|
256
203
|
})
|
|
257
204
|
);
|
|
258
205
|
};
|
|
259
|
-
(0,
|
|
206
|
+
(0, import_react2.useEffect)(() => {
|
|
260
207
|
const sync = (e) => {
|
|
261
208
|
if (e?.detail?.key === key) {
|
|
262
209
|
setValue(e.detail.value);
|
|
@@ -278,194 +225,85 @@ function useLocalStorageState(key, initialValue) {
|
|
|
278
225
|
|
|
279
226
|
// src/components/PamHeaderOption.tsx
|
|
280
227
|
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
281
|
-
var
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
onPinRight,
|
|
286
|
-
onUnpin,
|
|
287
|
-
// from useGridCore
|
|
288
|
-
advanceFilters,
|
|
289
|
-
setColumnAdvanceFilter
|
|
228
|
+
var PamHeaderOptions = ({
|
|
229
|
+
currentColumn,
|
|
230
|
+
gridFetaures,
|
|
231
|
+
grid
|
|
290
232
|
}) => {
|
|
291
|
-
const
|
|
292
|
-
const
|
|
293
|
-
const
|
|
294
|
-
const
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
const [open, setOpen] = (0, import_react4.useState)(false);
|
|
300
|
-
const [openMenu, setOpenMenu] = (0, import_react4.useState)(null);
|
|
301
|
-
const mainStyle = useDropdownPosition(btnRef, menuRef, open, 0);
|
|
302
|
-
const filterStyle = useDropdownPosition(
|
|
303
|
-
filterBtnRef,
|
|
304
|
-
filterMenuRef,
|
|
305
|
-
openMenu === "filter",
|
|
306
|
-
1
|
|
307
|
-
);
|
|
308
|
-
const pinStyle = useDropdownPosition(
|
|
309
|
-
pinBtnRef,
|
|
310
|
-
pinMenuRef,
|
|
311
|
-
openMenu === "pin",
|
|
312
|
-
1
|
|
313
|
-
);
|
|
314
|
-
const toggleMenu = (name, e) => {
|
|
315
|
-
e.stopPropagation();
|
|
316
|
-
setOpenMenu((prev) => prev === name ? null : name);
|
|
233
|
+
const items = [];
|
|
234
|
+
const { advanceFilters, setColumnAdvanceFilter, colState, updateColumn } = grid;
|
|
235
|
+
const { key: columnKey } = currentColumn;
|
|
236
|
+
const pinColumn = (key, side) => {
|
|
237
|
+
const col = colState.find((c) => c.key === key);
|
|
238
|
+
if (!col) return;
|
|
239
|
+
const newPinned = col.pinned === side ? null : side;
|
|
240
|
+
updateColumn(key, { pinned: newPinned });
|
|
317
241
|
};
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
"span",
|
|
334
|
-
{
|
|
335
|
-
ref: btnRef,
|
|
336
|
-
className: "cursor-pointer",
|
|
337
|
-
onClick: (e) => {
|
|
338
|
-
e.stopPropagation();
|
|
339
|
-
setOpen((p) => !p);
|
|
242
|
+
const unpinColumn = (key) => {
|
|
243
|
+
updateColumn(key, { pinned: null });
|
|
244
|
+
};
|
|
245
|
+
if (gridFetaures.pinning) {
|
|
246
|
+
items.push({
|
|
247
|
+
key: `pined-col-${String(currentColumn.key)}`,
|
|
248
|
+
label: "Pinned",
|
|
249
|
+
icon: "bx bx-pin",
|
|
250
|
+
keepOpenOnClick: true,
|
|
251
|
+
children: [
|
|
252
|
+
{
|
|
253
|
+
key: `pined-col-${String(currentColumn.key)}-noPinned`,
|
|
254
|
+
label: "No Pinned",
|
|
255
|
+
icon: !currentColumn.pinned ? "bx bx-check text-primary" : "",
|
|
256
|
+
onClick: () => unpinColumn(currentColumn.key)
|
|
340
257
|
},
|
|
341
|
-
children: [
|
|
342
|
-
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("i", { className: "bx bx-dots-vertical-rounded bx-sm" }),
|
|
343
|
-
advanceFilters[String(columnKey)] && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: "badge rounded-pill bg-info badge-dot badge-notifications" })
|
|
344
|
-
]
|
|
345
|
-
}
|
|
346
|
-
),
|
|
347
|
-
open && (0, import_react_dom.createPortal)(
|
|
348
|
-
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
349
|
-
"ul",
|
|
350
258
|
{
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
"button",
|
|
362
|
-
{
|
|
363
|
-
ref: filterBtnRef,
|
|
364
|
-
className: "dropdown-item d-flex justify-content-between",
|
|
365
|
-
onClick: (e) => toggleMenu("filter", e),
|
|
366
|
-
children: [
|
|
367
|
-
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("span", { children: [
|
|
368
|
-
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("i", { className: "bx bx-filter-alt me-2" }),
|
|
369
|
-
" Filter"
|
|
370
|
-
] }),
|
|
371
|
-
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("i", { className: "bx bx-chevron-right" })
|
|
372
|
-
]
|
|
373
|
-
}
|
|
374
|
-
),
|
|
375
|
-
openMenu === "filter" && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
376
|
-
"ul",
|
|
377
|
-
{
|
|
378
|
-
ref: filterMenuRef,
|
|
379
|
-
className: "dropdown-menu shadow rounded-3 p-2 show",
|
|
380
|
-
style: {
|
|
381
|
-
...filterStyle,
|
|
382
|
-
position: "fixed",
|
|
383
|
-
zIndex: 10001
|
|
384
|
-
},
|
|
385
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
386
|
-
AdvanceFilter,
|
|
387
|
-
{
|
|
388
|
-
type: getAdvancedFilterType(column),
|
|
389
|
-
value: advanceFilters[String(columnKey)],
|
|
390
|
-
onApply: (f) => setColumnAdvanceFilter(String(columnKey), f),
|
|
391
|
-
onClear: () => setColumnAdvanceFilter(String(columnKey), null)
|
|
392
|
-
}
|
|
393
|
-
)
|
|
394
|
-
}
|
|
395
|
-
)
|
|
396
|
-
] }),
|
|
397
|
-
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("li", { className: "dropdown-submenu dropstart", children: [
|
|
398
|
-
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
399
|
-
"button",
|
|
400
|
-
{
|
|
401
|
-
ref: pinBtnRef,
|
|
402
|
-
className: "dropdown-item d-flex justify-content-between",
|
|
403
|
-
onClick: (e) => toggleMenu("pin", e),
|
|
404
|
-
children: [
|
|
405
|
-
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("span", { children: [
|
|
406
|
-
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("i", { className: "bx bx-pin me-2" }),
|
|
407
|
-
" Pin Column"
|
|
408
|
-
] }),
|
|
409
|
-
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("i", { className: "bx bx-chevron-right" })
|
|
410
|
-
]
|
|
411
|
-
}
|
|
412
|
-
),
|
|
413
|
-
openMenu === "pin" && /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
414
|
-
"ul",
|
|
415
|
-
{
|
|
416
|
-
ref: pinMenuRef,
|
|
417
|
-
className: "dropdown-menu shadow rounded-3 py-2 show",
|
|
418
|
-
style: {
|
|
419
|
-
...pinStyle,
|
|
420
|
-
position: "fixed",
|
|
421
|
-
zIndex: 10001
|
|
422
|
-
},
|
|
423
|
-
children: [
|
|
424
|
-
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
425
|
-
"div",
|
|
426
|
-
{
|
|
427
|
-
className: "dropdown-item d-flex gap-2 cursor-pointer",
|
|
428
|
-
onClick: onUnpin,
|
|
429
|
-
children: [
|
|
430
|
-
!pinned && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("i", { className: "bx bx-check text-primary" }),
|
|
431
|
-
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { children: "No Pin" })
|
|
432
|
-
]
|
|
433
|
-
}
|
|
434
|
-
),
|
|
435
|
-
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
436
|
-
"div",
|
|
437
|
-
{
|
|
438
|
-
className: "dropdown-item d-flex gap-2 cursor-pointer",
|
|
439
|
-
onClick: onPinLeft,
|
|
440
|
-
children: [
|
|
441
|
-
pinned === "left" && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("i", { className: "bx bx-check text-primary" }),
|
|
442
|
-
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { children: "Pin Left" })
|
|
443
|
-
]
|
|
444
|
-
}
|
|
445
|
-
),
|
|
446
|
-
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
447
|
-
"div",
|
|
448
|
-
{
|
|
449
|
-
className: "dropdown-item d-flex gap-2 cursor-pointer",
|
|
450
|
-
onClick: onPinRight,
|
|
451
|
-
children: [
|
|
452
|
-
pinned === "right" && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("i", { className: "bx bx-check text-primary" }),
|
|
453
|
-
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { children: "Pin Right" })
|
|
454
|
-
]
|
|
455
|
-
}
|
|
456
|
-
)
|
|
457
|
-
]
|
|
458
|
-
}
|
|
459
|
-
)
|
|
460
|
-
] })
|
|
461
|
-
]
|
|
259
|
+
key: `pined-col-${String(currentColumn.key)}-leftPinned`,
|
|
260
|
+
label: "Left Pinned",
|
|
261
|
+
icon: currentColumn.pinned === "left" ? "bx bx-check text-primary" : "",
|
|
262
|
+
onClick: () => pinColumn(currentColumn.key, "left")
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
key: `pined-col-${String(currentColumn.key)}-rightPinned`,
|
|
266
|
+
label: "Right Pinned",
|
|
267
|
+
icon: currentColumn.pinned === "right" ? "bx bx-check text-primary" : "",
|
|
268
|
+
onClick: () => pinColumn(currentColumn.key, "right")
|
|
462
269
|
}
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
270
|
+
]
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
if (currentColumn.enableAdvancedFilter) {
|
|
274
|
+
items.push({
|
|
275
|
+
key: `advance-filter-${String(currentColumn.key)}`,
|
|
276
|
+
label: "Filte By Column",
|
|
277
|
+
icon: "bx bx-sm bx-filter",
|
|
278
|
+
children: [
|
|
279
|
+
{
|
|
280
|
+
key: `advance-filter-${String(currentColumn.key)}-apply`,
|
|
281
|
+
keepOpenOnClick: true,
|
|
282
|
+
label: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
283
|
+
AdvanceFilter,
|
|
284
|
+
{
|
|
285
|
+
type: getAdvancedFilterType(currentColumn),
|
|
286
|
+
value: advanceFilters[String(columnKey)],
|
|
287
|
+
onApply: (f) => setColumnAdvanceFilter(String(columnKey), f),
|
|
288
|
+
onClear: () => setColumnAdvanceFilter(String(columnKey), null)
|
|
289
|
+
}
|
|
290
|
+
)
|
|
291
|
+
}
|
|
292
|
+
]
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
296
|
+
PamDropdown,
|
|
297
|
+
{
|
|
298
|
+
trigger: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
|
|
299
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("i", { className: "bx bx-sm bx-dots-vertical-rounded cursor-pointer" }),
|
|
300
|
+
advanceFilters[String(columnKey)] && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: "badge rounded-pill bg-info badge-dot badge-notifications" })
|
|
301
|
+
] }),
|
|
302
|
+
items
|
|
303
|
+
}
|
|
304
|
+
);
|
|
467
305
|
};
|
|
468
|
-
var PamHeaderOption_default =
|
|
306
|
+
var PamHeaderOption_default = PamHeaderOptions;
|
|
469
307
|
|
|
470
308
|
// src/components/FilterApplied.tsx
|
|
471
309
|
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
@@ -473,8 +311,10 @@ var FilterApplied = ({
|
|
|
473
311
|
groupBy,
|
|
474
312
|
removeGroupby,
|
|
475
313
|
advance,
|
|
476
|
-
removeFilter
|
|
314
|
+
removeFilter,
|
|
315
|
+
grid
|
|
477
316
|
}) => {
|
|
317
|
+
const { switchFiltersConfig, switchQuery, toggleSwitchFilter } = grid;
|
|
478
318
|
const OPERATION = [
|
|
479
319
|
{ key: "eq", label: " == " },
|
|
480
320
|
{ key: "neq", label: " \u2260 " },
|
|
@@ -507,7 +347,7 @@ var FilterApplied = ({
|
|
|
507
347
|
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "d-flex flex-row gap-1 py-1 px-3 ", children: [
|
|
508
348
|
groupBy && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { className: "badge bg-label-primary text-capitalize", children: [
|
|
509
349
|
"GroupBy : ",
|
|
510
|
-
groupBy,
|
|
350
|
+
groupBy.label,
|
|
511
351
|
" ",
|
|
512
352
|
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
513
353
|
"i",
|
|
@@ -533,7 +373,31 @@ var FilterApplied = ({
|
|
|
533
373
|
]
|
|
534
374
|
},
|
|
535
375
|
item.column
|
|
536
|
-
))
|
|
376
|
+
)),
|
|
377
|
+
switchFiltersConfig !== void 0 && switchFiltersConfig?.length > 0 && switchFiltersConfig.map((swicth) => {
|
|
378
|
+
return Object.entries(switchQuery).map(([key, value]) => {
|
|
379
|
+
if (swicth.queryParam === key && swicth.defaultValue !== value) {
|
|
380
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
381
|
+
"span",
|
|
382
|
+
{
|
|
383
|
+
className: "badge bg-label-warning text-capitalize",
|
|
384
|
+
children: [
|
|
385
|
+
swicth.label,
|
|
386
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
387
|
+
"i",
|
|
388
|
+
{
|
|
389
|
+
className: "bx bx-x bx-xs cursor-pointer",
|
|
390
|
+
onClick: () => toggleSwitchFilter?.(swicth.key)
|
|
391
|
+
}
|
|
392
|
+
)
|
|
393
|
+
]
|
|
394
|
+
},
|
|
395
|
+
key
|
|
396
|
+
);
|
|
397
|
+
}
|
|
398
|
+
return null;
|
|
399
|
+
});
|
|
400
|
+
})
|
|
537
401
|
] });
|
|
538
402
|
};
|
|
539
403
|
var FilterApplied_default = FilterApplied;
|
|
@@ -597,7 +461,7 @@ var Compress = ({ onClick }) => {
|
|
|
597
461
|
var Compress_default = Compress;
|
|
598
462
|
|
|
599
463
|
// src/assets/icons/Box.svg
|
|
600
|
-
var Box_default = "./Box-QGC2UZ43.svg";
|
|
464
|
+
var Box_default = 'data:image/svg+xml,<svg width="250" height="200" viewBox="0 0 250 200" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">%0D%0A<rect width="250" height="200" fill="url(%23pattern0_249_513)"/>%0D%0A<defs>%0D%0A<pattern id="pattern0_249_513" patternContentUnits="objectBoundingBox" width="1" height="1">%0D%0A<use xlink:href="%23image0_249_513" transform="scale(0.004 0.005)"/>%0D%0A</pattern>%0D%0A<image id="image0_249_513" width="250" height="200" preserveAspectRatio="none" xlink:href="data:image/png;base64,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"/>%0D%0A</defs>%0D%0A</svg>%0D%0A';
|
|
601
465
|
|
|
602
466
|
// src/components/EmptyState.tsx
|
|
603
467
|
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
@@ -615,7 +479,7 @@ var EmptyState = ({
|
|
|
615
479
|
var EmptyState_default = EmptyState;
|
|
616
480
|
|
|
617
481
|
// src/assets/icons/NoSearchResult.svg
|
|
618
|
-
var NoSearchResult_default = "
|
|
482
|
+
var NoSearchResult_default = 'data:image/svg+xml,<svg width="250" height="200" viewBox="0 0 250 200" fill="none" xmlns="http://www.w3.org/2000/svg">%0D%0A<rect width="250" height="200" fill="white"/>%0D%0A<path fill-rule="evenodd" clip-rule="evenodd" d="M207 65C210.866 65 214 68.134 214 72C214 75.866 210.866 79 207 79H167C170.866 79 174 82.134 174 86C174 89.866 170.866 93 167 93H189C192.866 93 196 96.134 196 100C196 103.866 192.866 107 189 107H178.826C173.952 107 170 110.134 170 114C170 116.577 172 118.911 176 121C179.866 121 183 124.134 183 128C183 131.866 179.866 135 176 135H93C89.134 135 86 131.866 86 128C86 124.134 89.134 121 93 121H54C50.134 121 47 117.866 47 114C47 110.134 50.134 107 54 107H94C97.866 107 101 103.866 101 100C101 96.134 97.866 93 94 93H69C65.134 93 62 89.866 62 86C62 82.134 65.134 79 69 79H109C105.134 79 102 75.866 102 72C102 68.134 105.134 65 109 65H207ZM207 93C210.866 93 214 96.134 214 100C214 103.866 210.866 107 207 107C203.134 107 200 103.866 200 100C200 96.134 203.134 93 207 93Z" fill="%23F3F7FF"/>%0D%0A<path d="M120.5 133C139.002 133 154 118.002 154 99.5C154 80.9985 139.002 66 120.5 66C101.998 66 87 80.9985 87 99.5C87 118.002 101.998 133 120.5 133Z" fill="%23F3F7FF" stroke="%231F64E7" stroke-width="2.5"/>%0D%0A<path fill-rule="evenodd" clip-rule="evenodd" d="M115.132 125.494C116.891 125.819 118.68 125.987 120.5 126C135.136 126 147 114.136 147 99.5C147 84.8645 135.136 73 120.5 73C116.74 73 113.164 73.7829 109.924 75.1946C104.294 77.6479 99.6816 81.9999 96.896 87.4419C95.0445 91.0589 94 95.1575 94 99.5C94 103.44 94.8599 107.179 96.4021 110.54C97.5032 112.94 98.9521 115.146 100.684 117.096" fill="white"/>%0D%0A<path d="M115.132 125.494C116.891 125.819 118.68 125.987 120.5 126C135.136 126 147 114.136 147 99.5C147 84.8645 135.136 73 120.5 73C116.74 73 113.164 73.7829 109.924 75.1946C104.294 77.6479 99.6816 81.9999 96.896 87.4419C95.0445 91.0589 94 95.1575 94 99.5C94 103.44 94.8599 107.179 96.4021 110.54C97.5032 112.94 98.9521 115.146 100.684 117.096" stroke="%231F64E7" stroke-width="2.5" stroke-linecap="round"/>%0D%0A<path d="M103.797 120.075C105.945 121.821 108.372 123.237 111.001 124.247" stroke="%231F64E7" stroke-width="2.5" stroke-linecap="round"/>%0D%0A<path d="M148 126L154 132" stroke="%231F64E7" stroke-width="2.5"/>%0D%0A<path fill-rule="evenodd" clip-rule="evenodd" d="M153.03 131.03C151.138 132.923 151.138 135.992 153.03 137.884L164.116 148.97C166.008 150.862 169.077 150.862 170.97 148.97C172.863 147.077 172.863 144.008 170.97 142.116L159.885 131.03C157.992 129.138 154.923 129.138 153.03 131.03Z" fill="%23E8F0FE" stroke="%231F64E7" stroke-width="2.5"/>%0D%0A<path d="M158 133L169 144" stroke="white" stroke-width="2.5" stroke-linecap="round"/>%0D%0A<path fill-rule="evenodd" clip-rule="evenodd" d="M114 88C114 99.598 123.402 109 135 109C137.278 109 139.472 108.637 141.526 107.966C138.173 116.287 130.023 122.161 120.5 122.161C107.985 122.161 97.8394 112.015 97.8394 99.5C97.8394 88.1596 106.17 78.7648 117.045 77.1011C115.113 80.2793 114 84.0097 114 88Z" fill="%23E8F0FE"/>%0D%0A<path d="M121 81C119.727 81 118.482 81.1253 117.279 81.3642M113.645 82.4761C106.804 85.3508 102 92.1144 102 100" stroke="%2375A4FE" stroke-width="2.5" stroke-linecap="round"/>%0D%0A<path d="M174.176 99.7773H166M180.5 92H163.324H180.5ZM187.5 92H185.279H187.5Z" stroke="%2375A4FE" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/>%0D%0A<path d="M84.1758 121.777H76M79.5 113H62.3242H79.5ZM56.5 113H52.2788H56.5Z" stroke="%2375A4FE" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/>%0D%0A</svg>%0D%0A';
|
|
619
483
|
|
|
620
484
|
// src/components/icons/ArrowFromBottonToRight.tsx
|
|
621
485
|
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
@@ -792,8 +656,8 @@ var Pagination = ({
|
|
|
792
656
|
var Paginantion_default = Pagination;
|
|
793
657
|
|
|
794
658
|
// src/components/dropdown/PamDropdown.tsx
|
|
795
|
-
var
|
|
796
|
-
var
|
|
659
|
+
var import_react3 = require("react");
|
|
660
|
+
var import_react_dom = require("react-dom");
|
|
797
661
|
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
798
662
|
function PamDropdown({
|
|
799
663
|
trigger,
|
|
@@ -804,12 +668,12 @@ function PamDropdown({
|
|
|
804
668
|
closeOnItemClick = true,
|
|
805
669
|
className = ""
|
|
806
670
|
}) {
|
|
807
|
-
const triggerRef = (0,
|
|
808
|
-
const menuRef = (0,
|
|
809
|
-
const [open, setOpen] = (0,
|
|
810
|
-
const [pos, setPos] = (0,
|
|
811
|
-
const [openSubKeys, setOpenSubKeys] = (0,
|
|
812
|
-
const portalRoot = (0,
|
|
671
|
+
const triggerRef = (0, import_react3.useRef)(null);
|
|
672
|
+
const menuRef = (0, import_react3.useRef)(null);
|
|
673
|
+
const [open, setOpen] = (0, import_react3.useState)(false);
|
|
674
|
+
const [pos, setPos] = (0, import_react3.useState)({ top: 0, left: 0 });
|
|
675
|
+
const [openSubKeys, setOpenSubKeys] = (0, import_react3.useState)({});
|
|
676
|
+
const portalRoot = (0, import_react3.useMemo)(() => {
|
|
813
677
|
const el = document.getElementById("pam-portal-root");
|
|
814
678
|
if (el) return el;
|
|
815
679
|
const created = document.createElement("div");
|
|
@@ -861,11 +725,11 @@ function PamDropdown({
|
|
|
861
725
|
if (!t || !m) return;
|
|
862
726
|
setPos(getDropdownPosition(t, m));
|
|
863
727
|
}
|
|
864
|
-
(0,
|
|
728
|
+
(0, import_react3.useLayoutEffect)(() => {
|
|
865
729
|
if (!open) return;
|
|
866
730
|
updatePosition();
|
|
867
731
|
}, [open, placement]);
|
|
868
|
-
(0,
|
|
732
|
+
(0, import_react3.useEffect)(() => {
|
|
869
733
|
if (!open) return;
|
|
870
734
|
const onDown = (e) => {
|
|
871
735
|
const t = triggerRef.current;
|
|
@@ -886,7 +750,7 @@ function PamDropdown({
|
|
|
886
750
|
document.removeEventListener("keydown", onKey);
|
|
887
751
|
};
|
|
888
752
|
}, [open]);
|
|
889
|
-
(0,
|
|
753
|
+
(0, import_react3.useEffect)(() => {
|
|
890
754
|
if (!open) return;
|
|
891
755
|
const handler = () => updatePosition();
|
|
892
756
|
window.addEventListener("scroll", handler, true);
|
|
@@ -898,7 +762,7 @@ function PamDropdown({
|
|
|
898
762
|
}, [open]);
|
|
899
763
|
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
900
764
|
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { ref: triggerRef, className: `pam-dropdown-trigger ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { onClick: toggle, style: { display: "inline-flex" }, children: trigger }) }),
|
|
901
|
-
open && (0,
|
|
765
|
+
open && (0, import_react_dom.createPortal)(
|
|
902
766
|
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
903
767
|
"div",
|
|
904
768
|
{
|
|
@@ -956,12 +820,12 @@ function PamDropdownNode({
|
|
|
956
820
|
level,
|
|
957
821
|
index
|
|
958
822
|
}) {
|
|
959
|
-
const liRef = (0,
|
|
960
|
-
const submenuRef = (0,
|
|
823
|
+
const liRef = (0, import_react3.useRef)(null);
|
|
824
|
+
const submenuRef = (0, import_react3.useRef)(null);
|
|
961
825
|
const hasChildren = !!item.children?.length;
|
|
962
826
|
const nodeKey = item.key ?? `${level}-${index}`;
|
|
963
827
|
const submenuOpen = !!openSubKeys[nodeKey];
|
|
964
|
-
(0,
|
|
828
|
+
(0, import_react3.useLayoutEffect)(() => {
|
|
965
829
|
if (!submenuOpen) return;
|
|
966
830
|
const li = liRef.current;
|
|
967
831
|
const menu = submenuRef.current;
|
|
@@ -1048,23 +912,29 @@ function PamDropdownNode({
|
|
|
1048
912
|
].join(" "),
|
|
1049
913
|
onClick: handleClick,
|
|
1050
914
|
children: [
|
|
1051
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
915
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
|
916
|
+
"div",
|
|
917
|
+
{
|
|
918
|
+
className: `${item.rightSlot ? "pam-dropdown-item-inner-rightSlot" : "pam-dropdown-item-inner"} `,
|
|
919
|
+
children: [
|
|
920
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "pam-left", children: [
|
|
921
|
+
item.icon && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("i", { className: `${item.icon} pam-icon` }),
|
|
922
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "pam-label", children: item.label })
|
|
923
|
+
] }),
|
|
924
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "pam-right", children: [
|
|
925
|
+
item.rightSlot && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
926
|
+
"span",
|
|
927
|
+
{
|
|
928
|
+
className: "pam-rightslot",
|
|
929
|
+
onClick: (e) => e.stopPropagation(),
|
|
930
|
+
children: item.rightSlot
|
|
931
|
+
}
|
|
932
|
+
),
|
|
933
|
+
hasChildren && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("i", { className: "bx bx-chevron-right pam-arrow" })
|
|
934
|
+
] })
|
|
935
|
+
]
|
|
936
|
+
}
|
|
937
|
+
),
|
|
1068
938
|
hasChildren && submenuOpen && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { ref: submenuRef, className: "pam-submenu", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
1069
939
|
PamDropdownList,
|
|
1070
940
|
{
|
|
@@ -1087,7 +957,15 @@ var MainFilter = ({
|
|
|
1087
957
|
gridFetaures,
|
|
1088
958
|
grid
|
|
1089
959
|
}) => {
|
|
1090
|
-
const {
|
|
960
|
+
const {
|
|
961
|
+
setGroupBy,
|
|
962
|
+
visibleColumns,
|
|
963
|
+
colState,
|
|
964
|
+
updateColumn,
|
|
965
|
+
switchFiltersConfig,
|
|
966
|
+
switchFilters,
|
|
967
|
+
toggleSwitchFilter
|
|
968
|
+
} = grid;
|
|
1091
969
|
const [isBulkData, setBulkData] = useLocalStorageState(
|
|
1092
970
|
"bulk-data-toggle",
|
|
1093
971
|
false
|
|
@@ -1123,11 +1001,11 @@ var MainFilter = ({
|
|
|
1123
1001
|
children: visibleColumns.length > 0 ? visibleColumns.filter((c) => c.groupable).map((c) => ({
|
|
1124
1002
|
key: `group-${String(c.key)}`,
|
|
1125
1003
|
label: c.title,
|
|
1126
|
-
onClick: () => setGroupBy(String(c.key))
|
|
1004
|
+
onClick: () => setGroupBy({ key: String(c.key), label: c.title })
|
|
1127
1005
|
})) : []
|
|
1128
1006
|
});
|
|
1129
1007
|
}
|
|
1130
|
-
if (gridFetaures?.
|
|
1008
|
+
if (gridFetaures?.bulkActionsConfig && gridFetaures.bulkActionsConfig.length > 0) {
|
|
1131
1009
|
items.push({
|
|
1132
1010
|
key: "bulk-data",
|
|
1133
1011
|
keepOpenOnClick: true,
|
|
@@ -1158,12 +1036,43 @@ var MainFilter = ({
|
|
|
1158
1036
|
] })
|
|
1159
1037
|
});
|
|
1160
1038
|
}
|
|
1039
|
+
if (switchFiltersConfig !== void 0 && switchFiltersConfig?.length > 0) {
|
|
1040
|
+
switchFiltersConfig.forEach((filter) => {
|
|
1041
|
+
items.push({
|
|
1042
|
+
key: `switch-${filter.key}`,
|
|
1043
|
+
keepOpenOnClick: true,
|
|
1044
|
+
label: filter.label,
|
|
1045
|
+
rightSlot: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
1046
|
+
"label",
|
|
1047
|
+
{
|
|
1048
|
+
className: "switch switch-square switch-sm",
|
|
1049
|
+
onClick: (e) => e.stopPropagation(),
|
|
1050
|
+
children: [
|
|
1051
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
1052
|
+
"input",
|
|
1053
|
+
{
|
|
1054
|
+
type: "checkbox",
|
|
1055
|
+
className: "switch-input",
|
|
1056
|
+
checked: !!switchFilters?.[filter.key],
|
|
1057
|
+
onChange: () => toggleSwitchFilter(filter.key)
|
|
1058
|
+
}
|
|
1059
|
+
),
|
|
1060
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("span", { className: "switch-toggle-slider", children: [
|
|
1061
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "switch-on", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("i", { className: "icon-base bx bx-check" }) }),
|
|
1062
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "switch-off", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("i", { className: "icon-base bx bx-x" }) })
|
|
1063
|
+
] })
|
|
1064
|
+
]
|
|
1065
|
+
}
|
|
1066
|
+
)
|
|
1067
|
+
});
|
|
1068
|
+
});
|
|
1069
|
+
}
|
|
1161
1070
|
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
1162
1071
|
PamDropdown,
|
|
1163
1072
|
{
|
|
1164
1073
|
trigger: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("button", { type: "button", className: "btn btn-sm btn-label-secondary me-2", children: [
|
|
1165
|
-
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "icon-base bx bx-filter-alt
|
|
1166
|
-
"Filter"
|
|
1074
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "icon-base bx bx-filter-alt" }),
|
|
1075
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "d-none d-sm-inline ms-1", children: "Filter" })
|
|
1167
1076
|
] }),
|
|
1168
1077
|
items
|
|
1169
1078
|
}
|
|
@@ -1174,7 +1083,18 @@ var TableAction = ({
|
|
|
1174
1083
|
gridFetaures,
|
|
1175
1084
|
row
|
|
1176
1085
|
}) => {
|
|
1177
|
-
const items = Array.isArray(gridFetaures.actions) ? gridFetaures.actions.filter((act) =>
|
|
1086
|
+
const items = Array.isArray(gridFetaures.actions) ? gridFetaures.actions.filter((act) => {
|
|
1087
|
+
if (typeof act.isVisible === "function") {
|
|
1088
|
+
if (row) {
|
|
1089
|
+
return act.isVisible(row);
|
|
1090
|
+
}
|
|
1091
|
+
return false;
|
|
1092
|
+
}
|
|
1093
|
+
if (typeof act.isVisible === "boolean") {
|
|
1094
|
+
return act.isVisible;
|
|
1095
|
+
}
|
|
1096
|
+
return true;
|
|
1097
|
+
}).map((a, i) => ({
|
|
1178
1098
|
key: `action-${String(a.label)}-${i}`,
|
|
1179
1099
|
label: a.label,
|
|
1180
1100
|
icon: a.icon,
|
|
@@ -1213,14 +1133,15 @@ var PamGrid = ({
|
|
|
1213
1133
|
addNew,
|
|
1214
1134
|
renderExpanded
|
|
1215
1135
|
}) => {
|
|
1216
|
-
const [isFullScreen, setFullScreen] = (0,
|
|
1217
|
-
const [
|
|
1136
|
+
const [isFullScreen, setFullScreen] = (0, import_react4.useState)(false);
|
|
1137
|
+
const [draggingCol, setDraggingCol] = (0, import_react4.useState)(null);
|
|
1138
|
+
const [activeCell, setActiveCell] = (0, import_react4.useState)(null);
|
|
1218
1139
|
const [isBulkAction, setBulkAction] = useLocalStorageState(
|
|
1219
1140
|
"bulk-data-toggle",
|
|
1220
1141
|
false
|
|
1221
1142
|
);
|
|
1222
|
-
const wrapperRef = (0,
|
|
1223
|
-
const dragState = (0,
|
|
1143
|
+
const wrapperRef = (0, import_react4.useRef)(null);
|
|
1144
|
+
const dragState = (0, import_react4.useRef)({ from: null });
|
|
1224
1145
|
const {
|
|
1225
1146
|
rows,
|
|
1226
1147
|
page,
|
|
@@ -1246,20 +1167,10 @@ var PamGrid = ({
|
|
|
1246
1167
|
toggleExpand,
|
|
1247
1168
|
setColState,
|
|
1248
1169
|
emptyState,
|
|
1249
|
-
|
|
1250
|
-
// setAdanceFilter,
|
|
1170
|
+
addNewRecord,
|
|
1251
1171
|
advanceFilters,
|
|
1252
1172
|
setColumnAdvanceFilter
|
|
1253
1173
|
} = grid;
|
|
1254
|
-
const pinColumn = (key, side) => {
|
|
1255
|
-
const col = colState.find((c) => c.key === key);
|
|
1256
|
-
if (!col) return;
|
|
1257
|
-
const newPinned = col.pinned === side ? null : side;
|
|
1258
|
-
updateColumn(key, { pinned: newPinned });
|
|
1259
|
-
};
|
|
1260
|
-
const unpinColumn = (key) => {
|
|
1261
|
-
updateColumn(key, { pinned: null });
|
|
1262
|
-
};
|
|
1263
1174
|
const onResizeMouseDown = (e, key) => {
|
|
1264
1175
|
e.preventDefault();
|
|
1265
1176
|
const startX = e.clientX;
|
|
@@ -1300,12 +1211,12 @@ var PamGrid = ({
|
|
|
1300
1211
|
return next.sort((a, b) => a.order - b.order);
|
|
1301
1212
|
});
|
|
1302
1213
|
};
|
|
1303
|
-
const groupedRows =
|
|
1214
|
+
const groupedRows = import_react4.default.useMemo(() => {
|
|
1304
1215
|
if (!groupBy) return null;
|
|
1305
|
-
const column = visibleColumns.find((col) => col.key === groupBy);
|
|
1216
|
+
const column = visibleColumns.find((col) => col.key === groupBy.key);
|
|
1306
1217
|
const map = {};
|
|
1307
1218
|
rows.forEach((r) => {
|
|
1308
|
-
const rawValue = column?.groupByValue ? column.groupByValue(r) : column?.nestedPath ? getNestedValue(r, column.nestedPath) : r[groupBy];
|
|
1219
|
+
const rawValue = column?.groupByValue ? column.groupByValue(r) : column?.nestedPath ? getNestedValue(r, column.nestedPath) : r[groupBy.key];
|
|
1309
1220
|
const groupKey = rawValue === null || rawValue === void 0 ? "unknown" : typeof rawValue === "object" ? String(rawValue?.id ?? JSON.stringify(rawValue)) : String(rawValue);
|
|
1310
1221
|
if (!map[groupKey]) {
|
|
1311
1222
|
map[groupKey] = { rawValue, items: [] };
|
|
@@ -1333,7 +1244,7 @@ var PamGrid = ({
|
|
|
1333
1244
|
}, [rows, groupBy, visibleColumns]);
|
|
1334
1245
|
const currentRows = rows;
|
|
1335
1246
|
const gridHeight = isFullScreen ? "calc(100vh - 120px)" : "calc(100vh - 320px)";
|
|
1336
|
-
(0,
|
|
1247
|
+
(0, import_react4.useEffect)(() => {
|
|
1337
1248
|
document.body.style.overflow = isFullScreen ? "hidden" : "";
|
|
1338
1249
|
}, [isFullScreen]);
|
|
1339
1250
|
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
@@ -1341,9 +1252,9 @@ var PamGrid = ({
|
|
|
1341
1252
|
{
|
|
1342
1253
|
className: `pms-grid ${isFullScreen ? "card card-action card-fullscreen p-4" : ""}`,
|
|
1343
1254
|
children: [
|
|
1344
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "row ", children: [
|
|
1345
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "col-8", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "
|
|
1346
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", {
|
|
1255
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "row align-items-center g-2", children: [
|
|
1256
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "col-12 col-md-8 col-lg-9", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "row", children: [
|
|
1257
|
+
features.search && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "col-8 col-md-4", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1347
1258
|
"input",
|
|
1348
1259
|
{
|
|
1349
1260
|
type: "search",
|
|
@@ -1353,33 +1264,42 @@ var PamGrid = ({
|
|
|
1353
1264
|
onChange: (e) => setSearch(e.target.value)
|
|
1354
1265
|
}
|
|
1355
1266
|
) }),
|
|
1356
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(MainFilter_default, { gridFetaures: features, grid })
|
|
1267
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "col-4 col-md-4", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(MainFilter_default, { gridFetaures: features, grid }) })
|
|
1357
1268
|
] }) }),
|
|
1358
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "col-4 ", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "d-flex justify-content-end align-items-center gap-2", children: [
|
|
1359
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.
|
|
1269
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "col-12 col-md-4 col-lg-3", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "d-flex justify-content-md-end justify-content-between align-items-center gap-2 mt-2 mt-md-0", children: [
|
|
1270
|
+
addNewRecord && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
1360
1271
|
"button",
|
|
1361
1272
|
{
|
|
1362
1273
|
type: "button",
|
|
1363
|
-
className: "btn btn-sm btn-
|
|
1364
|
-
|
|
1365
|
-
|
|
1274
|
+
className: `${addNewRecord?.class || "btn btn-sm btn-label-secondary"} d-flex align-items-center gap-1`,
|
|
1275
|
+
onClick: addNewRecord.onClick,
|
|
1276
|
+
onMouseEnter: (e) => showTooltip(addNewRecord?.label, e.clientX, e.clientY),
|
|
1277
|
+
onMouseMove: (e) => showTooltip(addNewRecord?.label, e.clientX, e.clientY),
|
|
1366
1278
|
onMouseLeave: hideTooltip,
|
|
1367
|
-
|
|
1368
|
-
|
|
1279
|
+
children: [
|
|
1280
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1281
|
+
"span",
|
|
1282
|
+
{
|
|
1283
|
+
className: `icon-base ${addNewRecord?.icon || "bx bx-plus-circle"}`
|
|
1284
|
+
}
|
|
1285
|
+
),
|
|
1286
|
+
addNewRecord?.name && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "d-none d-sm-inline", children: addNewRecord?.name })
|
|
1287
|
+
]
|
|
1369
1288
|
}
|
|
1370
1289
|
),
|
|
1371
|
-
isFullScreen ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Minimize_default, { onClick: () => setFullScreen(!isFullScreen) }) : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Compress_default, { onClick: () => setFullScreen(!isFullScreen) })
|
|
1290
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "flex-shrink-0", children: isFullScreen ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Minimize_default, { onClick: () => setFullScreen(!isFullScreen) }) : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Compress_default, { onClick: () => setFullScreen(!isFullScreen) }) })
|
|
1372
1291
|
] }) })
|
|
1373
1292
|
] }),
|
|
1374
1293
|
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "d-flex flex-row gap-1", children: [
|
|
1375
|
-
selected.size > 0 && features.
|
|
1294
|
+
selected.size > 0 && features.bulkActionsConfig && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(BulkAction_default, { records: selected, actions: features.bulkActionsConfig }),
|
|
1376
1295
|
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1377
1296
|
FilterApplied_default,
|
|
1378
1297
|
{
|
|
1379
1298
|
groupBy,
|
|
1380
1299
|
removeGroupby: () => setGroupBy(null),
|
|
1381
1300
|
advance: advanceFilters,
|
|
1382
|
-
removeFilter: (columnKey) => setColumnAdvanceFilter(String(columnKey), null)
|
|
1301
|
+
removeFilter: (columnKey) => setColumnAdvanceFilter(String(columnKey), null),
|
|
1302
|
+
grid
|
|
1383
1303
|
}
|
|
1384
1304
|
)
|
|
1385
1305
|
] }),
|
|
@@ -1438,10 +1358,18 @@ var PamGrid = ({
|
|
|
1438
1358
|
"th",
|
|
1439
1359
|
{
|
|
1440
1360
|
draggable: features.reorder,
|
|
1441
|
-
onDragStart: (e) =>
|
|
1361
|
+
onDragStart: (e) => {
|
|
1362
|
+
setDraggingCol(String(col.key));
|
|
1363
|
+
onDragStart(e, String(col.key));
|
|
1364
|
+
},
|
|
1365
|
+
onDragEnd: () => setDraggingCol(null),
|
|
1442
1366
|
onDragOver: (e) => e.preventDefault(),
|
|
1443
1367
|
onDrop: (e) => onDrop(e, col.key),
|
|
1444
|
-
className: `pms-col-header vs-th
|
|
1368
|
+
className: `pms-col-header vs-th
|
|
1369
|
+
${features.reorder ? "cursor-grab" : ""}
|
|
1370
|
+
${draggingCol === col.key ? "cursor-grabbing" : ""}
|
|
1371
|
+
${col.pinned ? `pinned pinned-${col.pinned}` : ""}
|
|
1372
|
+
`,
|
|
1445
1373
|
style,
|
|
1446
1374
|
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
1447
1375
|
"div",
|
|
@@ -1452,16 +1380,16 @@ var PamGrid = ({
|
|
|
1452
1380
|
"div",
|
|
1453
1381
|
{
|
|
1454
1382
|
onClick: () => col.sortable && changeSort(String(col.key)),
|
|
1455
|
-
|
|
1383
|
+
className: col.sortable ? "cursor-pointer" : "",
|
|
1456
1384
|
children: [
|
|
1457
1385
|
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("small", { children: col.title }),
|
|
1458
1386
|
sortBy.key === col.key && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1459
1387
|
"i",
|
|
1460
1388
|
{
|
|
1461
|
-
className: `bx bx-sm ${sortBy.dir === "asc" ? "bxs-chevron-up" : "bxs-chevron-down"}`
|
|
1389
|
+
className: `bx bx-sm ${sortBy.dir === "asc" ? "bxs-chevron-up" : "bxs-chevron-down"} cursor-pointer`
|
|
1462
1390
|
}
|
|
1463
1391
|
),
|
|
1464
|
-
col.pinned === col.key && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("i", { className: "bx bx-x" })
|
|
1392
|
+
col.pinned === col.key && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("i", { className: "bx bx-x cursor-pointer" })
|
|
1465
1393
|
]
|
|
1466
1394
|
}
|
|
1467
1395
|
),
|
|
@@ -1469,19 +1397,15 @@ var PamGrid = ({
|
|
|
1469
1397
|
features.pinning && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1470
1398
|
PamHeaderOption_default,
|
|
1471
1399
|
{
|
|
1472
|
-
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
onPinRight: () => pinColumn(col.key, "right"),
|
|
1476
|
-
onUnpin: () => unpinColumn(col.key),
|
|
1477
|
-
advanceFilters,
|
|
1478
|
-
setColumnAdvanceFilter
|
|
1400
|
+
currentColumn: col,
|
|
1401
|
+
gridFetaures: features,
|
|
1402
|
+
grid
|
|
1479
1403
|
}
|
|
1480
1404
|
),
|
|
1481
|
-
|
|
1405
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1482
1406
|
"i",
|
|
1483
1407
|
{
|
|
1484
|
-
className: "
|
|
1408
|
+
className: "bx bx-move-horizontal text-white cursor-resize",
|
|
1485
1409
|
onMouseDown: (e) => onResizeMouseDown(e, col.key)
|
|
1486
1410
|
}
|
|
1487
1411
|
)
|
|
@@ -1513,7 +1437,7 @@ var PamGrid = ({
|
|
|
1513
1437
|
EmptyState_default,
|
|
1514
1438
|
{
|
|
1515
1439
|
title: emptyState.title,
|
|
1516
|
-
description:
|
|
1440
|
+
description: `No results found for "${search}"`,
|
|
1517
1441
|
imgSrc: NoSearchResult_default
|
|
1518
1442
|
}
|
|
1519
1443
|
) : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
@@ -1526,7 +1450,7 @@ var PamGrid = ({
|
|
|
1526
1450
|
) }) })
|
|
1527
1451
|
},
|
|
1528
1452
|
index
|
|
1529
|
-
) }, `row-${index}`)) : !loading && groupBy && groupedRows && groupedRows.length > 0 ? groupedRows.map((g, indG) => /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
1453
|
+
) }, `row-${index}`)) : !loading && groupBy && groupedRows && groupedRows.length > 0 ? groupedRows.map((g, indG) => /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_react4.default.Fragment, { children: [
|
|
1530
1454
|
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("tr", { className: "pam-bg-light-primary", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
1531
1455
|
"td",
|
|
1532
1456
|
{
|
|
@@ -1558,7 +1482,7 @@ var PamGrid = ({
|
|
|
1558
1482
|
style: { width: "80px" },
|
|
1559
1483
|
value: pageSize,
|
|
1560
1484
|
onChange: (e) => setPageSize(Number(e.target.value)),
|
|
1561
|
-
children: [
|
|
1485
|
+
children: [20, 50, 100].map((n) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("option", { value: n, children: n }, n))
|
|
1562
1486
|
}
|
|
1563
1487
|
),
|
|
1564
1488
|
" ",
|
|
@@ -1582,7 +1506,7 @@ var PamGrid = ({
|
|
|
1582
1506
|
function renderRow(row, ind) {
|
|
1583
1507
|
const isSelected = selected.has(String(row[rowKey]));
|
|
1584
1508
|
const isExpanded = expanded.has(String(row[rowKey]));
|
|
1585
|
-
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
1509
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_react4.default.Fragment, { children: [
|
|
1586
1510
|
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("tr", { children: [
|
|
1587
1511
|
features.IsNumbering && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("td", { className: "text-center align-middle p-2", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("small", { className: "text-secondry", children: ind + 1 }) }),
|
|
1588
1512
|
features.expand && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("td", { className: "text-center align-middle ", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
@@ -1688,7 +1612,7 @@ var PamGrid = ({
|
|
|
1688
1612
|
}
|
|
1689
1613
|
)
|
|
1690
1614
|
] }),
|
|
1691
|
-
isExpanded && renderExpanded && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("tr", { className: "
|
|
1615
|
+
isExpanded && renderExpanded && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("tr", { className: "expanded-row", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1692
1616
|
"td",
|
|
1693
1617
|
{
|
|
1694
1618
|
colSpan: visibleColumns.length + (features.selection ? 1 : 0) + (features.expand ? 1 : 0) + (features.actions ? 1 : 0),
|
|
@@ -1771,42 +1695,53 @@ var ColumnVisibilityPanel = ({
|
|
|
1771
1695
|
var ColumnVisibilityPanel_default = ColumnVisibilityPanel;
|
|
1772
1696
|
|
|
1773
1697
|
// src/core/useGridCore.ts
|
|
1774
|
-
var
|
|
1698
|
+
var import_react5 = require("react");
|
|
1775
1699
|
function useGridCore({
|
|
1776
1700
|
data = [],
|
|
1777
1701
|
columns = [],
|
|
1778
1702
|
serverMode = false,
|
|
1779
1703
|
rowKey = "id",
|
|
1780
|
-
initialPageSize = 20
|
|
1704
|
+
initialPageSize = 20,
|
|
1705
|
+
addNewRecord,
|
|
1706
|
+
switchFiltersConfig
|
|
1781
1707
|
}) {
|
|
1782
|
-
const [page, setPage] = (0,
|
|
1783
|
-
const [pageSize, setPageSize] = (0,
|
|
1784
|
-
const [search, setSearch] = (0,
|
|
1785
|
-
const [debouncedSearch, setDebouncedSearch] = (0,
|
|
1786
|
-
const [groupBy, setGroupBy] = (0,
|
|
1787
|
-
const [emptyState, setEmptyState] = (0,
|
|
1788
|
-
const [advanceFilters, setAdvanceFilters] = (0,
|
|
1789
|
-
const [sortBy, setSortBy] = (0,
|
|
1790
|
-
const [selected, setSelected] = (0,
|
|
1791
|
-
const [expanded, setExpanded] = (0,
|
|
1792
|
-
const [
|
|
1793
|
-
|
|
1794
|
-
|
|
1795
|
-
|
|
1708
|
+
const [page, setPage] = (0, import_react5.useState)(1);
|
|
1709
|
+
const [pageSize, setPageSize] = (0, import_react5.useState)(initialPageSize);
|
|
1710
|
+
const [search, setSearch] = (0, import_react5.useState)("");
|
|
1711
|
+
const [debouncedSearch, setDebouncedSearch] = (0, import_react5.useState)("");
|
|
1712
|
+
const [groupBy, setGroupBy] = (0, import_react5.useState)(null);
|
|
1713
|
+
const [emptyState, setEmptyState] = (0, import_react5.useState)({});
|
|
1714
|
+
const [advanceFilters, setAdvanceFilters] = (0, import_react5.useState)({});
|
|
1715
|
+
const [sortBy, setSortBy] = (0, import_react5.useState)({ key: null, dir: "asc" });
|
|
1716
|
+
const [selected, setSelected] = (0, import_react5.useState)(/* @__PURE__ */ new Set());
|
|
1717
|
+
const [expanded, setExpanded] = (0, import_react5.useState)(/* @__PURE__ */ new Set());
|
|
1718
|
+
const [switchFilters, setSwitchFilters] = (0, import_react5.useState)(
|
|
1719
|
+
() => {
|
|
1720
|
+
const initial = {};
|
|
1721
|
+
switchFiltersConfig?.forEach((f) => {
|
|
1722
|
+
initial[f.key] = f.defaultValue ?? false;
|
|
1723
|
+
});
|
|
1724
|
+
return initial;
|
|
1725
|
+
}
|
|
1726
|
+
);
|
|
1727
|
+
const [serverRows, setServerRows] = (0, import_react5.useState)([]);
|
|
1728
|
+
const [serverTotal, setServerTotal] = (0, import_react5.useState)(0);
|
|
1729
|
+
const [serverTotalPages, setServerTotalPages] = (0, import_react5.useState)(1);
|
|
1730
|
+
const [colState, setColState] = (0, import_react5.useState)(
|
|
1796
1731
|
() => columns.map((c, i) => ({
|
|
1797
1732
|
...c,
|
|
1798
1733
|
visible: c.visible !== false,
|
|
1799
1734
|
order: i
|
|
1800
1735
|
}))
|
|
1801
1736
|
);
|
|
1802
|
-
(0,
|
|
1737
|
+
(0, import_react5.useEffect)(() => {
|
|
1803
1738
|
const t = setTimeout(() => {
|
|
1804
1739
|
setDebouncedSearch(search);
|
|
1805
1740
|
setPage(1);
|
|
1806
1741
|
}, 400);
|
|
1807
1742
|
return () => clearTimeout(t);
|
|
1808
1743
|
}, [search]);
|
|
1809
|
-
const filteredData = (0,
|
|
1744
|
+
const filteredData = (0, import_react5.useMemo)(() => {
|
|
1810
1745
|
if (serverMode) return [];
|
|
1811
1746
|
let filtered = [...data];
|
|
1812
1747
|
if (debouncedSearch) {
|
|
@@ -1829,7 +1764,7 @@ function useGridCore({
|
|
|
1829
1764
|
}
|
|
1830
1765
|
return filtered;
|
|
1831
1766
|
}, [data, debouncedSearch, sortBy, serverMode]);
|
|
1832
|
-
const pagedClientRows = (0,
|
|
1767
|
+
const pagedClientRows = (0, import_react5.useMemo)(() => {
|
|
1833
1768
|
if (serverMode) return [];
|
|
1834
1769
|
const start = (page - 1) * pageSize;
|
|
1835
1770
|
return filteredData.slice(start, start + pageSize);
|
|
@@ -1837,7 +1772,7 @@ function useGridCore({
|
|
|
1837
1772
|
const rows = serverMode ? serverRows : pagedClientRows;
|
|
1838
1773
|
const totalRows = serverMode ? serverTotal : filteredData.length;
|
|
1839
1774
|
const totalPages = serverMode ? serverTotalPages : Math.max(1, Math.ceil(totalRows / pageSize));
|
|
1840
|
-
const toggleSelect = (0,
|
|
1775
|
+
const toggleSelect = (0, import_react5.useCallback)((id) => {
|
|
1841
1776
|
const key = String(id);
|
|
1842
1777
|
setSelected((prev) => {
|
|
1843
1778
|
const s = new Set(prev);
|
|
@@ -1845,7 +1780,7 @@ function useGridCore({
|
|
|
1845
1780
|
return s;
|
|
1846
1781
|
});
|
|
1847
1782
|
}, []);
|
|
1848
|
-
const selectAllOnPage = (0,
|
|
1783
|
+
const selectAllOnPage = (0, import_react5.useCallback)(
|
|
1849
1784
|
(rows2) => {
|
|
1850
1785
|
setSelected((prev) => {
|
|
1851
1786
|
const s = new Set(prev);
|
|
@@ -1855,7 +1790,7 @@ function useGridCore({
|
|
|
1855
1790
|
},
|
|
1856
1791
|
[rowKey]
|
|
1857
1792
|
);
|
|
1858
|
-
const deselectAllOnPage = (0,
|
|
1793
|
+
const deselectAllOnPage = (0, import_react5.useCallback)(
|
|
1859
1794
|
(rows2) => {
|
|
1860
1795
|
setSelected((prev) => {
|
|
1861
1796
|
const s = new Set(prev);
|
|
@@ -1865,13 +1800,13 @@ function useGridCore({
|
|
|
1865
1800
|
},
|
|
1866
1801
|
[rowKey]
|
|
1867
1802
|
);
|
|
1868
|
-
const changeSort = (0,
|
|
1803
|
+
const changeSort = (0, import_react5.useCallback)((key) => {
|
|
1869
1804
|
setSortBy(
|
|
1870
1805
|
(p) => p.key !== key ? { key, dir: "asc" } : p.dir === "asc" ? { key, dir: "desc" } : { key: null, dir: "asc" }
|
|
1871
1806
|
);
|
|
1872
1807
|
setPage(1);
|
|
1873
1808
|
}, []);
|
|
1874
|
-
const setColumnAdvanceFilter = (0,
|
|
1809
|
+
const setColumnAdvanceFilter = (0, import_react5.useCallback)(
|
|
1875
1810
|
(column, filter) => {
|
|
1876
1811
|
setAdvanceFilters((prev) => {
|
|
1877
1812
|
if (!filter) {
|
|
@@ -1885,11 +1820,27 @@ function useGridCore({
|
|
|
1885
1820
|
},
|
|
1886
1821
|
[]
|
|
1887
1822
|
);
|
|
1888
|
-
const
|
|
1823
|
+
const toggleSwitchFilter = (0, import_react5.useCallback)((key) => {
|
|
1824
|
+
setSwitchFilters((prev) => ({
|
|
1825
|
+
...prev,
|
|
1826
|
+
[key]: !prev[key]
|
|
1827
|
+
}));
|
|
1828
|
+
setPage(1);
|
|
1829
|
+
}, []);
|
|
1830
|
+
const switchQuery = (0, import_react5.useMemo)(() => {
|
|
1831
|
+
if (!switchFiltersConfig) return {};
|
|
1832
|
+
const query = {};
|
|
1833
|
+
switchFiltersConfig.forEach((filter) => {
|
|
1834
|
+
const state = switchFilters[filter.key];
|
|
1835
|
+
query[filter.queryParam] = state ? filter.trueValue ?? true : filter.falseValue ?? false;
|
|
1836
|
+
});
|
|
1837
|
+
return query;
|
|
1838
|
+
}, [switchFilters, switchFiltersConfig]);
|
|
1839
|
+
const visibleColumns = (0, import_react5.useMemo)(
|
|
1889
1840
|
() => colState.filter((c) => c.visible).sort((a, b) => a.order - b.order),
|
|
1890
1841
|
[colState]
|
|
1891
1842
|
);
|
|
1892
|
-
const updateColumn = (0,
|
|
1843
|
+
const updateColumn = (0, import_react5.useCallback)(
|
|
1893
1844
|
(key, patch) => {
|
|
1894
1845
|
setColState(
|
|
1895
1846
|
(prev) => prev.map((c) => c.key === key ? { ...c, ...patch } : c)
|
|
@@ -1897,7 +1848,7 @@ function useGridCore({
|
|
|
1897
1848
|
},
|
|
1898
1849
|
[]
|
|
1899
1850
|
);
|
|
1900
|
-
const toggleExpand = (0,
|
|
1851
|
+
const toggleExpand = (0, import_react5.useCallback)((id) => {
|
|
1901
1852
|
setExpanded((prev) => {
|
|
1902
1853
|
const s = new Set(prev);
|
|
1903
1854
|
s.has(id) ? s.delete(id) : s.add(id);
|
|
@@ -1933,6 +1884,8 @@ function useGridCore({
|
|
|
1933
1884
|
// expand
|
|
1934
1885
|
expanded,
|
|
1935
1886
|
toggleExpand,
|
|
1887
|
+
// New Record Button
|
|
1888
|
+
addNewRecord,
|
|
1936
1889
|
// columns
|
|
1937
1890
|
colState,
|
|
1938
1891
|
visibleColumns,
|
|
@@ -1950,7 +1903,13 @@ function useGridCore({
|
|
|
1950
1903
|
rowKey,
|
|
1951
1904
|
// empty state
|
|
1952
1905
|
emptyState,
|
|
1953
|
-
setEmptyState
|
|
1906
|
+
setEmptyState,
|
|
1907
|
+
// switch filters
|
|
1908
|
+
switchFilters,
|
|
1909
|
+
toggleSwitchFilter,
|
|
1910
|
+
setSwitchFilters,
|
|
1911
|
+
switchQuery,
|
|
1912
|
+
switchFiltersConfig
|
|
1954
1913
|
};
|
|
1955
1914
|
}
|
|
1956
1915
|
// Annotate the CommonJS export names for ESM import in node:
|