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.138",
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 days";
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 days";
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 days"}
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 days
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 days"}
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 days
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
- setFilter(
157
- header?.map((item) => {
158
- return { key: item.key, value: "", type: item.type };
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
- const tempCategoryFilter: any = {};
163
- const tempDateFilter: any = {};
165
+ setDelayedFilter(
166
+ header?.map((item) => {
167
+ return { key: item.key, value: "", type: item.type };
168
+ })
169
+ );
164
170
 
165
- header
166
- ?.filter((item) => item.type === "category")
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
- data
176
- .map((dataItem) => dataItem[item.key as keyof typeof dataItem])
177
- .sort((a, b) =>
178
- (a === undefined
179
- ? "undefined"
180
- : a === null
181
- ? "null"
182
- : a.toString()
183
- ).localeCompare(
184
- b === undefined
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
- : b === null
189
+ : a === null
187
190
  ? "null"
188
- : b.toString()
191
+ : a.toString()
192
+ ).localeCompare(
193
+ b === undefined
194
+ ? "undefined"
195
+ : b === null
196
+ ? "null"
197
+ : b.toString()
198
+ )
189
199
  )
190
- )
191
- .filter((value, index, self) => self.indexOf(value) === index)
192
- .map((value) => {
193
- if (!tempDataByCategory.includes(value)) {
194
- tempDataByCategory.push(value);
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
- tempCategoryFilter[item.key] = tempDataByCategory;
207
+ tempCategoryFilter[item.key] = tempDataByCategory;
208
+ }
199
209
  }
200
- }
201
- });
210
+ });
202
211
 
203
- header
204
- ?.filter((item) => item.type === "date")
205
- ?.map((item) => {
206
- if (dynamicTable?.setValue?.dateFilter?.[item.key]) {
207
- tempDateFilter[item.key] =
208
- dynamicTable?.setValue?.dateFilter[item.key];
209
- } else {
210
- tempDateFilter[item.key] = [];
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
- setCategoryFilter(tempCategoryFilter);
215
- setDateFilter(tempDateFilter);
216
- setIsReadyForDynamicValue(true);
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
- filter,
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] &&