@eml-payments/ui-kit 1.7.6 → 1.7.8

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.
Files changed (24) hide show
  1. package/dist/index.css +1 -1
  2. package/dist/src/components/PhoneInput/PhoneInput.js +1 -1
  3. package/dist/src/components/Table/StandardTable/useStandardTableController.js +17 -1
  4. package/dist/src/components/Table/hooks/useUrlPaginationSync.js +15 -5
  5. package/dist/src/components/Tooltip/Tooltip.stories.js +1 -1
  6. package/package.json +1 -1
  7. package/dist/index.d.cts +0 -488
  8. package/dist/index.d.ts +0 -488
  9. package/dist/src/components/Table/BaseTable/index.d.ts +0 -1
  10. package/dist/src/components/Table/BaseTable/index.js +0 -1
  11. package/dist/src/components/Table/Pagination/PaginationControls.d.ts +0 -3
  12. package/dist/src/components/Table/Pagination/PaginationControls.js +0 -22
  13. package/dist/src/components/Table/Pagination/PaginationControls.types.d.ts +0 -24
  14. package/dist/src/components/Table/Pagination/PaginationControls.types.js +0 -1
  15. package/dist/src/components/Table/Table.d.ts +0 -4
  16. package/dist/src/components/Table/Table.js +0 -93
  17. package/dist/src/components/Table/Table.stories.d.ts +0 -31
  18. package/dist/src/components/Table/Table.stories.js +0 -479
  19. package/dist/src/components/Table/hooks/useInfiniteScrolling.d.ts +0 -29
  20. package/dist/src/components/Table/hooks/useInfiniteScrolling.js +0 -96
  21. package/dist/src/components/Table/hooks/usePaginationController.d.ts +0 -16
  22. package/dist/src/components/Table/hooks/usePaginationController.js +0 -30
  23. package/dist/src/components/Table/hooks/useTableController.d.ts +0 -26
  24. package/dist/src/components/Table/hooks/useTableController.js +0 -146
