next-helios-fe 1.8.122 → 1.8.124
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/components/table/index.d.ts +16 -11
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/src/components/table/index.tsx +165 -128
package/package.json
CHANGED
@@ -71,17 +71,20 @@ interface TableProps {
|
|
71
71
|
};
|
72
72
|
loading?: boolean;
|
73
73
|
actionColumn?: (e?: any) => React.ReactNode;
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
74
|
+
dynamicTable?: {
|
75
|
+
getValue?: (value: {
|
76
|
+
search: string;
|
77
|
+
page: number;
|
78
|
+
dataOffset: number;
|
79
|
+
maxRow: number;
|
80
|
+
filter: any[];
|
81
|
+
categoryFilter: any[];
|
82
|
+
sortBy: any;
|
83
|
+
}) => void;
|
84
|
+
setValue?: {
|
85
|
+
totalData?: number;
|
86
|
+
categoryFilter?: { [key: string]: (string | number)[] };
|
87
|
+
};
|
85
88
|
};
|
86
89
|
}
|
87
90
|
|
@@ -97,8 +100,7 @@ export const Table: TableComponentProps = ({
|
|
97
100
|
checkbox,
|
98
101
|
loading,
|
99
102
|
actionColumn,
|
100
|
-
|
101
|
-
setDynamicTableValue,
|
103
|
+
dynamicTable,
|
102
104
|
}) => {
|
103
105
|
const paginationRef = useRef<HTMLDivElement>(null);
|
104
106
|
const [excludedColumn, setExcludedColumn] = useState<string[]>([]);
|
@@ -119,6 +121,7 @@ export const Table: TableComponentProps = ({
|
|
119
121
|
});
|
120
122
|
const [isReadyForDynamicValue, setIsReadyForDynamicValue] =
|
121
123
|
useState<boolean>(false);
|
124
|
+
const [dynamicTableValueCopy, setDynamicTableValueCopy] = useState<any>();
|
122
125
|
|
123
126
|
const height =
|
124
127
|
options?.height === "fit"
|
@@ -156,38 +159,43 @@ export const Table: TableComponentProps = ({
|
|
156
159
|
header
|
157
160
|
?.filter((item) => item.type === "category")
|
158
161
|
?.map((item) => {
|
159
|
-
|
162
|
+
if (dynamicTable?.setValue?.categoryFilter?.[item.key]) {
|
163
|
+
tempCategoryFilter[item.key] =
|
164
|
+
dynamicTable?.setValue?.categoryFilter[item.key];
|
165
|
+
} else {
|
166
|
+
const tempDataByCategory: string[] = [];
|
160
167
|
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
? "undefined"
|
166
|
-
: a === null
|
167
|
-
? "null"
|
168
|
-
: a.toString()
|
169
|
-
).localeCompare(
|
170
|
-
b === undefined
|
168
|
+
data
|
169
|
+
.map((dataItem) => dataItem[item.key as keyof typeof dataItem])
|
170
|
+
.sort((a, b) =>
|
171
|
+
(a === undefined
|
171
172
|
? "undefined"
|
172
|
-
:
|
173
|
+
: a === null
|
173
174
|
? "null"
|
174
|
-
:
|
175
|
+
: a.toString()
|
176
|
+
).localeCompare(
|
177
|
+
b === undefined
|
178
|
+
? "undefined"
|
179
|
+
: b === null
|
180
|
+
? "null"
|
181
|
+
: b.toString()
|
182
|
+
)
|
175
183
|
)
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
}
|
182
|
-
});
|
184
|
+
.filter((value, index, self) => self.indexOf(value) === index)
|
185
|
+
.map((value) => {
|
186
|
+
if (!tempDataByCategory.includes(value)) {
|
187
|
+
tempDataByCategory.push(value);
|
188
|
+
}
|
189
|
+
});
|
183
190
|
|
184
|
-
|
191
|
+
tempCategoryFilter[item.key] = tempDataByCategory;
|
192
|
+
}
|
185
193
|
});
|
186
194
|
|
187
195
|
setCategoryFilter(tempCategoryFilter);
|
188
196
|
setIsReadyForDynamicValue(true);
|
189
197
|
}
|
190
|
-
}, [data]);
|
198
|
+
}, [data, dynamicTable?.setValue?.categoryFilter]);
|
191
199
|
|
192
200
|
useEffect(() => {
|
193
201
|
if (page === 1) {
|
@@ -219,7 +227,7 @@ export const Table: TableComponentProps = ({
|
|
219
227
|
};
|
220
228
|
|
221
229
|
const filteredData = useMemo(() => {
|
222
|
-
if (
|
230
|
+
if (dynamicTable?.getValue) {
|
223
231
|
return data;
|
224
232
|
} else {
|
225
233
|
const tempData = data
|
@@ -295,7 +303,7 @@ export const Table: TableComponentProps = ({
|
|
295
303
|
if (
|
296
304
|
page >
|
297
305
|
Math.ceil(
|
298
|
-
(
|
306
|
+
(dynamicTable?.setValue?.totalData ?? filteredData?.length) / maxRow
|
299
307
|
)
|
300
308
|
) {
|
301
309
|
setPage(1);
|
@@ -307,21 +315,44 @@ export const Table: TableComponentProps = ({
|
|
307
315
|
}, [filteredData]);
|
308
316
|
|
309
317
|
useEffect(() => {
|
310
|
-
if (
|
318
|
+
if (dynamicTable?.getValue) {
|
311
319
|
if (isReadyForDynamicValue) {
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
320
|
+
if (
|
321
|
+
JSON.stringify(dynamicTableValueCopy) !==
|
322
|
+
JSON.stringify({
|
323
|
+
search,
|
324
|
+
page,
|
325
|
+
dataOffset: (page - 1) * maxRow,
|
326
|
+
maxRow,
|
327
|
+
filter,
|
328
|
+
categoryFilter,
|
329
|
+
sortBy,
|
330
|
+
})
|
331
|
+
) {
|
332
|
+
dynamicTable?.getValue({
|
333
|
+
search,
|
334
|
+
page,
|
335
|
+
dataOffset: (page - 1) * maxRow,
|
336
|
+
maxRow,
|
337
|
+
filter,
|
338
|
+
categoryFilter,
|
339
|
+
sortBy,
|
340
|
+
});
|
341
|
+
setDynamicTableValueCopy({
|
342
|
+
search,
|
343
|
+
page,
|
344
|
+
dataOffset: (page - 1) * maxRow,
|
345
|
+
maxRow,
|
346
|
+
filter,
|
347
|
+
categoryFilter,
|
348
|
+
sortBy,
|
349
|
+
});
|
350
|
+
}
|
321
351
|
}
|
322
352
|
}
|
323
353
|
}, [
|
324
354
|
isReadyForDynamicValue,
|
355
|
+
dynamicTableValueCopy,
|
325
356
|
search,
|
326
357
|
page,
|
327
358
|
maxRow,
|
@@ -386,72 +417,75 @@ export const Table: TableComponentProps = ({
|
|
386
417
|
</button>
|
387
418
|
}
|
388
419
|
>
|
389
|
-
{
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
420
|
+
{(dynamicTable?.setValue?.categoryFilter &&
|
421
|
+
dynamicTable?.setValue?.categoryFilter[item.key]
|
422
|
+
? dynamicTable?.setValue?.categoryFilter[item.key]
|
423
|
+
: data
|
424
|
+
?.map(
|
425
|
+
(dataItem) =>
|
426
|
+
dataItem[item.key as keyof typeof dataItem]
|
427
|
+
)
|
428
|
+
?.sort((a, b) =>
|
429
|
+
(a === undefined
|
430
|
+
? "undefined"
|
431
|
+
: a === null
|
432
|
+
? "null"
|
433
|
+
: a.toString()
|
434
|
+
).localeCompare(
|
435
|
+
b === undefined
|
436
|
+
? "undefined"
|
437
|
+
: b === null
|
438
|
+
? "null"
|
439
|
+
: b.toString()
|
440
|
+
)
|
441
|
+
)
|
442
|
+
?.filter(
|
443
|
+
(value, index, self) =>
|
444
|
+
self.indexOf(value) === index
|
445
|
+
)
|
446
|
+
)?.map((value) => {
|
447
|
+
return (
|
448
|
+
<Dropdown.Item
|
449
|
+
key={value}
|
450
|
+
onClick={() => {
|
451
|
+
const tempCategoryFilter = { ...categoryFilter };
|
417
452
|
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
}
|
453
|
+
if (categoryFilter[item.key]?.includes(value)) {
|
454
|
+
tempCategoryFilter[item.key] = categoryFilter[
|
455
|
+
item.key
|
456
|
+
].filter(
|
457
|
+
(categoryItem: string) => categoryItem !== value
|
458
|
+
);
|
459
|
+
} else {
|
460
|
+
tempCategoryFilter[item.key] = [
|
461
|
+
...categoryFilter[item.key],
|
462
|
+
value,
|
463
|
+
];
|
464
|
+
}
|
431
465
|
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
466
|
+
setCategoryFilter(tempCategoryFilter);
|
467
|
+
}}
|
468
|
+
>
|
469
|
+
<div className="pointer-events-none capitalize">
|
470
|
+
<Form.Checkbox
|
471
|
+
options={{ disableHover: true }}
|
472
|
+
label={
|
473
|
+
value === undefined
|
474
|
+
? "undefined"
|
475
|
+
: value === null
|
476
|
+
? "null"
|
477
|
+
: value?.toString()
|
478
|
+
}
|
479
|
+
checked={
|
480
|
+
categoryFilter[item.key]?.includes(value) ??
|
481
|
+
false
|
482
|
+
}
|
483
|
+
readOnly
|
484
|
+
/>
|
485
|
+
</div>
|
486
|
+
</Dropdown.Item>
|
487
|
+
);
|
488
|
+
})}
|
455
489
|
</Dropdown>
|
456
490
|
</div>
|
457
491
|
)}
|
@@ -660,7 +694,7 @@ export const Table: TableComponentProps = ({
|
|
660
694
|
})}
|
661
695
|
{options?.toolbar?.addData?.show !== false && (
|
662
696
|
<Tooltip
|
663
|
-
content={options?.toolbar?.addData?.tooltip || "
|
697
|
+
content={options?.toolbar?.addData?.tooltip || "Add Data"}
|
664
698
|
>
|
665
699
|
<button
|
666
700
|
type="button"
|
@@ -681,7 +715,7 @@ export const Table: TableComponentProps = ({
|
|
681
715
|
trigger={
|
682
716
|
<Tooltip
|
683
717
|
content={
|
684
|
-
options?.toolbar?.filter?.tooltip || "
|
718
|
+
options?.toolbar?.filter?.tooltip || "Column Filter"
|
685
719
|
}
|
686
720
|
>
|
687
721
|
<button
|
@@ -737,7 +771,7 @@ export const Table: TableComponentProps = ({
|
|
737
771
|
{options?.toolbar?.export?.show !== false && (
|
738
772
|
<Button
|
739
773
|
type="button"
|
740
|
-
tooltip={options?.toolbar?.export?.tooltip || "
|
774
|
+
tooltip={options?.toolbar?.export?.tooltip || "Export Data"}
|
741
775
|
options={{ variant: "primary", width: "fit" }}
|
742
776
|
onClick={() => {
|
743
777
|
const exportData = filteredData?.map((item) => {
|
@@ -786,7 +820,7 @@ export const Table: TableComponentProps = ({
|
|
786
820
|
<Form.Checkbox
|
787
821
|
options={{ disableHover: true }}
|
788
822
|
checked={
|
789
|
-
(
|
823
|
+
(dynamicTable?.setValue?.totalData ??
|
790
824
|
filteredData?.length) !== 0 &&
|
791
825
|
filteredData?.filter((item) => {
|
792
826
|
return selected?.find((selectedItem) => {
|
@@ -797,7 +831,7 @@ export const Table: TableComponentProps = ({
|
|
797
831
|
);
|
798
832
|
});
|
799
833
|
})?.length ===
|
800
|
-
(
|
834
|
+
(dynamicTable?.setValue?.totalData ??
|
801
835
|
filteredData?.length)
|
802
836
|
? true
|
803
837
|
: false
|
@@ -813,7 +847,7 @@ export const Table: TableComponentProps = ({
|
|
813
847
|
);
|
814
848
|
});
|
815
849
|
})?.length ===
|
816
|
-
(
|
850
|
+
(dynamicTable?.setValue?.totalData ??
|
817
851
|
filteredData?.length)
|
818
852
|
) {
|
819
853
|
if (checkbox?.onChange) {
|
@@ -924,13 +958,15 @@ export const Table: TableComponentProps = ({
|
|
924
958
|
<tbody className="divide-y">
|
925
959
|
{!loading &&
|
926
960
|
filteredData &&
|
927
|
-
(
|
961
|
+
(dynamicTable?.setValue?.totalData ?? filteredData?.length) !==
|
962
|
+
0 &&
|
928
963
|
dataArr}
|
929
964
|
</tbody>
|
930
965
|
</table>
|
931
966
|
{(loading ||
|
932
967
|
!filteredData ||
|
933
|
-
(
|
968
|
+
(dynamicTable?.setValue?.totalData ?? filteredData?.length) ===
|
969
|
+
0) && (
|
934
970
|
<div className="flex h-full items-center justify-center whitespace-nowrap bg-secondary-bg px-4 py-1.5 text-center">
|
935
971
|
{loading ? (
|
936
972
|
<Icon
|
@@ -985,16 +1021,17 @@ export const Table: TableComponentProps = ({
|
|
985
1021
|
/>
|
986
1022
|
</div>
|
987
1023
|
{filteredData &&
|
988
|
-
(
|
1024
|
+
(dynamicTable?.setValue?.totalData ?? filteredData?.length) !==
|
1025
|
+
0 && (
|
989
1026
|
<span className="hidden text-sm text-disabled lg:block">{`Showing ${
|
990
1027
|
(page - 1) * maxRow + 1
|
991
1028
|
} to ${
|
992
1029
|
page * maxRow >
|
993
|
-
(
|
994
|
-
?
|
1030
|
+
(dynamicTable?.setValue?.totalData ?? filteredData?.length)
|
1031
|
+
? dynamicTable?.setValue?.totalData ?? filteredData?.length
|
995
1032
|
: page * maxRow
|
996
1033
|
} of ${
|
997
|
-
|
1034
|
+
dynamicTable?.setValue?.totalData ?? filteredData?.length
|
998
1035
|
} entries`}</span>
|
999
1036
|
)}
|
1000
1037
|
<div className="flex items-center gap-2 text-xs">
|
@@ -1024,7 +1061,7 @@ export const Table: TableComponentProps = ({
|
|
1024
1061
|
>
|
1025
1062
|
{Array.from({
|
1026
1063
|
length: Math.ceil(
|
1027
|
-
(
|
1064
|
+
(dynamicTable?.setValue?.totalData ?? filteredData?.length) /
|
1028
1065
|
maxRow
|
1029
1066
|
),
|
1030
1067
|
}).map((_, index) => {
|
@@ -1048,7 +1085,7 @@ export const Table: TableComponentProps = ({
|
|
1048
1085
|
type="button"
|
1049
1086
|
className="hidden h-9 min-w-9 items-center justify-center rounded-md border bg-secondary-bg hover:bg-secondary-light disabled:pointer-events-none disabled:bg-secondary-light disabled:text-disabled md:flex"
|
1050
1087
|
disabled={
|
1051
|
-
(
|
1088
|
+
(dynamicTable?.setValue?.totalData ?? filteredData?.length) <=
|
1052
1089
|
page * maxRow
|
1053
1090
|
}
|
1054
1091
|
onClick={() => {
|
@@ -1061,14 +1098,14 @@ export const Table: TableComponentProps = ({
|
|
1061
1098
|
type="button"
|
1062
1099
|
className="flex h-9 min-w-9 items-center justify-center rounded-md border bg-secondary-bg hover:bg-secondary-light disabled:pointer-events-none disabled:bg-secondary-light disabled:text-disabled"
|
1063
1100
|
disabled={
|
1064
|
-
(
|
1101
|
+
(dynamicTable?.setValue?.totalData ?? filteredData?.length) <=
|
1065
1102
|
page * maxRow
|
1066
1103
|
}
|
1067
1104
|
onClick={() => {
|
1068
1105
|
setPage(
|
1069
1106
|
Math.ceil(
|
1070
|
-
(
|
1071
|
-
maxRow
|
1107
|
+
(dynamicTable?.setValue?.totalData ??
|
1108
|
+
filteredData?.length) / maxRow
|
1072
1109
|
)
|
1073
1110
|
);
|
1074
1111
|
}}
|