Skip to content

Commit 2133671

Browse files
authored
fix(ItemBase): size observer (#770)
1 parent 4239729 commit 2133671

File tree

2 files changed

+16
-12
lines changed

2 files changed

+16
-12
lines changed

.changeset/silver-laws-flash.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@cube-dev/ui-kit": patch
3+
---
4+
5+
Add size observer for ItemBase.

src/components/content/ItemBase/ItemBase.tsx

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import {
44
ForwardedRef,
55
forwardRef,
66
ReactNode,
7+
useCallback,
8+
useEffect,
79
useMemo,
810
useState,
911
} from 'react';
@@ -497,7 +499,7 @@ const ItemBase = <T extends HTMLElement = HTMLDivElement>(
497499
const mergedLabelRef = useCombinedRefs((labelProps as any)?.ref);
498500
const [isLabelOverflowed, setIsLabelOverflowed] = useState(false);
499501

500-
const checkLabelOverflow = () => {
502+
const checkLabelOverflow = useCallback(() => {
501503
const label = mergedLabelRef.current;
502504
if (!label) {
503505
setIsLabelOverflowed(false);
@@ -507,28 +509,25 @@ const ItemBase = <T extends HTMLElement = HTMLDivElement>(
507509
const hasOverflow = label.scrollWidth > label.clientWidth;
508510

509511
setIsLabelOverflowed(hasOverflow);
510-
};
512+
}, [mergedLabelRef]);
511513

512-
useLayoutEffect(() => {
514+
useEffect(() => {
513515
if (isAutoTooltipEnabled) {
514516
checkLabelOverflow();
515517
}
516-
}, [children, isAutoTooltipEnabled]);
518+
}, [children, isAutoTooltipEnabled, checkLabelOverflow]);
517519

518-
useLayoutEffect(() => {
520+
useEffect(() => {
519521
if (!isAutoTooltipEnabled) return;
520522

521523
const label = mergedLabelRef.current;
522524
if (!label) return;
523525

524-
// Initial check
525-
checkLabelOverflow();
526+
const resizeObserver = new ResizeObserver(checkLabelOverflow);
527+
resizeObserver.observe(label);
526528

527-
// const resizeObserver = new ResizeObserver(checkLabelOverflow);
528-
// resizeObserver.observe(label);
529-
530-
// return () => resizeObserver.disconnect();
531-
}, [mergedLabelRef.current, isAutoTooltipEnabled]);
529+
return () => resizeObserver.disconnect();
530+
}, [isAutoTooltipEnabled, checkLabelOverflow, children, mergedLabelRef]);
532531

533532
const finalLabelProps = useMemo(() => {
534533
return {

0 commit comments

Comments
 (0)