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.mjs
CHANGED
|
@@ -1,61 +1,8 @@
|
|
|
1
1
|
// src/components/PamGrid.tsx
|
|
2
|
-
import React2, { useEffect as
|
|
3
|
-
|
|
4
|
-
// src/components/PamHeaderOption.tsx
|
|
5
|
-
import { useState as useState4, useRef, useEffect as useEffect3 } from "react";
|
|
6
|
-
import { createPortal } from "react-dom";
|
|
7
|
-
|
|
8
|
-
// src/core/useDropdownPosition.ts
|
|
9
|
-
import { useState, useLayoutEffect } from "react";
|
|
10
|
-
var useDropdownPosition = (triggerRef, menuRef, isOpen, level = 0) => {
|
|
11
|
-
const [style, setStyle] = useState({
|
|
12
|
-
position: "fixed",
|
|
13
|
-
visibility: "hidden"
|
|
14
|
-
});
|
|
15
|
-
useLayoutEffect(() => {
|
|
16
|
-
if (!isOpen || !triggerRef.current || !menuRef.current) return;
|
|
17
|
-
const updatePosition = () => {
|
|
18
|
-
if (!triggerRef.current || !menuRef.current) return null;
|
|
19
|
-
const btn = triggerRef.current.getBoundingClientRect();
|
|
20
|
-
const menu = menuRef.current;
|
|
21
|
-
const menuHeight = menu.offsetHeight;
|
|
22
|
-
const menuWidth = menu.offsetWidth;
|
|
23
|
-
const vh = window.innerHeight;
|
|
24
|
-
const vw = window.innerWidth;
|
|
25
|
-
const spaceBelow = vh - btn.bottom;
|
|
26
|
-
const spaceAbove = btn.top;
|
|
27
|
-
const openUp = menuHeight > spaceBelow && spaceAbove > spaceBelow;
|
|
28
|
-
let top = openUp ? btn.top - menuHeight : btn.bottom;
|
|
29
|
-
if (top < 8) top = 8;
|
|
30
|
-
if (top + menuHeight > vh - 8) top = vh - menuHeight - 8;
|
|
31
|
-
let left = btn.left;
|
|
32
|
-
if (level === 0) {
|
|
33
|
-
if (left + menuWidth > vw - 8) left = vw - menuWidth - 8;
|
|
34
|
-
} else {
|
|
35
|
-
left = btn.right;
|
|
36
|
-
if (left + menuWidth > vw - 8) {
|
|
37
|
-
left = btn.left - menuWidth;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
setStyle({
|
|
41
|
-
position: "fixed",
|
|
42
|
-
top,
|
|
43
|
-
left,
|
|
44
|
-
zIndex: 99999,
|
|
45
|
-
maxHeight: vh - 16,
|
|
46
|
-
overflowY: "auto"
|
|
47
|
-
});
|
|
48
|
-
};
|
|
49
|
-
requestAnimationFrame(updatePosition);
|
|
50
|
-
setTimeout(updatePosition, 50);
|
|
51
|
-
window.addEventListener("resize", updatePosition);
|
|
52
|
-
return () => window.removeEventListener("resize", updatePosition);
|
|
53
|
-
}, [isOpen, level]);
|
|
54
|
-
return style;
|
|
55
|
-
};
|
|
2
|
+
import React2, { useEffect as useEffect4, useRef as useRef2, useState as useState4 } from "react";
|
|
56
3
|
|
|
57
4
|
// src/components/AdvanceFilter.tsx
|
|
58
|
-
import { useState
|
|
5
|
+
import { useState, useEffect } from "react";
|
|
59
6
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
60
7
|
var OPERATORS = {
|
|
61
8
|
number: [
|
|
@@ -85,9 +32,9 @@ function AdvanceFilter({
|
|
|
85
32
|
onApply,
|
|
86
33
|
onClear
|
|
87
34
|
}) {
|
|
88
|
-
const [operation, setOperation] =
|
|
89
|
-
const [v1, setV1] =
|
|
90
|
-
const [v2, setV2] =
|
|
35
|
+
const [operation, setOperation] = useState("");
|
|
36
|
+
const [v1, setV1] = useState("");
|
|
37
|
+
const [v2, setV2] = useState("");
|
|
91
38
|
useEffect(() => {
|
|
92
39
|
if (!value) {
|
|
93
40
|
setOperation("");
|
|
@@ -163,7 +110,7 @@ function AdvanceFilter({
|
|
|
163
110
|
}
|
|
164
111
|
|
|
165
112
|
// src/core/utils.ts
|
|
166
|
-
import { useEffect as useEffect2, useState as
|
|
113
|
+
import { useEffect as useEffect2, useState as useState2 } from "react";
|
|
167
114
|
function getAdvancedFilterType(column) {
|
|
168
115
|
const f = column.enableAdvancedFilter;
|
|
169
116
|
if (!f) return null;
|
|
@@ -202,7 +149,7 @@ function useLocalStorageState(key, initialValue) {
|
|
|
202
149
|
return initialValue;
|
|
203
150
|
}
|
|
204
151
|
};
|
|
205
|
-
const [value, setValue] =
|
|
152
|
+
const [value, setValue] = useState2(getValue);
|
|
206
153
|
const updateValue = (newValue) => {
|
|
207
154
|
setValue(newValue);
|
|
208
155
|
localStorage.setItem(key, JSON.stringify(newValue));
|
|
@@ -233,195 +180,86 @@ function useLocalStorageState(key, initialValue) {
|
|
|
233
180
|
}
|
|
234
181
|
|
|
235
182
|
// src/components/PamHeaderOption.tsx
|
|
236
|
-
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
237
|
-
var
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
onPinRight,
|
|
242
|
-
onUnpin,
|
|
243
|
-
// from useGridCore
|
|
244
|
-
advanceFilters,
|
|
245
|
-
setColumnAdvanceFilter
|
|
183
|
+
import { Fragment, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
184
|
+
var PamHeaderOptions = ({
|
|
185
|
+
currentColumn,
|
|
186
|
+
gridFetaures,
|
|
187
|
+
grid
|
|
246
188
|
}) => {
|
|
247
|
-
const
|
|
248
|
-
const
|
|
249
|
-
const
|
|
250
|
-
const
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
const [open, setOpen] = useState4(false);
|
|
256
|
-
const [openMenu, setOpenMenu] = useState4(null);
|
|
257
|
-
const mainStyle = useDropdownPosition(btnRef, menuRef, open, 0);
|
|
258
|
-
const filterStyle = useDropdownPosition(
|
|
259
|
-
filterBtnRef,
|
|
260
|
-
filterMenuRef,
|
|
261
|
-
openMenu === "filter",
|
|
262
|
-
1
|
|
263
|
-
);
|
|
264
|
-
const pinStyle = useDropdownPosition(
|
|
265
|
-
pinBtnRef,
|
|
266
|
-
pinMenuRef,
|
|
267
|
-
openMenu === "pin",
|
|
268
|
-
1
|
|
269
|
-
);
|
|
270
|
-
const toggleMenu = (name, e) => {
|
|
271
|
-
e.stopPropagation();
|
|
272
|
-
setOpenMenu((prev) => prev === name ? null : name);
|
|
189
|
+
const items = [];
|
|
190
|
+
const { advanceFilters, setColumnAdvanceFilter, colState, updateColumn } = grid;
|
|
191
|
+
const { key: columnKey } = currentColumn;
|
|
192
|
+
const pinColumn = (key, side) => {
|
|
193
|
+
const col = colState.find((c) => c.key === key);
|
|
194
|
+
if (!col) return;
|
|
195
|
+
const newPinned = col.pinned === side ? null : side;
|
|
196
|
+
updateColumn(key, { pinned: newPinned });
|
|
273
197
|
};
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
"span",
|
|
290
|
-
{
|
|
291
|
-
ref: btnRef,
|
|
292
|
-
className: "cursor-pointer",
|
|
293
|
-
onClick: (e) => {
|
|
294
|
-
e.stopPropagation();
|
|
295
|
-
setOpen((p) => !p);
|
|
198
|
+
const unpinColumn = (key) => {
|
|
199
|
+
updateColumn(key, { pinned: null });
|
|
200
|
+
};
|
|
201
|
+
if (gridFetaures.pinning) {
|
|
202
|
+
items.push({
|
|
203
|
+
key: `pined-col-${String(currentColumn.key)}`,
|
|
204
|
+
label: "Pinned",
|
|
205
|
+
icon: "bx bx-pin",
|
|
206
|
+
keepOpenOnClick: true,
|
|
207
|
+
children: [
|
|
208
|
+
{
|
|
209
|
+
key: `pined-col-${String(currentColumn.key)}-noPinned`,
|
|
210
|
+
label: "No Pinned",
|
|
211
|
+
icon: !currentColumn.pinned ? "bx bx-check text-primary" : "",
|
|
212
|
+
onClick: () => unpinColumn(currentColumn.key)
|
|
296
213
|
},
|
|
297
|
-
children: [
|
|
298
|
-
/* @__PURE__ */ jsx2("i", { className: "bx bx-dots-vertical-rounded bx-sm" }),
|
|
299
|
-
advanceFilters[String(columnKey)] && /* @__PURE__ */ jsx2("span", { className: "badge rounded-pill bg-info badge-dot badge-notifications" })
|
|
300
|
-
]
|
|
301
|
-
}
|
|
302
|
-
),
|
|
303
|
-
open && createPortal(
|
|
304
|
-
/* @__PURE__ */ jsxs2(
|
|
305
|
-
"ul",
|
|
306
214
|
{
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
"button",
|
|
318
|
-
{
|
|
319
|
-
ref: filterBtnRef,
|
|
320
|
-
className: "dropdown-item d-flex justify-content-between",
|
|
321
|
-
onClick: (e) => toggleMenu("filter", e),
|
|
322
|
-
children: [
|
|
323
|
-
/* @__PURE__ */ jsxs2("span", { children: [
|
|
324
|
-
/* @__PURE__ */ jsx2("i", { className: "bx bx-filter-alt me-2" }),
|
|
325
|
-
" Filter"
|
|
326
|
-
] }),
|
|
327
|
-
/* @__PURE__ */ jsx2("i", { className: "bx bx-chevron-right" })
|
|
328
|
-
]
|
|
329
|
-
}
|
|
330
|
-
),
|
|
331
|
-
openMenu === "filter" && /* @__PURE__ */ jsx2(
|
|
332
|
-
"ul",
|
|
333
|
-
{
|
|
334
|
-
ref: filterMenuRef,
|
|
335
|
-
className: "dropdown-menu shadow rounded-3 p-2 show",
|
|
336
|
-
style: {
|
|
337
|
-
...filterStyle,
|
|
338
|
-
position: "fixed",
|
|
339
|
-
zIndex: 10001
|
|
340
|
-
},
|
|
341
|
-
children: /* @__PURE__ */ jsx2(
|
|
342
|
-
AdvanceFilter,
|
|
343
|
-
{
|
|
344
|
-
type: getAdvancedFilterType(column),
|
|
345
|
-
value: advanceFilters[String(columnKey)],
|
|
346
|
-
onApply: (f) => setColumnAdvanceFilter(String(columnKey), f),
|
|
347
|
-
onClear: () => setColumnAdvanceFilter(String(columnKey), null)
|
|
348
|
-
}
|
|
349
|
-
)
|
|
350
|
-
}
|
|
351
|
-
)
|
|
352
|
-
] }),
|
|
353
|
-
/* @__PURE__ */ jsxs2("li", { className: "dropdown-submenu dropstart", children: [
|
|
354
|
-
/* @__PURE__ */ jsxs2(
|
|
355
|
-
"button",
|
|
356
|
-
{
|
|
357
|
-
ref: pinBtnRef,
|
|
358
|
-
className: "dropdown-item d-flex justify-content-between",
|
|
359
|
-
onClick: (e) => toggleMenu("pin", e),
|
|
360
|
-
children: [
|
|
361
|
-
/* @__PURE__ */ jsxs2("span", { children: [
|
|
362
|
-
/* @__PURE__ */ jsx2("i", { className: "bx bx-pin me-2" }),
|
|
363
|
-
" Pin Column"
|
|
364
|
-
] }),
|
|
365
|
-
/* @__PURE__ */ jsx2("i", { className: "bx bx-chevron-right" })
|
|
366
|
-
]
|
|
367
|
-
}
|
|
368
|
-
),
|
|
369
|
-
openMenu === "pin" && /* @__PURE__ */ jsxs2(
|
|
370
|
-
"ul",
|
|
371
|
-
{
|
|
372
|
-
ref: pinMenuRef,
|
|
373
|
-
className: "dropdown-menu shadow rounded-3 py-2 show",
|
|
374
|
-
style: {
|
|
375
|
-
...pinStyle,
|
|
376
|
-
position: "fixed",
|
|
377
|
-
zIndex: 10001
|
|
378
|
-
},
|
|
379
|
-
children: [
|
|
380
|
-
/* @__PURE__ */ jsxs2(
|
|
381
|
-
"div",
|
|
382
|
-
{
|
|
383
|
-
className: "dropdown-item d-flex gap-2 cursor-pointer",
|
|
384
|
-
onClick: onUnpin,
|
|
385
|
-
children: [
|
|
386
|
-
!pinned && /* @__PURE__ */ jsx2("i", { className: "bx bx-check text-primary" }),
|
|
387
|
-
/* @__PURE__ */ jsx2("span", { children: "No Pin" })
|
|
388
|
-
]
|
|
389
|
-
}
|
|
390
|
-
),
|
|
391
|
-
/* @__PURE__ */ jsxs2(
|
|
392
|
-
"div",
|
|
393
|
-
{
|
|
394
|
-
className: "dropdown-item d-flex gap-2 cursor-pointer",
|
|
395
|
-
onClick: onPinLeft,
|
|
396
|
-
children: [
|
|
397
|
-
pinned === "left" && /* @__PURE__ */ jsx2("i", { className: "bx bx-check text-primary" }),
|
|
398
|
-
/* @__PURE__ */ jsx2("span", { children: "Pin Left" })
|
|
399
|
-
]
|
|
400
|
-
}
|
|
401
|
-
),
|
|
402
|
-
/* @__PURE__ */ jsxs2(
|
|
403
|
-
"div",
|
|
404
|
-
{
|
|
405
|
-
className: "dropdown-item d-flex gap-2 cursor-pointer",
|
|
406
|
-
onClick: onPinRight,
|
|
407
|
-
children: [
|
|
408
|
-
pinned === "right" && /* @__PURE__ */ jsx2("i", { className: "bx bx-check text-primary" }),
|
|
409
|
-
/* @__PURE__ */ jsx2("span", { children: "Pin Right" })
|
|
410
|
-
]
|
|
411
|
-
}
|
|
412
|
-
)
|
|
413
|
-
]
|
|
414
|
-
}
|
|
415
|
-
)
|
|
416
|
-
] })
|
|
417
|
-
]
|
|
215
|
+
key: `pined-col-${String(currentColumn.key)}-leftPinned`,
|
|
216
|
+
label: "Left Pinned",
|
|
217
|
+
icon: currentColumn.pinned === "left" ? "bx bx-check text-primary" : "",
|
|
218
|
+
onClick: () => pinColumn(currentColumn.key, "left")
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
key: `pined-col-${String(currentColumn.key)}-rightPinned`,
|
|
222
|
+
label: "Right Pinned",
|
|
223
|
+
icon: currentColumn.pinned === "right" ? "bx bx-check text-primary" : "",
|
|
224
|
+
onClick: () => pinColumn(currentColumn.key, "right")
|
|
418
225
|
}
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
226
|
+
]
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
if (currentColumn.enableAdvancedFilter) {
|
|
230
|
+
items.push({
|
|
231
|
+
key: `advance-filter-${String(currentColumn.key)}`,
|
|
232
|
+
label: "Filte By Column",
|
|
233
|
+
icon: "bx bx-sm bx-filter",
|
|
234
|
+
children: [
|
|
235
|
+
{
|
|
236
|
+
key: `advance-filter-${String(currentColumn.key)}-apply`,
|
|
237
|
+
keepOpenOnClick: true,
|
|
238
|
+
label: /* @__PURE__ */ jsx2(
|
|
239
|
+
AdvanceFilter,
|
|
240
|
+
{
|
|
241
|
+
type: getAdvancedFilterType(currentColumn),
|
|
242
|
+
value: advanceFilters[String(columnKey)],
|
|
243
|
+
onApply: (f) => setColumnAdvanceFilter(String(columnKey), f),
|
|
244
|
+
onClear: () => setColumnAdvanceFilter(String(columnKey), null)
|
|
245
|
+
}
|
|
246
|
+
)
|
|
247
|
+
}
|
|
248
|
+
]
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
return /* @__PURE__ */ jsx2(
|
|
252
|
+
PamDropdown,
|
|
253
|
+
{
|
|
254
|
+
trigger: /* @__PURE__ */ jsxs2(Fragment, { children: [
|
|
255
|
+
/* @__PURE__ */ jsx2("i", { className: "bx bx-sm bx-dots-vertical-rounded cursor-pointer" }),
|
|
256
|
+
advanceFilters[String(columnKey)] && /* @__PURE__ */ jsx2("span", { className: "badge rounded-pill bg-info badge-dot badge-notifications" })
|
|
257
|
+
] }),
|
|
258
|
+
items
|
|
259
|
+
}
|
|
260
|
+
);
|
|
423
261
|
};
|
|
424
|
-
var PamHeaderOption_default =
|
|
262
|
+
var PamHeaderOption_default = PamHeaderOptions;
|
|
425
263
|
|
|
426
264
|
// src/components/FilterApplied.tsx
|
|
427
265
|
import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
@@ -429,8 +267,10 @@ var FilterApplied = ({
|
|
|
429
267
|
groupBy,
|
|
430
268
|
removeGroupby,
|
|
431
269
|
advance,
|
|
432
|
-
removeFilter
|
|
270
|
+
removeFilter,
|
|
271
|
+
grid
|
|
433
272
|
}) => {
|
|
273
|
+
const { switchFiltersConfig, switchQuery, toggleSwitchFilter } = grid;
|
|
434
274
|
const OPERATION = [
|
|
435
275
|
{ key: "eq", label: " == " },
|
|
436
276
|
{ key: "neq", label: " \u2260 " },
|
|
@@ -463,7 +303,7 @@ var FilterApplied = ({
|
|
|
463
303
|
return /* @__PURE__ */ jsxs3("div", { className: "d-flex flex-row gap-1 py-1 px-3 ", children: [
|
|
464
304
|
groupBy && /* @__PURE__ */ jsxs3("span", { className: "badge bg-label-primary text-capitalize", children: [
|
|
465
305
|
"GroupBy : ",
|
|
466
|
-
groupBy,
|
|
306
|
+
groupBy.label,
|
|
467
307
|
" ",
|
|
468
308
|
/* @__PURE__ */ jsx3(
|
|
469
309
|
"i",
|
|
@@ -489,7 +329,31 @@ var FilterApplied = ({
|
|
|
489
329
|
]
|
|
490
330
|
},
|
|
491
331
|
item.column
|
|
492
|
-
))
|
|
332
|
+
)),
|
|
333
|
+
switchFiltersConfig !== void 0 && switchFiltersConfig?.length > 0 && switchFiltersConfig.map((swicth) => {
|
|
334
|
+
return Object.entries(switchQuery).map(([key, value]) => {
|
|
335
|
+
if (swicth.queryParam === key && swicth.defaultValue !== value) {
|
|
336
|
+
return /* @__PURE__ */ jsxs3(
|
|
337
|
+
"span",
|
|
338
|
+
{
|
|
339
|
+
className: "badge bg-label-warning text-capitalize",
|
|
340
|
+
children: [
|
|
341
|
+
swicth.label,
|
|
342
|
+
/* @__PURE__ */ jsx3(
|
|
343
|
+
"i",
|
|
344
|
+
{
|
|
345
|
+
className: "bx bx-x bx-xs cursor-pointer",
|
|
346
|
+
onClick: () => toggleSwitchFilter?.(swicth.key)
|
|
347
|
+
}
|
|
348
|
+
)
|
|
349
|
+
]
|
|
350
|
+
},
|
|
351
|
+
key
|
|
352
|
+
);
|
|
353
|
+
}
|
|
354
|
+
return null;
|
|
355
|
+
});
|
|
356
|
+
})
|
|
493
357
|
] });
|
|
494
358
|
};
|
|
495
359
|
var FilterApplied_default = FilterApplied;
|
|
@@ -553,7 +417,7 @@ var Compress = ({ onClick }) => {
|
|
|
553
417
|
var Compress_default = Compress;
|
|
554
418
|
|
|
555
419
|
// src/assets/icons/Box.svg
|
|
556
|
-
var Box_default = "./Box-QGC2UZ43.svg";
|
|
420
|
+
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';
|
|
557
421
|
|
|
558
422
|
// src/components/EmptyState.tsx
|
|
559
423
|
import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
@@ -571,7 +435,7 @@ var EmptyState = ({
|
|
|
571
435
|
var EmptyState_default = EmptyState;
|
|
572
436
|
|
|
573
437
|
// src/assets/icons/NoSearchResult.svg
|
|
574
|
-
var NoSearchResult_default = "
|
|
438
|
+
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';
|
|
575
439
|
|
|
576
440
|
// src/components/icons/ArrowFromBottonToRight.tsx
|
|
577
441
|
import { jsx as jsx7 } from "react/jsx-runtime";
|
|
@@ -749,14 +613,14 @@ var Paginantion_default = Pagination;
|
|
|
749
613
|
|
|
750
614
|
// src/components/dropdown/PamDropdown.tsx
|
|
751
615
|
import {
|
|
752
|
-
useEffect as
|
|
753
|
-
useLayoutEffect
|
|
616
|
+
useEffect as useEffect3,
|
|
617
|
+
useLayoutEffect,
|
|
754
618
|
useMemo,
|
|
755
|
-
useRef
|
|
756
|
-
useState as
|
|
619
|
+
useRef,
|
|
620
|
+
useState as useState3
|
|
757
621
|
} from "react";
|
|
758
|
-
import { createPortal
|
|
759
|
-
import { Fragment, jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
622
|
+
import { createPortal } from "react-dom";
|
|
623
|
+
import { Fragment as Fragment2, jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
760
624
|
function PamDropdown({
|
|
761
625
|
trigger,
|
|
762
626
|
items,
|
|
@@ -766,11 +630,11 @@ function PamDropdown({
|
|
|
766
630
|
closeOnItemClick = true,
|
|
767
631
|
className = ""
|
|
768
632
|
}) {
|
|
769
|
-
const triggerRef =
|
|
770
|
-
const menuRef =
|
|
771
|
-
const [open, setOpen] =
|
|
772
|
-
const [pos, setPos] =
|
|
773
|
-
const [openSubKeys, setOpenSubKeys] =
|
|
633
|
+
const triggerRef = useRef(null);
|
|
634
|
+
const menuRef = useRef(null);
|
|
635
|
+
const [open, setOpen] = useState3(false);
|
|
636
|
+
const [pos, setPos] = useState3({ top: 0, left: 0 });
|
|
637
|
+
const [openSubKeys, setOpenSubKeys] = useState3({});
|
|
774
638
|
const portalRoot = useMemo(() => {
|
|
775
639
|
const el = document.getElementById("pam-portal-root");
|
|
776
640
|
if (el) return el;
|
|
@@ -823,11 +687,11 @@ function PamDropdown({
|
|
|
823
687
|
if (!t || !m) return;
|
|
824
688
|
setPos(getDropdownPosition(t, m));
|
|
825
689
|
}
|
|
826
|
-
|
|
690
|
+
useLayoutEffect(() => {
|
|
827
691
|
if (!open) return;
|
|
828
692
|
updatePosition();
|
|
829
693
|
}, [open, placement]);
|
|
830
|
-
|
|
694
|
+
useEffect3(() => {
|
|
831
695
|
if (!open) return;
|
|
832
696
|
const onDown = (e) => {
|
|
833
697
|
const t = triggerRef.current;
|
|
@@ -848,7 +712,7 @@ function PamDropdown({
|
|
|
848
712
|
document.removeEventListener("keydown", onKey);
|
|
849
713
|
};
|
|
850
714
|
}, [open]);
|
|
851
|
-
|
|
715
|
+
useEffect3(() => {
|
|
852
716
|
if (!open) return;
|
|
853
717
|
const handler = () => updatePosition();
|
|
854
718
|
window.addEventListener("scroll", handler, true);
|
|
@@ -858,9 +722,9 @@ function PamDropdown({
|
|
|
858
722
|
window.removeEventListener("resize", handler);
|
|
859
723
|
};
|
|
860
724
|
}, [open]);
|
|
861
|
-
return /* @__PURE__ */ jsxs7(
|
|
725
|
+
return /* @__PURE__ */ jsxs7(Fragment2, { children: [
|
|
862
726
|
/* @__PURE__ */ jsx10("span", { ref: triggerRef, className: `pam-dropdown-trigger ${className}`, children: /* @__PURE__ */ jsx10("span", { onClick: toggle, style: { display: "inline-flex" }, children: trigger }) }),
|
|
863
|
-
open &&
|
|
727
|
+
open && createPortal(
|
|
864
728
|
/* @__PURE__ */ jsx10(
|
|
865
729
|
"div",
|
|
866
730
|
{
|
|
@@ -918,12 +782,12 @@ function PamDropdownNode({
|
|
|
918
782
|
level,
|
|
919
783
|
index
|
|
920
784
|
}) {
|
|
921
|
-
const liRef =
|
|
922
|
-
const submenuRef =
|
|
785
|
+
const liRef = useRef(null);
|
|
786
|
+
const submenuRef = useRef(null);
|
|
923
787
|
const hasChildren = !!item.children?.length;
|
|
924
788
|
const nodeKey = item.key ?? `${level}-${index}`;
|
|
925
789
|
const submenuOpen = !!openSubKeys[nodeKey];
|
|
926
|
-
|
|
790
|
+
useLayoutEffect(() => {
|
|
927
791
|
if (!submenuOpen) return;
|
|
928
792
|
const li = liRef.current;
|
|
929
793
|
const menu = submenuRef.current;
|
|
@@ -1010,23 +874,29 @@ function PamDropdownNode({
|
|
|
1010
874
|
].join(" "),
|
|
1011
875
|
onClick: handleClick,
|
|
1012
876
|
children: [
|
|
1013
|
-
/* @__PURE__ */ jsxs7(
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
877
|
+
/* @__PURE__ */ jsxs7(
|
|
878
|
+
"div",
|
|
879
|
+
{
|
|
880
|
+
className: `${item.rightSlot ? "pam-dropdown-item-inner-rightSlot" : "pam-dropdown-item-inner"} `,
|
|
881
|
+
children: [
|
|
882
|
+
/* @__PURE__ */ jsxs7("div", { className: "pam-left", children: [
|
|
883
|
+
item.icon && /* @__PURE__ */ jsx10("i", { className: `${item.icon} pam-icon` }),
|
|
884
|
+
/* @__PURE__ */ jsx10("span", { className: "pam-label", children: item.label })
|
|
885
|
+
] }),
|
|
886
|
+
/* @__PURE__ */ jsxs7("div", { className: "pam-right", children: [
|
|
887
|
+
item.rightSlot && /* @__PURE__ */ jsx10(
|
|
888
|
+
"span",
|
|
889
|
+
{
|
|
890
|
+
className: "pam-rightslot",
|
|
891
|
+
onClick: (e) => e.stopPropagation(),
|
|
892
|
+
children: item.rightSlot
|
|
893
|
+
}
|
|
894
|
+
),
|
|
895
|
+
hasChildren && /* @__PURE__ */ jsx10("i", { className: "bx bx-chevron-right pam-arrow" })
|
|
896
|
+
] })
|
|
897
|
+
]
|
|
898
|
+
}
|
|
899
|
+
),
|
|
1030
900
|
hasChildren && submenuOpen && /* @__PURE__ */ jsx10("div", { ref: submenuRef, className: "pam-submenu", children: /* @__PURE__ */ jsx10(
|
|
1031
901
|
PamDropdownList,
|
|
1032
902
|
{
|
|
@@ -1044,12 +914,20 @@ function PamDropdownNode({
|
|
|
1044
914
|
}
|
|
1045
915
|
|
|
1046
916
|
// src/components/MainFilter.tsx
|
|
1047
|
-
import { Fragment as
|
|
917
|
+
import { Fragment as Fragment3, jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
1048
918
|
var MainFilter = ({
|
|
1049
919
|
gridFetaures,
|
|
1050
920
|
grid
|
|
1051
921
|
}) => {
|
|
1052
|
-
const {
|
|
922
|
+
const {
|
|
923
|
+
setGroupBy,
|
|
924
|
+
visibleColumns,
|
|
925
|
+
colState,
|
|
926
|
+
updateColumn,
|
|
927
|
+
switchFiltersConfig,
|
|
928
|
+
switchFilters,
|
|
929
|
+
toggleSwitchFilter
|
|
930
|
+
} = grid;
|
|
1053
931
|
const [isBulkData, setBulkData] = useLocalStorageState(
|
|
1054
932
|
"bulk-data-toggle",
|
|
1055
933
|
false
|
|
@@ -1085,15 +963,15 @@ var MainFilter = ({
|
|
|
1085
963
|
children: visibleColumns.length > 0 ? visibleColumns.filter((c) => c.groupable).map((c) => ({
|
|
1086
964
|
key: `group-${String(c.key)}`,
|
|
1087
965
|
label: c.title,
|
|
1088
|
-
onClick: () => setGroupBy(String(c.key))
|
|
966
|
+
onClick: () => setGroupBy({ key: String(c.key), label: c.title })
|
|
1089
967
|
})) : []
|
|
1090
968
|
});
|
|
1091
969
|
}
|
|
1092
|
-
if (gridFetaures?.
|
|
970
|
+
if (gridFetaures?.bulkActionsConfig && gridFetaures.bulkActionsConfig.length > 0) {
|
|
1093
971
|
items.push({
|
|
1094
972
|
key: "bulk-data",
|
|
1095
973
|
keepOpenOnClick: true,
|
|
1096
|
-
label: /* @__PURE__ */ jsxs8(
|
|
974
|
+
label: /* @__PURE__ */ jsxs8(Fragment3, { children: [
|
|
1097
975
|
/* @__PURE__ */ jsxs8(
|
|
1098
976
|
"label",
|
|
1099
977
|
{
|
|
@@ -1120,12 +998,43 @@ var MainFilter = ({
|
|
|
1120
998
|
] })
|
|
1121
999
|
});
|
|
1122
1000
|
}
|
|
1001
|
+
if (switchFiltersConfig !== void 0 && switchFiltersConfig?.length > 0) {
|
|
1002
|
+
switchFiltersConfig.forEach((filter) => {
|
|
1003
|
+
items.push({
|
|
1004
|
+
key: `switch-${filter.key}`,
|
|
1005
|
+
keepOpenOnClick: true,
|
|
1006
|
+
label: filter.label,
|
|
1007
|
+
rightSlot: /* @__PURE__ */ jsxs8(
|
|
1008
|
+
"label",
|
|
1009
|
+
{
|
|
1010
|
+
className: "switch switch-square switch-sm",
|
|
1011
|
+
onClick: (e) => e.stopPropagation(),
|
|
1012
|
+
children: [
|
|
1013
|
+
/* @__PURE__ */ jsx11(
|
|
1014
|
+
"input",
|
|
1015
|
+
{
|
|
1016
|
+
type: "checkbox",
|
|
1017
|
+
className: "switch-input",
|
|
1018
|
+
checked: !!switchFilters?.[filter.key],
|
|
1019
|
+
onChange: () => toggleSwitchFilter(filter.key)
|
|
1020
|
+
}
|
|
1021
|
+
),
|
|
1022
|
+
/* @__PURE__ */ jsxs8("span", { className: "switch-toggle-slider", children: [
|
|
1023
|
+
/* @__PURE__ */ jsx11("span", { className: "switch-on", children: /* @__PURE__ */ jsx11("i", { className: "icon-base bx bx-check" }) }),
|
|
1024
|
+
/* @__PURE__ */ jsx11("span", { className: "switch-off", children: /* @__PURE__ */ jsx11("i", { className: "icon-base bx bx-x" }) })
|
|
1025
|
+
] })
|
|
1026
|
+
]
|
|
1027
|
+
}
|
|
1028
|
+
)
|
|
1029
|
+
});
|
|
1030
|
+
});
|
|
1031
|
+
}
|
|
1123
1032
|
return /* @__PURE__ */ jsx11(
|
|
1124
1033
|
PamDropdown,
|
|
1125
1034
|
{
|
|
1126
1035
|
trigger: /* @__PURE__ */ jsxs8("button", { type: "button", className: "btn btn-sm btn-label-secondary me-2", children: [
|
|
1127
|
-
/* @__PURE__ */ jsx11("span", { className: "icon-base bx bx-filter-alt
|
|
1128
|
-
"Filter"
|
|
1036
|
+
/* @__PURE__ */ jsx11("span", { className: "icon-base bx bx-filter-alt" }),
|
|
1037
|
+
/* @__PURE__ */ jsx11("span", { className: "d-none d-sm-inline ms-1", children: "Filter" })
|
|
1129
1038
|
] }),
|
|
1130
1039
|
items
|
|
1131
1040
|
}
|
|
@@ -1136,7 +1045,18 @@ var TableAction = ({
|
|
|
1136
1045
|
gridFetaures,
|
|
1137
1046
|
row
|
|
1138
1047
|
}) => {
|
|
1139
|
-
const items = Array.isArray(gridFetaures.actions) ? gridFetaures.actions.filter((act) =>
|
|
1048
|
+
const items = Array.isArray(gridFetaures.actions) ? gridFetaures.actions.filter((act) => {
|
|
1049
|
+
if (typeof act.isVisible === "function") {
|
|
1050
|
+
if (row) {
|
|
1051
|
+
return act.isVisible(row);
|
|
1052
|
+
}
|
|
1053
|
+
return false;
|
|
1054
|
+
}
|
|
1055
|
+
if (typeof act.isVisible === "boolean") {
|
|
1056
|
+
return act.isVisible;
|
|
1057
|
+
}
|
|
1058
|
+
return true;
|
|
1059
|
+
}).map((a, i) => ({
|
|
1140
1060
|
key: `action-${String(a.label)}-${i}`,
|
|
1141
1061
|
label: a.label,
|
|
1142
1062
|
icon: a.icon,
|
|
@@ -1175,14 +1095,15 @@ var PamGrid = ({
|
|
|
1175
1095
|
addNew,
|
|
1176
1096
|
renderExpanded
|
|
1177
1097
|
}) => {
|
|
1178
|
-
const [isFullScreen, setFullScreen] =
|
|
1179
|
-
const [
|
|
1098
|
+
const [isFullScreen, setFullScreen] = useState4(false);
|
|
1099
|
+
const [draggingCol, setDraggingCol] = useState4(null);
|
|
1100
|
+
const [activeCell, setActiveCell] = useState4(null);
|
|
1180
1101
|
const [isBulkAction, setBulkAction] = useLocalStorageState(
|
|
1181
1102
|
"bulk-data-toggle",
|
|
1182
1103
|
false
|
|
1183
1104
|
);
|
|
1184
|
-
const wrapperRef =
|
|
1185
|
-
const dragState =
|
|
1105
|
+
const wrapperRef = useRef2(null);
|
|
1106
|
+
const dragState = useRef2({ from: null });
|
|
1186
1107
|
const {
|
|
1187
1108
|
rows,
|
|
1188
1109
|
page,
|
|
@@ -1208,20 +1129,10 @@ var PamGrid = ({
|
|
|
1208
1129
|
toggleExpand,
|
|
1209
1130
|
setColState,
|
|
1210
1131
|
emptyState,
|
|
1211
|
-
|
|
1212
|
-
// setAdanceFilter,
|
|
1132
|
+
addNewRecord,
|
|
1213
1133
|
advanceFilters,
|
|
1214
1134
|
setColumnAdvanceFilter
|
|
1215
1135
|
} = grid;
|
|
1216
|
-
const pinColumn = (key, side) => {
|
|
1217
|
-
const col = colState.find((c) => c.key === key);
|
|
1218
|
-
if (!col) return;
|
|
1219
|
-
const newPinned = col.pinned === side ? null : side;
|
|
1220
|
-
updateColumn(key, { pinned: newPinned });
|
|
1221
|
-
};
|
|
1222
|
-
const unpinColumn = (key) => {
|
|
1223
|
-
updateColumn(key, { pinned: null });
|
|
1224
|
-
};
|
|
1225
1136
|
const onResizeMouseDown = (e, key) => {
|
|
1226
1137
|
e.preventDefault();
|
|
1227
1138
|
const startX = e.clientX;
|
|
@@ -1264,10 +1175,10 @@ var PamGrid = ({
|
|
|
1264
1175
|
};
|
|
1265
1176
|
const groupedRows = React2.useMemo(() => {
|
|
1266
1177
|
if (!groupBy) return null;
|
|
1267
|
-
const column = visibleColumns.find((col) => col.key === groupBy);
|
|
1178
|
+
const column = visibleColumns.find((col) => col.key === groupBy.key);
|
|
1268
1179
|
const map = {};
|
|
1269
1180
|
rows.forEach((r) => {
|
|
1270
|
-
const rawValue = column?.groupByValue ? column.groupByValue(r) : column?.nestedPath ? getNestedValue(r, column.nestedPath) : r[groupBy];
|
|
1181
|
+
const rawValue = column?.groupByValue ? column.groupByValue(r) : column?.nestedPath ? getNestedValue(r, column.nestedPath) : r[groupBy.key];
|
|
1271
1182
|
const groupKey = rawValue === null || rawValue === void 0 ? "unknown" : typeof rawValue === "object" ? String(rawValue?.id ?? JSON.stringify(rawValue)) : String(rawValue);
|
|
1272
1183
|
if (!map[groupKey]) {
|
|
1273
1184
|
map[groupKey] = { rawValue, items: [] };
|
|
@@ -1295,7 +1206,7 @@ var PamGrid = ({
|
|
|
1295
1206
|
}, [rows, groupBy, visibleColumns]);
|
|
1296
1207
|
const currentRows = rows;
|
|
1297
1208
|
const gridHeight = isFullScreen ? "calc(100vh - 120px)" : "calc(100vh - 320px)";
|
|
1298
|
-
|
|
1209
|
+
useEffect4(() => {
|
|
1299
1210
|
document.body.style.overflow = isFullScreen ? "hidden" : "";
|
|
1300
1211
|
}, [isFullScreen]);
|
|
1301
1212
|
return /* @__PURE__ */ jsxs9(
|
|
@@ -1303,9 +1214,9 @@ var PamGrid = ({
|
|
|
1303
1214
|
{
|
|
1304
1215
|
className: `pms-grid ${isFullScreen ? "card card-action card-fullscreen p-4" : ""}`,
|
|
1305
1216
|
children: [
|
|
1306
|
-
/* @__PURE__ */ jsxs9("div", { className: "row ", children: [
|
|
1307
|
-
/* @__PURE__ */ jsx12("div", { className: "col-8", children: /* @__PURE__ */ jsxs9("div", { className: "
|
|
1308
|
-
/* @__PURE__ */ jsx12("div", {
|
|
1217
|
+
/* @__PURE__ */ jsxs9("div", { className: "row align-items-center g-2", children: [
|
|
1218
|
+
/* @__PURE__ */ jsx12("div", { className: "col-12 col-md-8 col-lg-9", children: /* @__PURE__ */ jsxs9("div", { className: "row", children: [
|
|
1219
|
+
features.search && /* @__PURE__ */ jsx12("div", { className: "col-8 col-md-4", children: /* @__PURE__ */ jsx12(
|
|
1309
1220
|
"input",
|
|
1310
1221
|
{
|
|
1311
1222
|
type: "search",
|
|
@@ -1315,33 +1226,42 @@ var PamGrid = ({
|
|
|
1315
1226
|
onChange: (e) => setSearch(e.target.value)
|
|
1316
1227
|
}
|
|
1317
1228
|
) }),
|
|
1318
|
-
/* @__PURE__ */ jsx12(MainFilter_default, { gridFetaures: features, grid })
|
|
1229
|
+
/* @__PURE__ */ jsx12("div", { className: "col-4 col-md-4", children: /* @__PURE__ */ jsx12(MainFilter_default, { gridFetaures: features, grid }) })
|
|
1319
1230
|
] }) }),
|
|
1320
|
-
/* @__PURE__ */ jsx12("div", { className: "col-4 ", children: /* @__PURE__ */ jsxs9("div", { className: "d-flex justify-content-end align-items-center gap-2", children: [
|
|
1321
|
-
/* @__PURE__ */
|
|
1231
|
+
/* @__PURE__ */ jsx12("div", { className: "col-12 col-md-4 col-lg-3", children: /* @__PURE__ */ jsxs9("div", { className: "d-flex justify-content-md-end justify-content-between align-items-center gap-2 mt-2 mt-md-0", children: [
|
|
1232
|
+
addNewRecord && /* @__PURE__ */ jsxs9(
|
|
1322
1233
|
"button",
|
|
1323
1234
|
{
|
|
1324
1235
|
type: "button",
|
|
1325
|
-
className: "btn btn-sm btn-
|
|
1326
|
-
|
|
1327
|
-
|
|
1236
|
+
className: `${addNewRecord?.class || "btn btn-sm btn-label-secondary"} d-flex align-items-center gap-1`,
|
|
1237
|
+
onClick: addNewRecord.onClick,
|
|
1238
|
+
onMouseEnter: (e) => showTooltip(addNewRecord?.label, e.clientX, e.clientY),
|
|
1239
|
+
onMouseMove: (e) => showTooltip(addNewRecord?.label, e.clientX, e.clientY),
|
|
1328
1240
|
onMouseLeave: hideTooltip,
|
|
1329
|
-
|
|
1330
|
-
|
|
1241
|
+
children: [
|
|
1242
|
+
/* @__PURE__ */ jsx12(
|
|
1243
|
+
"span",
|
|
1244
|
+
{
|
|
1245
|
+
className: `icon-base ${addNewRecord?.icon || "bx bx-plus-circle"}`
|
|
1246
|
+
}
|
|
1247
|
+
),
|
|
1248
|
+
addNewRecord?.name && /* @__PURE__ */ jsx12("span", { className: "d-none d-sm-inline", children: addNewRecord?.name })
|
|
1249
|
+
]
|
|
1331
1250
|
}
|
|
1332
1251
|
),
|
|
1333
|
-
isFullScreen ? /* @__PURE__ */ jsx12(Minimize_default, { onClick: () => setFullScreen(!isFullScreen) }) : /* @__PURE__ */ jsx12(Compress_default, { onClick: () => setFullScreen(!isFullScreen) })
|
|
1252
|
+
/* @__PURE__ */ jsx12("div", { className: "flex-shrink-0", children: isFullScreen ? /* @__PURE__ */ jsx12(Minimize_default, { onClick: () => setFullScreen(!isFullScreen) }) : /* @__PURE__ */ jsx12(Compress_default, { onClick: () => setFullScreen(!isFullScreen) }) })
|
|
1334
1253
|
] }) })
|
|
1335
1254
|
] }),
|
|
1336
1255
|
/* @__PURE__ */ jsxs9("div", { className: "d-flex flex-row gap-1", children: [
|
|
1337
|
-
selected.size > 0 && features.
|
|
1256
|
+
selected.size > 0 && features.bulkActionsConfig && /* @__PURE__ */ jsx12(BulkAction_default, { records: selected, actions: features.bulkActionsConfig }),
|
|
1338
1257
|
/* @__PURE__ */ jsx12(
|
|
1339
1258
|
FilterApplied_default,
|
|
1340
1259
|
{
|
|
1341
1260
|
groupBy,
|
|
1342
1261
|
removeGroupby: () => setGroupBy(null),
|
|
1343
1262
|
advance: advanceFilters,
|
|
1344
|
-
removeFilter: (columnKey) => setColumnAdvanceFilter(String(columnKey), null)
|
|
1263
|
+
removeFilter: (columnKey) => setColumnAdvanceFilter(String(columnKey), null),
|
|
1264
|
+
grid
|
|
1345
1265
|
}
|
|
1346
1266
|
)
|
|
1347
1267
|
] }),
|
|
@@ -1400,10 +1320,18 @@ var PamGrid = ({
|
|
|
1400
1320
|
"th",
|
|
1401
1321
|
{
|
|
1402
1322
|
draggable: features.reorder,
|
|
1403
|
-
onDragStart: (e) =>
|
|
1323
|
+
onDragStart: (e) => {
|
|
1324
|
+
setDraggingCol(String(col.key));
|
|
1325
|
+
onDragStart(e, String(col.key));
|
|
1326
|
+
},
|
|
1327
|
+
onDragEnd: () => setDraggingCol(null),
|
|
1404
1328
|
onDragOver: (e) => e.preventDefault(),
|
|
1405
1329
|
onDrop: (e) => onDrop(e, col.key),
|
|
1406
|
-
className: `pms-col-header vs-th
|
|
1330
|
+
className: `pms-col-header vs-th
|
|
1331
|
+
${features.reorder ? "cursor-grab" : ""}
|
|
1332
|
+
${draggingCol === col.key ? "cursor-grabbing" : ""}
|
|
1333
|
+
${col.pinned ? `pinned pinned-${col.pinned}` : ""}
|
|
1334
|
+
`,
|
|
1407
1335
|
style,
|
|
1408
1336
|
children: /* @__PURE__ */ jsxs9(
|
|
1409
1337
|
"div",
|
|
@@ -1414,16 +1342,16 @@ var PamGrid = ({
|
|
|
1414
1342
|
"div",
|
|
1415
1343
|
{
|
|
1416
1344
|
onClick: () => col.sortable && changeSort(String(col.key)),
|
|
1417
|
-
|
|
1345
|
+
className: col.sortable ? "cursor-pointer" : "",
|
|
1418
1346
|
children: [
|
|
1419
1347
|
/* @__PURE__ */ jsx12("small", { children: col.title }),
|
|
1420
1348
|
sortBy.key === col.key && /* @__PURE__ */ jsx12(
|
|
1421
1349
|
"i",
|
|
1422
1350
|
{
|
|
1423
|
-
className: `bx bx-sm ${sortBy.dir === "asc" ? "bxs-chevron-up" : "bxs-chevron-down"}`
|
|
1351
|
+
className: `bx bx-sm ${sortBy.dir === "asc" ? "bxs-chevron-up" : "bxs-chevron-down"} cursor-pointer`
|
|
1424
1352
|
}
|
|
1425
1353
|
),
|
|
1426
|
-
col.pinned === col.key && /* @__PURE__ */ jsx12("i", { className: "bx bx-x" })
|
|
1354
|
+
col.pinned === col.key && /* @__PURE__ */ jsx12("i", { className: "bx bx-x cursor-pointer" })
|
|
1427
1355
|
]
|
|
1428
1356
|
}
|
|
1429
1357
|
),
|
|
@@ -1431,19 +1359,15 @@ var PamGrid = ({
|
|
|
1431
1359
|
features.pinning && /* @__PURE__ */ jsx12(
|
|
1432
1360
|
PamHeaderOption_default,
|
|
1433
1361
|
{
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
onPinRight: () => pinColumn(col.key, "right"),
|
|
1438
|
-
onUnpin: () => unpinColumn(col.key),
|
|
1439
|
-
advanceFilters,
|
|
1440
|
-
setColumnAdvanceFilter
|
|
1362
|
+
currentColumn: col,
|
|
1363
|
+
gridFetaures: features,
|
|
1364
|
+
grid
|
|
1441
1365
|
}
|
|
1442
1366
|
),
|
|
1443
|
-
|
|
1367
|
+
/* @__PURE__ */ jsx12(
|
|
1444
1368
|
"i",
|
|
1445
1369
|
{
|
|
1446
|
-
className: "
|
|
1370
|
+
className: "bx bx-move-horizontal text-white cursor-resize",
|
|
1447
1371
|
onMouseDown: (e) => onResizeMouseDown(e, col.key)
|
|
1448
1372
|
}
|
|
1449
1373
|
)
|
|
@@ -1475,7 +1399,7 @@ var PamGrid = ({
|
|
|
1475
1399
|
EmptyState_default,
|
|
1476
1400
|
{
|
|
1477
1401
|
title: emptyState.title,
|
|
1478
|
-
description:
|
|
1402
|
+
description: `No results found for "${search}"`,
|
|
1479
1403
|
imgSrc: NoSearchResult_default
|
|
1480
1404
|
}
|
|
1481
1405
|
) : /* @__PURE__ */ jsx12(
|
|
@@ -1520,7 +1444,7 @@ var PamGrid = ({
|
|
|
1520
1444
|
style: { width: "80px" },
|
|
1521
1445
|
value: pageSize,
|
|
1522
1446
|
onChange: (e) => setPageSize(Number(e.target.value)),
|
|
1523
|
-
children: [
|
|
1447
|
+
children: [20, 50, 100].map((n) => /* @__PURE__ */ jsx12("option", { value: n, children: n }, n))
|
|
1524
1448
|
}
|
|
1525
1449
|
),
|
|
1526
1450
|
" ",
|
|
@@ -1650,7 +1574,7 @@ var PamGrid = ({
|
|
|
1650
1574
|
}
|
|
1651
1575
|
)
|
|
1652
1576
|
] }),
|
|
1653
|
-
isExpanded && renderExpanded && /* @__PURE__ */ jsx12("tr", { className: "
|
|
1577
|
+
isExpanded && renderExpanded && /* @__PURE__ */ jsx12("tr", { className: "expanded-row", children: /* @__PURE__ */ jsx12(
|
|
1654
1578
|
"td",
|
|
1655
1579
|
{
|
|
1656
1580
|
colSpan: visibleColumns.length + (features.selection ? 1 : 0) + (features.expand ? 1 : 0) + (features.actions ? 1 : 0),
|
|
@@ -1733,35 +1657,46 @@ var ColumnVisibilityPanel = ({
|
|
|
1733
1657
|
var ColumnVisibilityPanel_default = ColumnVisibilityPanel;
|
|
1734
1658
|
|
|
1735
1659
|
// src/core/useGridCore.ts
|
|
1736
|
-
import { useState as
|
|
1660
|
+
import { useState as useState5, useMemo as useMemo2, useCallback, useEffect as useEffect5 } from "react";
|
|
1737
1661
|
function useGridCore({
|
|
1738
1662
|
data = [],
|
|
1739
1663
|
columns = [],
|
|
1740
1664
|
serverMode = false,
|
|
1741
1665
|
rowKey = "id",
|
|
1742
|
-
initialPageSize = 20
|
|
1666
|
+
initialPageSize = 20,
|
|
1667
|
+
addNewRecord,
|
|
1668
|
+
switchFiltersConfig
|
|
1743
1669
|
}) {
|
|
1744
|
-
const [page, setPage] =
|
|
1745
|
-
const [pageSize, setPageSize] =
|
|
1746
|
-
const [search, setSearch] =
|
|
1747
|
-
const [debouncedSearch, setDebouncedSearch] =
|
|
1748
|
-
const [groupBy, setGroupBy] =
|
|
1749
|
-
const [emptyState, setEmptyState] =
|
|
1750
|
-
const [advanceFilters, setAdvanceFilters] =
|
|
1751
|
-
const [sortBy, setSortBy] =
|
|
1752
|
-
const [selected, setSelected] =
|
|
1753
|
-
const [expanded, setExpanded] =
|
|
1754
|
-
const [
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1670
|
+
const [page, setPage] = useState5(1);
|
|
1671
|
+
const [pageSize, setPageSize] = useState5(initialPageSize);
|
|
1672
|
+
const [search, setSearch] = useState5("");
|
|
1673
|
+
const [debouncedSearch, setDebouncedSearch] = useState5("");
|
|
1674
|
+
const [groupBy, setGroupBy] = useState5(null);
|
|
1675
|
+
const [emptyState, setEmptyState] = useState5({});
|
|
1676
|
+
const [advanceFilters, setAdvanceFilters] = useState5({});
|
|
1677
|
+
const [sortBy, setSortBy] = useState5({ key: null, dir: "asc" });
|
|
1678
|
+
const [selected, setSelected] = useState5(/* @__PURE__ */ new Set());
|
|
1679
|
+
const [expanded, setExpanded] = useState5(/* @__PURE__ */ new Set());
|
|
1680
|
+
const [switchFilters, setSwitchFilters] = useState5(
|
|
1681
|
+
() => {
|
|
1682
|
+
const initial = {};
|
|
1683
|
+
switchFiltersConfig?.forEach((f) => {
|
|
1684
|
+
initial[f.key] = f.defaultValue ?? false;
|
|
1685
|
+
});
|
|
1686
|
+
return initial;
|
|
1687
|
+
}
|
|
1688
|
+
);
|
|
1689
|
+
const [serverRows, setServerRows] = useState5([]);
|
|
1690
|
+
const [serverTotal, setServerTotal] = useState5(0);
|
|
1691
|
+
const [serverTotalPages, setServerTotalPages] = useState5(1);
|
|
1692
|
+
const [colState, setColState] = useState5(
|
|
1758
1693
|
() => columns.map((c, i) => ({
|
|
1759
1694
|
...c,
|
|
1760
1695
|
visible: c.visible !== false,
|
|
1761
1696
|
order: i
|
|
1762
1697
|
}))
|
|
1763
1698
|
);
|
|
1764
|
-
|
|
1699
|
+
useEffect5(() => {
|
|
1765
1700
|
const t = setTimeout(() => {
|
|
1766
1701
|
setDebouncedSearch(search);
|
|
1767
1702
|
setPage(1);
|
|
@@ -1847,6 +1782,22 @@ function useGridCore({
|
|
|
1847
1782
|
},
|
|
1848
1783
|
[]
|
|
1849
1784
|
);
|
|
1785
|
+
const toggleSwitchFilter = useCallback((key) => {
|
|
1786
|
+
setSwitchFilters((prev) => ({
|
|
1787
|
+
...prev,
|
|
1788
|
+
[key]: !prev[key]
|
|
1789
|
+
}));
|
|
1790
|
+
setPage(1);
|
|
1791
|
+
}, []);
|
|
1792
|
+
const switchQuery = useMemo2(() => {
|
|
1793
|
+
if (!switchFiltersConfig) return {};
|
|
1794
|
+
const query = {};
|
|
1795
|
+
switchFiltersConfig.forEach((filter) => {
|
|
1796
|
+
const state = switchFilters[filter.key];
|
|
1797
|
+
query[filter.queryParam] = state ? filter.trueValue ?? true : filter.falseValue ?? false;
|
|
1798
|
+
});
|
|
1799
|
+
return query;
|
|
1800
|
+
}, [switchFilters, switchFiltersConfig]);
|
|
1850
1801
|
const visibleColumns = useMemo2(
|
|
1851
1802
|
() => colState.filter((c) => c.visible).sort((a, b) => a.order - b.order),
|
|
1852
1803
|
[colState]
|
|
@@ -1895,6 +1846,8 @@ function useGridCore({
|
|
|
1895
1846
|
// expand
|
|
1896
1847
|
expanded,
|
|
1897
1848
|
toggleExpand,
|
|
1849
|
+
// New Record Button
|
|
1850
|
+
addNewRecord,
|
|
1898
1851
|
// columns
|
|
1899
1852
|
colState,
|
|
1900
1853
|
visibleColumns,
|
|
@@ -1912,7 +1865,13 @@ function useGridCore({
|
|
|
1912
1865
|
rowKey,
|
|
1913
1866
|
// empty state
|
|
1914
1867
|
emptyState,
|
|
1915
|
-
setEmptyState
|
|
1868
|
+
setEmptyState,
|
|
1869
|
+
// switch filters
|
|
1870
|
+
switchFilters,
|
|
1871
|
+
toggleSwitchFilter,
|
|
1872
|
+
setSwitchFilters,
|
|
1873
|
+
switchQuery,
|
|
1874
|
+
switchFiltersConfig
|
|
1916
1875
|
};
|
|
1917
1876
|
}
|
|
1918
1877
|
export {
|