@@ -1,96 +0,0 @@
1
- import { useEffect, useMemo, useRef } from 'react';
2
- import { useVirtualizer } from '@tanstack/react-virtual';
3
- export function useInfiniteScrolling(params) {
4
- var _a;
5
- const { dataPages, flatData, infiniteScroll, virtualization, parentScrollRef, loaderRef } = params;
6
- const isInfinite = !!(infiniteScroll === null || infiniteScroll === void 0 ? void 0 : infiniteScroll.enabled);
7
- const hasNextPage = !!(infiniteScroll === null || infiniteScroll === void 0 ? void 0 : infiniteScroll.hasNextPage);
8
- const isFetchingNextPage = !!(infiniteScroll === null || infiniteScroll === void 0 ? void 0 : infiniteScroll.isFetchingNextPage);
9
- const fetchNextPage = infiniteScroll === null || infiniteScroll === void 0 ? void 0 : infiniteScroll.fetchNextPage;
10
- const allRows = useMemo(() => {
11
- if (isInfinite && Array.isArray(dataPages)) {
12
- const byId = new Map();
13
- for (const p of dataPages) {
14
- for (const r of p.rows) {
15
- byId.set(String(r.id), r);
16
- }
17
- }
18
- return Array.from(byId.values());
19
- }
20
- return flatData !== null && flatData !== void 0 ? flatData : [];
21
- }, [isInfinite, dataPages, flatData]);
22
- const virtualizationEnabled = !!(virtualization === null || virtualization === void 0 ? void 0 : virtualization.enabled);
23
- const rowVirtualizer = useVirtualizer({
24
- count: allRows.length + (isInfinite && hasNextPage ? 1 : 0),
25
- getScrollElement: () => parentScrollRef.current,
26
- estimateSize: () => { var _a; return (_a = virtualization === null || virtualization === void 0 ? void 0 : virtualization.rowEstimate) !== null && _a !== void 0 ? _a : 48; },
27
- overscan: (_a = virtualization === null || virtualization === void 0 ? void 0 : virtualization.overscan) !== null && _a !== void 0 ? _a : 6,
28
- });
29
- const loadLockRef = useRef(false);
30
- const virtualItems = rowVirtualizer.getVirtualItems();
31
- const lastVirtualIndex = virtualItems.length ? virtualItems[virtualItems.length - 1].index : -1;
32
- const loaderIndex = allRows.length;
33
- useEffect(() => {
34
- if (!virtualizationEnabled || !isInfinite)
35
- return;
36
- if (!fetchNextPage || !hasNextPage || isFetchingNextPage)
37
- return;
38
- if (allRows.length === 0)
39
- return;
40
- if (lastVirtualIndex < loaderIndex || loadLockRef.current)
41
- return;
42
- loadLockRef.current = true;
43
- Promise.resolve(fetchNextPage()).finally(() => {
44
- loadLockRef.current = false;
45
- });
46
- }, [
47
- virtualizationEnabled,
48
- isInfinite,
49
- hasNextPage,
50
- isFetchingNextPage,
51
- fetchNextPage,
52
- lastVirtualIndex,
53
- loaderIndex,
54
- allRows.length,
55
- ]);
56
- useEffect(() => {
57
- var _a, _b;
58
- if (!isInfinite || virtualizationEnabled)
59
- return;
60
- if (!(loaderRef === null || loaderRef === void 0 ? void 0 : loaderRef.current) || !fetchNextPage)
61
- return;
62
- const rootMargin = `${(_a = infiniteScroll === null || infiniteScroll === void 0 ? void 0 : infiniteScroll.rootMarginPx) !== null && _a !== void 0 ? _a : 300}px`;
63
- const observer = new IntersectionObserver((entries) => {
64
- const entry = entries[0];
65
- if (entry.isIntersecting && hasNextPage && !isFetchingNextPage) {
66
- fetchNextPage();
67
- }
68
- }, {
69
- root: (_b = parentScrollRef.current) !== null && _b !== void 0 ? _b : null,
70
- rootMargin: `0px 0px ${rootMargin} 0px`,
71
- threshold: 0.01,
72
- });
73
- const el = loaderRef.current;
74
- observer.observe(el);
75
- return () => {
76
- observer.unobserve(el);
77
- observer.disconnect();
78
- };
79
- }, [
80
- isInfinite,
81
- virtualizationEnabled,
82
- hasNextPage,
83
- isFetchingNextPage,
84
- fetchNextPage,
85
- infiniteScroll === null || infiniteScroll === void 0 ? void 0 : infiniteScroll.rootMarginPx,
86
- parentScrollRef,
87
- loaderRef,
88
- ]);
89
- return {
90
- allRows,
91
- virtualizationEnabled,
92
- rowVirtualizer,
93
- hasNextPage,
94
- isFetchingNextPage,
95
- };
96
- }
@@ -1,16 +0,0 @@
1
- import type { Table } from '@tanstack/react-table';
2
- import { PaginationMode } from '../Table.types';
3
- interface UsePaginationControllerOptions<T> {
4
- table: Table<T>;
5
- paginationMode: PaginationMode;
6
- onRefetch?: (pageIndex: number, pageSize: number) => void;
7
- }
8
- export declare function usePaginationController<T>({ table, paginationMode, onRefetch }: UsePaginationControllerOptions<T>): {
9
- pageIndex: number;
10
- pageSize: number;
11
- canNextPage: boolean;
12
- canPrevPage: boolean;
13
- onNextPage: () => void;
14
- onPrevPage: () => void;
15
- };
16
- export {};
@@ -1,30 +0,0 @@
1
- import { useCallback, useEffect, useMemo } from 'react';
2
- export function usePaginationController({ table, paginationMode, onRefetch }) {
3
- const { pageIndex, pageSize } = table.getState().pagination;
4
- const canNextPage = table.getCanNextPage();
5
- const canPrevPage = table.getCanPreviousPage();
6
- const onNextPage = useCallback(() => {
7
- if (canNextPage) {
8
- table.nextPage();
9
- }
10
- }, [canNextPage, table]);
11
- const onPrevPage = useCallback(() => {
12
- if (canPrevPage) {
13
- table.previousPage();
14
- }
15
- }, [canPrevPage, table]);
16
- // Only refetch in server mode
17
- useEffect(() => {
18
- if (paginationMode === 'server' && onRefetch) {
19
- onRefetch(pageIndex, pageSize);
20
- }
21
- }, [paginationMode, pageIndex, pageSize, onRefetch]);
22
- return useMemo(() => ({
23
- pageIndex,
24
- pageSize,
25
- canNextPage,
26
- canPrevPage,
27
- onNextPage,
28
- onPrevPage,
29
- }), [pageIndex, pageSize, canNextPage, canPrevPage, onNextPage, onPrevPage]);
30
- }
@@ -1,26 +0,0 @@
1
- import { type SortingState } from '@tanstack/react-table';
2
- import type { TableProps } from '../Table.types';
3
- export declare function useTableController<T extends {
4
- id: string;
5
- }>({ id, height, data, columns, checkboxSelection, checkboxPosition, paginationMode, sorting, onSortingChange, onSelectionChange, enableRowSelection, rowsPerPage, isMultiRowSelection, selectedRowIds, rowIdKey, totalServerRows, onRefetch, showHeader, grouping, infiniteScroll, virtualization, }: TableProps<T>): {
6
- pageIndex: number;
7
- pageSize: number;
8
- canNextPage: boolean;
9
- canPrevPage: boolean;
10
- onNextPage: () => void;
11
- onPrevPage: () => void;
12
- table: import("@tanstack/table-core").Table<T>;
13
- height: string | number | undefined;
14
- showHeader: boolean;
15
- grouping: string[] | undefined;
16
- setPageSize: import("react").Dispatch<import("react").SetStateAction<number>>;
17
- setPageIndex: import("react").Dispatch<import("react").SetStateAction<number>>;
18
- sorting: SortingState;
19
- virtualizationEnabled: boolean;
20
- rowVirtualizer: import("@tanstack/virtual-core").Virtualizer<HTMLDivElement, Element> | undefined;
21
- hasNextPage: boolean;
22
- parentScrollRef: import("react").MutableRefObject<HTMLDivElement | null>;
23
- loaderRef: import("react").MutableRefObject<HTMLTableRowElement | null>;
24
- infiniteScroll: import("..").InfiniteScrollOptions | undefined;
25
- virtualization: import("..").VirtualizationOptions | undefined;
26
- };
@@ -1,146 +0,0 @@
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
- }