pixel-react 1.10.10-0 → 1.10.10-1
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/lib/components/Excel/ExcelFile/ExcelFile.d.ts +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.esm.js +38 -9
- package/lib/index.esm.js.map +1 -1
- package/lib/index.js +38 -9
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/Excel/ExcelFile/ExcelFile.tsx +1 -1
- package/src/components/TableTree/TableTree.stories.tsx +1 -0
- package/src/components/TableTree/TableTree.tsx +49 -13
package/package.json
CHANGED
@@ -22,7 +22,9 @@ const TreeTable: React.FC<TreeTableProps> = ({
|
|
22
22
|
onAddCancel = () => {},
|
23
23
|
}) => {
|
24
24
|
const observerRef = useRef<IntersectionObserver | null>(null);
|
25
|
-
const
|
25
|
+
const isTriggeredAbove = useRef(false); // Track if pagination for "above" direction has been triggered
|
26
|
+
const isTriggeredBelow = useRef(false); // Track if pagination for "below" direction has been triggered
|
27
|
+
const isTriggeredOnce = useRef(false); // Ensure 2-second delay triggers only once
|
26
28
|
|
27
29
|
// Throttled version of loadMore
|
28
30
|
const throttledLoadMore = useRef(
|
@@ -45,6 +47,7 @@ const TreeTable: React.FC<TreeTableProps> = ({
|
|
45
47
|
const isLastResourceAbove = treeData[0]?.lastResource;
|
46
48
|
const isLastResourceBelow = treeData[treeData.length - 1]?.lastResource;
|
47
49
|
|
50
|
+
// Skip pagination if both last resources are present
|
48
51
|
if (isLastResourceAbove && isLastResourceBelow) return;
|
49
52
|
|
50
53
|
const observerCallback = (entries: IntersectionObserverEntry[]) => {
|
@@ -54,17 +57,18 @@ const TreeTable: React.FC<TreeTableProps> = ({
|
|
54
57
|
nodeId === 'ff-table-tree-last-node' ? 'below' : 'above';
|
55
58
|
|
56
59
|
if (entry.isIntersecting) {
|
57
|
-
|
58
|
-
|
59
|
-
(
|
60
|
-
(direction
|
61
|
-
|
62
|
-
|
63
|
-
|
60
|
+
// Trigger only once for each direction
|
61
|
+
if (direction === 'above' && !isTriggeredAbove.current) {
|
62
|
+
if (!isLastResourceAbove) {
|
63
|
+
throttledLoadMore(direction);
|
64
|
+
isTriggeredAbove.current = true;
|
65
|
+
}
|
66
|
+
} else if (direction === 'below' && !isTriggeredBelow.current) {
|
67
|
+
if (!isLastResourceBelow) {
|
68
|
+
throttledLoadMore(direction);
|
69
|
+
isTriggeredBelow.current = true;
|
70
|
+
}
|
64
71
|
}
|
65
|
-
} else {
|
66
|
-
// Remove node from triggered set when it goes out of view
|
67
|
-
triggeredNodesRef.current.delete(nodeId);
|
68
72
|
}
|
69
73
|
});
|
70
74
|
};
|
@@ -75,8 +79,40 @@ const TreeTable: React.FC<TreeTableProps> = ({
|
|
75
79
|
threshold: 0.1,
|
76
80
|
});
|
77
81
|
|
78
|
-
if
|
79
|
-
|
82
|
+
// Initial pagination trigger after 2 seconds if first or last node is in view inside the scroll container
|
83
|
+
const checkInitialPaginationTrigger = () => {
|
84
|
+
if (isTriggeredOnce.current) return;
|
85
|
+
|
86
|
+
const scrollContainerRect = scrollContainer.getBoundingClientRect();
|
87
|
+
const firstNodeRect = firstNode?.getBoundingClientRect();
|
88
|
+
const lastNodeRect = lastNode?.getBoundingClientRect();
|
89
|
+
|
90
|
+
// Check if the first node is inside the scroll container
|
91
|
+
const isFirstNodeInView =
|
92
|
+
firstNodeRect &&
|
93
|
+
firstNodeRect.top >= scrollContainerRect.top &&
|
94
|
+
firstNodeRect.bottom <= scrollContainerRect.bottom;
|
95
|
+
|
96
|
+
// Check if the last node is inside the scroll container
|
97
|
+
const isLastNodeInView =
|
98
|
+
lastNodeRect &&
|
99
|
+
lastNodeRect.top >= scrollContainerRect.top &&
|
100
|
+
lastNodeRect.bottom <= scrollContainerRect.bottom;
|
101
|
+
|
102
|
+
if (isFirstNodeInView || isLastNodeInView) {
|
103
|
+
isTriggeredOnce.current = true;
|
104
|
+
setTimeout(() => {
|
105
|
+
if (!isLastResourceAbove) observerRef.current?.observe(firstNode);
|
106
|
+
if (!isLastResourceBelow) observerRef.current?.observe(lastNode);
|
107
|
+
}, 2000); // Delay the first pagination trigger by 2 seconds
|
108
|
+
} else {
|
109
|
+
// Observe first and last node immediately
|
110
|
+
if (!isLastResourceAbove) observerRef.current?.observe(firstNode);
|
111
|
+
if (!isLastResourceBelow) observerRef.current?.observe(lastNode);
|
112
|
+
}
|
113
|
+
};
|
114
|
+
|
115
|
+
checkInitialPaginationTrigger();
|
80
116
|
|
81
117
|
return () => {
|
82
118
|
observerRef.current?.disconnect();
|