next-helios-fe 1.8.128 → 1.8.130

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.128",
3
+ "version": "1.8.130",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -3,16 +3,19 @@ import React, { useState, useEffect, useRef, useMemo } from "react";
3
3
  import { Icon } from "@iconify/react";
4
4
  import * as xlsx from "xlsx";
5
5
  import dayjs from "dayjs";
6
- import { Form, Button, Dropdown, Tooltip } from "../../components";
6
+ import utc from "dayjs/plugin/utc";
7
+ import { Form, Button, Dropdown, Tooltip, Calendar } from "../../components";
7
8
  import { Action, type ActionProps } from "./action";
8
9
 
10
+ dayjs.extend(utc);
11
+
9
12
  interface TableProps {
10
13
  title?: string;
11
14
  header: {
12
15
  title: string;
13
16
  key: string;
14
17
  defaultHide?: boolean;
15
- type?: "basic" | "category" | string;
18
+ type?: "basic" | "category" | "date" | string;
16
19
  render?: (item: any) => React.ReactNode;
17
20
  }[];
18
21
  data: {
@@ -79,11 +82,13 @@ interface TableProps {
79
82
  maxRow: number;
80
83
  filter: any[];
81
84
  categoryFilter: any[];
85
+ dateFilter: any[];
82
86
  sortBy: any;
83
87
  }) => void;
84
88
  setValue?: {
85
89
  totalData?: number;
86
90
  categoryFilter?: { [key: string]: (string | number)[] };
91
+ dateFilter?: { [key: string]: any[] };
87
92
  };
88
93
  };
89
94
  }
@@ -107,6 +112,7 @@ export const Table: TableComponentProps = ({
107
112
  const [search, setSearch] = useState<string>("");
108
113
  const [filter, setFilter] = useState<any[]>([]);
109
114
  const [categoryFilter, setCategoryFilter] = useState<any>({});
115
+ const [dateFilter, setDateFilter] = useState<any>({});
110
116
  const [maxRow, setMaxRow] = useState<number>(options?.maxRow || 10);
111
117
  const [page, setPage] = useState<number>(1);
112
118
  const [selected, setSelected] = useState<
@@ -155,6 +161,7 @@ export const Table: TableComponentProps = ({
155
161
 
156
162
  if (data.length !== 0) {
157
163
  const tempCategoryFilter: any = {};
164
+ const tempDateFilter: any = {};
158
165
 
159
166
  header
160
167
  ?.filter((item) => item.type === "category")
@@ -192,7 +199,19 @@ export const Table: TableComponentProps = ({
192
199
  }
193
200
  });
194
201
 
202
+ header
203
+ ?.filter((item) => item.type === "date")
204
+ ?.map((item) => {
205
+ if (dynamicTable?.setValue?.dateFilter?.[item.key]) {
206
+ tempDateFilter[item.key] =
207
+ dynamicTable?.setValue?.dateFilter[item.key];
208
+ } else {
209
+ tempDateFilter[item.key] = [];
210
+ }
211
+ });
212
+
195
213
  setCategoryFilter(tempCategoryFilter);
214
+ setDateFilter(tempDateFilter);
196
215
  setIsReadyForDynamicValue(true);
197
216
  }
198
217
  }, [data, dynamicTable?.setValue?.categoryFilter]);
@@ -272,6 +291,24 @@ export const Table: TableComponentProps = ({
272
291
  item[headerItem.key as keyof typeof item]
273
292
  );
274
293
  });
294
+ })
295
+ ?.filter((item) => {
296
+ if (
297
+ Object.keys(dateFilter)?.some(
298
+ (dateItem) => dateFilter[dateItem].length !== 0
299
+ )
300
+ ) {
301
+ return Object.keys(dateFilter)
302
+ ?.filter((dateItem) => dateFilter[dateItem].length !== 0)
303
+ ?.every((dateItem) => {
304
+ return (
305
+ dayjs(item[dateItem]).isAfter(dateFilter[dateItem][0]) &&
306
+ dayjs(item[dateItem]).isBefore(dateFilter[dateItem][1])
307
+ );
308
+ });
309
+ } else {
310
+ return item;
311
+ }
275
312
  });
276
313
 
277
314
  if (sortBy?.column === "") {
@@ -297,7 +334,7 @@ export const Table: TableComponentProps = ({
297
334
  });
298
335
  }
299
336
  }
300
- }, [header, data, filter, categoryFilter, search, sortBy]);
337
+ }, [header, data, filter, categoryFilter, dateFilter, search, sortBy]);
301
338
 
