@eml-payments/ui-kit 1.7.8 → 1.7.9

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.
@@ -0,0 +1,146 @@
1
+ import { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';
2
+ import { useReactTable, getCoreRowModel, getSortedRowModel, getPaginationRowModel, getGroupedRowModel, getExpandedRowModel, } from '@tanstack/react-table';
3
+ import { applyFlexSizes, getCheckboxSelectionColumn } from '../table.helpers';
4
+ import { usePaginationController } from './usePaginationController';
5
+ import { useUrlPaginationSync } from './useUrlPaginationSync';
6
+ import { useInfiniteScrolling } from './useInfiniteScrolling';
7
+ export function useTableController({ id, height, data, columns, checkboxSelection, checkboxPosition = 'start', paginationMode = 'client', sorting, onSortingChange, onSelectionChange, enableRowSelection, rowsPerPage = 10, isMultiRowSelection = true, selectedRowIds, rowIdKey = 'id', totalServerRows, onRefetch, showHeader = true, grouping, infiniteScroll, virtualization, }) {
8
+ const safeData = Array.isArray(data) ? data : [];
9
+ const stableGrouping = useMemo(() => grouping !== null && grouping !== void 0 ? grouping : [], [grouping]);
10
+ const parentScrollRef = useRef(null);
11
+ const loaderRef = useRef(null);
12
+ const columnVisibility = useMemo(() => {
13
+ return Object.fromEntries(stableGrouping.map((columnId) => [columnId, false]));
14
+ }, [stableGrouping]);
15
+ const [containerWidth, setContainerWidth] = useState(0);
16
+ useLayoutEffect(() => {
17
+ if (!parentScrollRef.current)
18
+ return;
19
+ const ro = new ResizeObserver(([entry]) => {
20
+ setContainerWidth(entry.contentRect.width);
21
+ });
22
+ ro.observe(parentScrollRef.current);
23
+ return () => ro.disconnect();
24
+ }, []);
25
+ const [tableColumns, setTableColumns] = useState(() => applyFlexSizes(columns !== null && columns !== void 0 ? columns : [], containerWidth, !!(virtualization === null || virtualization === void 0 ? void 0 : virtualization.enabled)));
26
+ const [internalSorting, setInternalSorting] = useState(sorting !== null && sorting !== void 0 ? sorting : []);
27
+ const [internalRowSelection, setInternalRowSelection] = useState(() => {
28
+ if (selectedRowIds) {
29
+ return selectedRowIds.reduce((acc, id) => {
30
+ acc[id] = true;
31
+ return acc;
32
+ }, {});
33
+ }
34
+ return {};
35
+ });
36
+ const { pageIndex, setPageIndex, pageSize, setPageSize } = useUrlPaginationSync(rowsPerPage, id);
37
+ const isInfinite = !!(infiniteScroll === null || infiniteScroll === void 0 ? void 0 : infiniteScroll.enabled);
38
+ const dataPages = useMemo(() => {
39
+ if (!isInfinite) {
40
+ return undefined;
41
+ }
42
+ return [{ rows: safeData }];
43
+ }, [isInfinite, safeData.length]);
44
+ const infiniteOpts = useMemo(() => infiniteScroll, [infiniteScroll]);
45
+ const virtualizationOpts = useMemo(() => virtualization, [virtualization]);
46
+ const { allRows, virtualizationEnabled, rowVirtualizer, hasNextPage } = useInfiniteScrolling({
47
+ dataPages,
48
+ flatData: data,
49
+ infiniteScroll: infiniteOpts,
50
+ virtualization: virtualizationOpts,
51
+ parentScrollRef,
52
+ loaderRef,
53
+ });
54
+ const dataForTable = useMemo(() => (virtualizationEnabled || isInfinite ? allRows : safeData), [virtualizationEnabled, isInfinite, allRows, safeData]);
55
+ const table = useReactTable({
56
+ data: dataForTable,
57
+ columns: tableColumns,
58
+ getRowId: (row) => String(row[rowIdKey]),
59
+ state: {
60
+ ...(isInfinite ? {} : { pagination: { pageIndex, pageSize } }),
61
+ sorting: sorting !== null && sorting !== void 0 ? sorting : internalSorting,
62
+ rowSelection: internalRowSelection,
63
+ grouping: stableGrouping,
64
+ columnVisibility,
65
+ },
66
+ getSortedRowModel: getSortedRowModel(),
67
+ getCoreRowModel: getCoreRowModel(),
68
+ getPaginationRowModel: !isInfinite && paginationMode === 'client' ? getPaginationRowModel() : undefined,
69
+ manualPagination: !isInfinite && paginationMode === 'server',
70
+ autoResetPageIndex: false,
71
+ pageCount: !isInfinite && paginationMode === 'server' ? Math.ceil((totalServerRows !== null && totalServerRows !== void 0 ? totalServerRows : 0) / pageSize) : undefined,
72
+ onPaginationChange: (updater) => {
73
+ if (isInfinite)
74
+ return;
75
+ const next = typeof updater === 'function' ? updater({ pageIndex, pageSize }) : updater;
76
+ setPageIndex(next.pageIndex);
77
+ setPageSize(next.pageSize);
78
+ },
79
+ onSortingChange: (updater) => {
80
+ const nextSorting = typeof updater === 'function' ? updater(sorting !== null && sorting !== void 0 ? sorting : internalSorting) : updater;
81
+ setInternalSorting(nextSorting);
82
+ onSortingChange === null || onSortingChange === void 0 ? void 0 : onSortingChange(nextSorting);
83
+ },
84
+ enableRowSelection: enableRowSelection !== null && enableRowSelection !== void 0 ? enableRowSelection : true,
85
+ onRowSelectionChange: (updater) => {
86
+ const newSelection = typeof updater === 'function' ? updater(internalRowSelection) : updater;
87
+ setInternalRowSelection(newSelection);
88
+ if (onSelectionChange) {
89
+ const selectedIdsArray = Object.keys(newSelection).filter((id) => newSelection[id]);
90
+ onSelectionChange(selectedIdsArray);
91
+ }
92
+ },
93
+ enableMultiRowSelection: isMultiRowSelection,
94
+ getGroupedRowModel: getGroupedRowModel(),
95
+ getExpandedRowModel: getExpandedRowModel(),
96
+ });
97
+ useEffect(() => {
98
+ if (paginationMode === 'none') {
99
+ setPageIndex(0);
100
+ }
101
+ }, [paginationMode, setPageIndex]);
102
+ const pagination = usePaginationController({
103
+ table,
104
+ paginationMode,
105
+ onRefetch,
106
+ });
107
+ const selectionColumn = useMemo(() => {
108
+ return checkboxSelection ? getCheckboxSelectionColumn(table) : null;
109
+ }, [checkboxSelection, table]);
110
+ useEffect(() => {
111
+ const normalized = applyFlexSizes(columns !== null && columns !== void 0 ? columns : [], containerWidth, !!(virtualization === null || virtualization === void 0 ? void 0 : virtualization.enabled));
112
+ let finalColumns;
113
+ if (checkboxSelection && selectionColumn) {
114
+ if (checkboxPosition === 'start') {
115
+ finalColumns = [selectionColumn, ...normalized];
116
+ }
117
+ else if (checkboxPosition === 'end') {
118
+ finalColumns = [...normalized, selectionColumn];
119
+ }
120
+ else {
121
+ finalColumns = normalized;
122
+ }
123
+ }
124
+ else {
125
+ finalColumns = normalized;
126
+ }
127
+ setTableColumns(finalColumns);
128
+ }, [columns, checkboxSelection, checkboxPosition, containerWidth, virtualization === null || virtualization === void 0 ? void 0 : virtualization.enabled]);
129
+ return {
130
+ table,
131
+ height,
132
+ showHeader,
133
+ grouping,
134
+ setPageSize,
135
+ setPageIndex,
136
+ sorting: sorting !== null && sorting !== void 0 ? sorting : internalSorting,
137
+ virtualizationEnabled,
138
+ rowVirtualizer,
139
+ hasNextPage,
140
+ parentScrollRef,
141
+ loaderRef,
142
+ infiniteScroll,
143
+ virtualization,
144
+ ...pagination,
145
+ };
146
+ }
@@ -1 +1,2 @@
1
1
  export * from '../config/uikitConfig';
2
+ export type { DateRange } from 'react-day-picker';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eml-payments/ui-kit",
3
- "version": "1.7.8",
3
+ "version": "1.7.9",
4
4
  "private": false,
5
5
  "description": "ARLO UIKit",
6
6
  "homepage": "https://github.com/EML-Payments/arlo.npm.uikit#readme",
@@ -74,7 +74,7 @@
74
74
  "clsx": "^2.1.1",
75
75
  "dayjs": "^1.11.19",
76
76
  "intl-tel-input": "^26.9.1",
77
- "lucide-react": "^0.577.0",
77
+ "lucide-react": "^1.8.0",
78
78
  "prettier": "^3.6.2",
79
79
  "react": ">=18.0.0",
80
80
  "react-day-picker": "^9.13.0",
Binary file
Binary file
Binary file
Binary file