next-helios-fe 1.8.138 → 1.8.140
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/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "next-helios-fe",
|
3
|
-
"version": "1.8.
|
3
|
+
"version": "1.8.140",
|
4
4
|
"description": "",
|
5
5
|
"main": "dist/index.js",
|
6
6
|
"types": "dist/index.d.ts",
|
@@ -33,6 +33,7 @@
|
|
33
33
|
"react-pin-field": "^3.1.5",
|
34
34
|
"react-syntax-highlighter": "^15.5.0",
|
35
35
|
"sass": "^1.77.8",
|
36
|
+
"use-debounce": "^10.0.5",
|
36
37
|
"xlsx": "^0.18.5"
|
37
38
|
},
|
38
39
|
"peerDependencies": {
|
@@ -74,13 +74,13 @@ export const Date: React.FC<DateProps> = ({
|
|
74
74
|
dayjs().subtract(7, "days").format("YYYY-MM-DD") &&
|
75
75
|
dayjs(data[1]).format("YYYY-MM-DD") === dayjs().format("YYYY-MM-DD")
|
76
76
|
) {
|
77
|
-
return "Last 7
|
77
|
+
return "Last 7 Days";
|
78
78
|
} else if (
|
79
79
|
dayjs(data[0]).format("YYYY-MM-DD") ===
|
80
80
|
dayjs().subtract(1, "months").format("YYYY-MM-DD") &&
|
81
81
|
dayjs(data[1]).format("YYYY-MM-DD") === dayjs().format("YYYY-MM-DD")
|
82
82
|
) {
|
83
|
-
return "Last 30
|
83
|
+
return "Last 30 Days";
|
84
84
|
} else {
|
85
85
|
return "Custom";
|
86
86
|
}
|
@@ -215,7 +215,7 @@ export const Date: React.FC<DateProps> = ({
|
|
215
215
|
<button
|
216
216
|
type="button"
|
217
217
|
className="w-40 my-0.5 px-4 py-2 rounded-md text-sm text-left hover:bg-secondary-light disabled:bg-primary-transparent disabled:text-primary"
|
218
|
-
disabled={dateRangeLabel(tempValue) === "Last 7
|
218
|
+
disabled={dateRangeLabel(tempValue) === "Last 7 Days"}
|
219
219
|
onClick={() => {
|
220
220
|
setTempValue([
|
221
221
|
dayjs().subtract(7, "days").startOf("day"),
|
@@ -233,12 +233,12 @@ export const Date: React.FC<DateProps> = ({
|
|
233
233
|
}
|
234
234
|
}}
|
235
235
|
>
|
236
|
-
Last 7
|
236
|
+
Last 7 Days
|
237
237
|
</button>
|
238
238
|
<button
|
239
239
|
type="button"
|
240
240
|
className="w-40 my-0.5 px-4 py-2 rounded-md text-sm text-left hover:bg-secondary-light disabled:bg-primary-transparent disabled:text-primary"
|
241
|
-
disabled={dateRangeLabel(tempValue) === "Last 30
|
241
|
+
disabled={dateRangeLabel(tempValue) === "Last 30 Days"}
|
242
242
|
onClick={() => {
|
243
243
|
setTempValue([
|
244
244
|
dayjs().subtract(1, "months").startOf("day"),
|
@@ -256,7 +256,7 @@ export const Date: React.FC<DateProps> = ({
|
|
256
256
|
}
|
257
257
|
}}
|
258
258
|
>
|
259
|
-
Last 30
|
259
|
+
Last 30 Days
|
260
260
|
</button>
|
261
261
|
<button
|
262
262
|
type="button"
|
@@ -6,6 +6,7 @@ import dayjs from "dayjs";
|
|
6
6
|
import utc from "dayjs/plugin/utc";
|
7
7
|
import { Form, Button, Dropdown, Tooltip, Calendar } from "../../components";
|
8
8
|
import { Action, type ActionProps } from "./action";
|
9
|
+
import { useDebouncedCallback } from "use-debounce";
|
9
10
|
|
10
11
|
dayjs.extend(utc);
|
11
12
|
|
@@ -111,6 +112,7 @@ export const Table: TableComponentProps = ({
|
|
111
112
|
const [excludedColumn, setExcludedColumn] = useState<string[]>([]);
|
112
113
|
const [search, setSearch] = useState<string>("");
|
113
114
|
const [filter, setFilter] = useState<any[]>([]);
|
115
|
+
const [delayedFilter, setDelayedFilter] = useState<any>([]);
|
114
116
|
const [categoryFilter, setCategoryFilter] = useState<any>({});
|
115
117
|
const [dateFilter, setDateFilter] = useState<any>({});
|
116
118
|
const [maxRow, setMaxRow] = useState<number>(options?.maxRow || 10);
|
@@ -153,71 +155,80 @@ export const Table: TableComponentProps = ({
|
|
153
155
|
}, []);
|
154
156
|
|
155
157
|
useEffect(() => {
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
158
|
+
if (!isReadyForDynamicValue) {
|
159
|
+
setFilter(
|
160
|
+
header?.map((item) => {
|
161
|
+
return { key: item.key, value: "", type: item.type };
|
162
|
+
})
|
163
|
+
);
|
161
164
|
|
162
|
-
|
163
|
-
|
165
|
+
setDelayedFilter(
|
166
|
+
header?.map((item) => {
|
167
|
+
return { key: item.key, value: "", type: item.type };
|
168
|
+
})
|
169
|
+
);
|
164
170
|
|
165
|
-
|
166
|
-
|
167
|
-
?.map((item) => {
|
168
|
-
if (dynamicTable?.setValue?.categoryFilter?.[item.key]) {
|
169
|
-
tempCategoryFilter[item.key] =
|
170
|
-
dynamicTable?.setValue?.categoryFilter[item.key];
|
171
|
-
} else {
|
172
|
-
if (data.length !== 0) {
|
173
|
-
const tempDataByCategory: string[] = [];
|
171
|
+
const tempCategoryFilter: any = {};
|
172
|
+
const tempDateFilter: any = {};
|
174
173
|
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
174
|
+
header
|
175
|
+
?.filter((item) => item.type === "category")
|
176
|
+
?.map((item) => {
|
177
|
+
if (dynamicTable?.setValue?.categoryFilter?.[item.key]) {
|
178
|
+
tempCategoryFilter[item.key] =
|
179
|
+
dynamicTable?.setValue?.categoryFilter[item.key];
|
180
|
+
} else {
|
181
|
+
if (data.length !== 0) {
|
182
|
+
const tempDataByCategory: string[] = [];
|
183
|
+
|
184
|
+
data
|
185
|
+
.map((dataItem) => dataItem[item.key as keyof typeof dataItem])
|
186
|
+
.sort((a, b) =>
|
187
|
+
(a === undefined
|
185
188
|
? "undefined"
|
186
|
-
:
|
189
|
+
: a === null
|
187
190
|
? "null"
|
188
|
-
:
|
191
|
+
: a.toString()
|
192
|
+
).localeCompare(
|
193
|
+
b === undefined
|
194
|
+
? "undefined"
|
195
|
+
: b === null
|
196
|
+
? "null"
|
197
|
+
: b.toString()
|
198
|
+
)
|
189
199
|
)
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
}
|
196
|
-
});
|
200
|
+
.filter((value, index, self) => self.indexOf(value) === index)
|
201
|
+
.map((value) => {
|
202
|
+
if (!tempDataByCategory.includes(value)) {
|
203
|
+
tempDataByCategory.push(value);
|
204
|
+
}
|
205
|
+
});
|
197
206
|
|
198
|
-
|
207
|
+
tempCategoryFilter[item.key] = tempDataByCategory;
|
208
|
+
}
|
199
209
|
}
|
200
|
-
}
|
201
|
-
});
|
210
|
+
});
|
202
211
|
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
212
|
+
header
|
213
|
+
?.filter((item) => item.type === "date")
|
214
|
+
?.map((item) => {
|
215
|
+
if (dynamicTable?.setValue?.dateFilter?.[item.key]) {
|
216
|
+
tempDateFilter[item.key] =
|
217
|
+
dynamicTable?.setValue?.dateFilter[item.key];
|
218
|
+
} else {
|
219
|
+
tempDateFilter[item.key] = [];
|
220
|
+
}
|
221
|
+
});
|
213
222
|
|
214
|
-
|
215
|
-
|
216
|
-
|
223
|
+
setCategoryFilter(tempCategoryFilter);
|
224
|
+
setDateFilter(tempDateFilter);
|
225
|
+
setIsReadyForDynamicValue(true);
|
226
|
+
}
|
217
227
|
}, [
|
228
|
+
data,
|
229
|
+
isReadyForDynamicValue,
|
218
230
|
dynamicTable?.setValue?.categoryFilter,
|
219
231
|
dynamicTable?.setValue?.dateFilter,
|
220
|
-
...(!dynamicTable?.setValue?.categoryFilter ? [data] : []),
|
221
232
|
]);
|
222
233
|
|
223
234
|
useEffect(() => {
|
@@ -241,14 +252,6 @@ export const Table: TableComponentProps = ({
|
|
241
252
|
}
|
242
253
|
}, [page]);
|
243
254
|
|
244
|
-
const handleExportData = (dataTitle: string, data: any[]) => {
|
245
|
-
const fileName = `${dataTitle}_${dayjs().format("YYYY-MM-DD_HH-mm-ss")}`;
|
246
|
-
const worksheet = xlsx.utils.json_to_sheet(data);
|
247
|
-
const workbook = xlsx.utils.book_new();
|
248
|
-
xlsx.utils.book_append_sheet(workbook, worksheet, "Data");
|
249
|
-
xlsx.writeFile(workbook, fileName + ".xlsx");
|
250
|
-
};
|
251
|
-
|
252
255
|
const filteredData = useMemo(() => {
|
253
256
|
if (dynamicTable?.getValue) {
|
254
257
|
return data;
|
@@ -365,7 +368,7 @@ export const Table: TableComponentProps = ({
|
|
365
368
|
page,
|
366
369
|
dataOffset: (page - 1) * maxRow,
|
367
370
|
maxRow,
|
368
|
-
filter,
|
371
|
+
filter: delayedFilter,
|
369
372
|
categoryFilter,
|
370
373
|
dateFilter,
|
371
374
|
sortBy,
|
@@ -376,7 +379,7 @@ export const Table: TableComponentProps = ({
|
|
376
379
|
page,
|
377
380
|
dataOffset: (page - 1) * maxRow,
|
378
381
|
maxRow,
|
379
|
-
filter,
|
382
|
+
filter: delayedFilter,
|
380
383
|
categoryFilter,
|
381
384
|
dateFilter,
|
382
385
|
sortBy,
|
@@ -386,7 +389,7 @@ export const Table: TableComponentProps = ({
|
|
386
389
|
page,
|
387
390
|
dataOffset: (page - 1) * maxRow,
|
388
391
|
maxRow,
|
389
|
-
filter,
|
392
|
+
filter: delayedFilter,
|
390
393
|
categoryFilter,
|
391
394
|
dateFilter,
|
392
395
|
sortBy,
|
@@ -400,12 +403,28 @@ export const Table: TableComponentProps = ({
|
|
400
403
|
search,
|
401
404
|
page,
|
402
405
|
maxRow,
|
403
|
-
|
406
|
+
delayedFilter,
|
404
407
|
categoryFilter,
|
405
408
|
dateFilter,
|
406
409
|
sortBy,
|
407
410
|
]);
|
408
411
|
|
412
|
+
const debouncedUpdate = useDebouncedCallback((key: string, value: string) => {
|
413
|
+
setDelayedFilter(
|
414
|
+
filter?.map((filterItem) => {
|
415
|
+
return filterItem.key === key ? { ...filterItem, value } : filterItem;
|
416
|
+
})
|
417
|
+
);
|
418
|
+
}, 1250);
|
419
|
+
|
420
|
+
const handleExportData = (dataTitle: string, data: any[]) => {
|
421
|
+
const fileName = `${dataTitle}_${dayjs().format("YYYY-MM-DD_HH-mm-ss")}`;
|
422
|
+
const worksheet = xlsx.utils.json_to_sheet(data);
|
423
|
+
const workbook = xlsx.utils.book_new();
|
424
|
+
xlsx.utils.book_append_sheet(workbook, worksheet, "Data");
|
425
|
+
xlsx.writeFile(workbook, fileName + ".xlsx");
|
426
|
+
};
|
427
|
+
|
409
428
|
const headerArr = header
|
410
429
|
?.filter((item) => !excludedColumn?.includes(item.key))
|
411
430
|
?.map((item) => {
|
@@ -621,6 +640,8 @@ export const Table: TableComponentProps = ({
|
|
621
640
|
: filterItem;
|
622
641
|
})
|
623
642
|
);
|
643
|
+
|
644
|
+
debouncedUpdate(item.key, e.target.value);
|
624
645
|
}}
|
625
646
|
/>
|
626
647
|
{((item?.type === "date" &&
|
@@ -640,6 +661,13 @@ export const Table: TableComponentProps = ({
|
|
640
661
|
: filterItem;
|
641
662
|
})
|
642
663
|
);
|
664
|
+
setDelayedFilter(
|
665
|
+
filter?.map((filterItem) => {
|
666
|
+
return filterItem.key === item.key
|
667
|
+
? { ...filterItem, value: "" }
|
668
|
+
: filterItem;
|
669
|
+
})
|
670
|
+
);
|
643
671
|
} else if (
|
644
672
|
item?.type === "date" &&
|
645
673
|
dateFilter[item.key]?.[0] &&
|