302
339
  useEffect(() => {
303
340
  if (
@@ -326,6 +363,7 @@ export const Table: TableComponentProps = ({
326
363
  maxRow,
327
364
  filter,
328
365
  categoryFilter,
366
+ dateFilter,
329
367
  sortBy,
330
368
  })
331
369
  ) {
@@ -336,6 +374,7 @@ export const Table: TableComponentProps = ({
336
374
  maxRow,
337
375
  filter,
338
376
  categoryFilter,
377
+ dateFilter,
339
378
  sortBy,
340
379
  });
341
380
  setDynamicTableValueCopy({
@@ -345,6 +384,7 @@ export const Table: TableComponentProps = ({
345
384
  maxRow,
346
385
  filter,
347
386
  categoryFilter,
387
+ dateFilter,
348
388
  sortBy,
349
389
  });
350
390
  }
@@ -358,6 +398,7 @@ export const Table: TableComponentProps = ({
358
398
  maxRow,
359
399
  filter,
360
400
  categoryFilter,
401
+ dateFilter,
361
402
  sortBy,
362
403
  ]);
363
404
 
@@ -367,7 +408,9 @@ export const Table: TableComponentProps = ({
367
408
  return (
368
409
  <th
369
410
  key={item.key}
370
- className="whitespace-nowrap bg-secondary-bg px-4 py-2 text-left font-medium"
411
+ className={`whitespace-nowrap bg-secondary-bg px-4 py-2 text-left font-medium ${
412
+ item.type === "date" && "min-w-56"
413
+ }`}
371
414
  >
372
415
  <div className="flex flex-col">
373
416
  <div className="flex items-center gap-2">
@@ -489,6 +532,50 @@ export const Table: TableComponentProps = ({
489
532
  </Dropdown>
490
533
  </div>
491
534
  )}
535
+ {item?.type === "date" && (
536
+ <div className="font-normal">
537
+ <Dropdown
538
+ placement="bottom-end"
539
+ dismissOnClick={false}
540
+ trigger={
541
+ <button
542
+ type="button"
543
+ className="flex items-center rounded-full hover:bg-secondary-light"
544
+ >
545
+ <Icon icon="akar-icons:calendar" />
546
+ </button>
547
+ }
548
+ >
549
+ <div className="flex flex-col gap-2">
550
+ <Calendar
551
+ options={{ enableSelectRange: true }}
552
+ value={dateFilter[item.key]}
553
+ onChange={(e) => {
554
+ const tempDateFilter = { ...dateFilter };
555
+
556
+ tempDateFilter[item.key] = e;
557
+
558
+ setDateFilter(tempDateFilter);
559
+ }}
560
+ />
561
+ {dateFilter[item.key]?.length !== 0 && (
562
+ <Button
563
+ options={{ variant: "danger", position: "center" }}
564
+ onClick={() => {
565
+ const tempDateFilter = { ...dateFilter };
566
+
567
+ tempDateFilter[item.key] = [];
568
+
569
+ setDateFilter(tempDateFilter);
570
+ }}
571
+ >
572
+ Remove Filter
573
+ </Button>
574
+ )}
575
+ </div>
576
+ </Dropdown>
577
+ </div>
578
+ )}
492
579
  </div>
493
580
  {options?.toolbar?.columnSearch?.show !== false && (
494
581
  <div
@@ -496,17 +583,47 @@ export const Table: TableComponentProps = ({
496
583
  item?.type === "category" && "invisible"
497
584
  }`}
498
585
  >
499
- <Icon
500
- icon="ic:round-search"
501
- className="absolute text-sm text-disabled"
502
- />
586
+ {item.type !== "date" && (
587
+ <Icon
588
+ icon="ic:round-search"
589
+ className="absolute text-sm text-disabled"
590
+ />
591
+ )}
503
592
  <input
504
593
  type="search"
505
- className="w-full border-x-0 border-b border-t-0 border-default bg-secondary-bg px-6 pb-0.5 pt-0 text-sm font-normal placeholder:translate-x-0 placeholder:text-silent placeholder:duration-300 focus:border-primary-dark focus:outline-none focus:ring-0 focus:placeholder:translate-x-1 disabled:bg-secondary-light disabled:text-disabled [&::-webkit-search-cancel-button]:appearance-none"
594
+ className={`w-full border-x-0 border-t-0 border-default bg-secondary-bg pb-0.5 pt-0 text-sm font-normal placeholder:translate-x-0 placeholder:text-silent placeholder:duration-300 focus:border-primary-dark focus:outline-none focus:ring-0 focus:placeholder:translate-x-1 [&::-webkit-search-cancel-button]:appearance-none ${
595
+ item.type !== "date" ? "px-6 border-b" : "border-b-0"
596
+ }`}
506
597
  placeholder="Search..."
598
+ disabled={item.type === "date"}
507
599
  value={
508
- filter?.find((filterItem) => filterItem.key === item.key)
509
- ?.value || ""
600
+ item.type !== "date"
601
+ ? filter?.find(
602
+ (filterItem) => filterItem.key === item.key
603
+ )?.value || ""
604
+ : dateFilter[item.key]?.length !== 0
605
+ ? `${
606
+ dayjs(dateFilter[item.key]?.[0])
607
+ .utc()
608
+ .local()
609
+ .format("MMM YYYY") ===
610
+ dayjs(dateFilter[item.key]?.[1])
611
+ .utc()
612
+ .local()
613
+ .format("MMM YYYY")
614
+ ? dayjs(dateFilter[item.key]?.[0])
615
+ .utc()
616
+ .local()
617
+ .format("DD")
618
+ : dayjs(dateFilter[item.key]?.[0])
619
+ .utc()
620
+ .local()
621
+ .format("DD MMM YYYY")
622
+ } - ${dayjs(dateFilter[item.key]?.[1])
623
+ .utc()
624
+ .local()
625
+ .format("DD MMM YYYY")}`
626
+ : "-"
510
627
  }
511
628
  onChange={(e) => {
512
629
  setFilter(
@@ -427,7 +427,7 @@ button.rbc-input::-moz-focus-inner {
427
427
  z-index: 5;
428
428
  border: 1px solid var(--border-color-default);
429
429
  border-radius: 6px;
430
- background-color: var(--background-primary);
430
+ background-color: var(--background-secondary);
431
431
  -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.25);
432
432
  box-shadow: 0 5px 15px rgba(0, 0, 0, 0.25);
433
433
  padding: 10px;