|
5 | 5 |
|
6 | 6 | import React from 'react'; |
7 | 7 | import { composeRef } from 'rc-util/lib/ref'; |
8 | | -import findDOMNode from 'rc-util/lib/Dom/findDOMNode'; |
9 | 8 | import { alignElement, alignPoint } from 'dom-align'; |
10 | 9 | import addEventListener from 'rc-util/lib/Dom/addEventListener'; |
11 | 10 |
|
@@ -66,7 +65,7 @@ const Align: React.RefForwardingComponent<RefAlign, AlignProps> = ( |
66 | 65 | const [forceAlign, cancelForceAlign] = useBuffer(() => { |
67 | 66 | const { disabled: latestDisabled, target: latestTarget } = forceAlignPropsRef.current; |
68 | 67 | if (!latestDisabled && latestTarget) { |
69 | | - const source = findDOMNode<HTMLElement>(nodeRef.current); |
| 68 | + const source = nodeRef.current; |
70 | 69 |
|
71 | 70 | let result: AlignResult; |
72 | 71 | const element = getElement(latestTarget); |
@@ -102,10 +101,20 @@ const Align: React.RefForwardingComponent<RefAlign, AlignProps> = ( |
102 | 101 | const resizeMonitor = React.useRef<MonitorRef>({ |
103 | 102 | cancel: () => {}, |
104 | 103 | }); |
| 104 | + // Listen for source updated |
| 105 | + const sourceResizeMonitor = React.useRef<MonitorRef>({ |
| 106 | + cancel: () => {}, |
| 107 | + }); |
105 | 108 | React.useEffect(() => { |
106 | 109 | const element = getElement(target); |
107 | 110 | const point = getPoint(target); |
108 | 111 |
|
| 112 | + if (nodeRef.current !== sourceResizeMonitor.current.element) { |
| 113 | + sourceResizeMonitor.current.cancel(); |
| 114 | + sourceResizeMonitor.current.element = nodeRef.current; |
| 115 | + sourceResizeMonitor.current.cancel = monitorResize(nodeRef.current, forceAlign); |
| 116 | + } |
| 117 | + |
109 | 118 | if (cacheRef.current.element !== element || !isSamePoint(cacheRef.current.point, point)) { |
110 | 119 | forceAlign(); |
111 | 120 |
|
@@ -144,6 +153,7 @@ const Align: React.RefForwardingComponent<RefAlign, AlignProps> = ( |
144 | 153 | React.useEffect( |
145 | 154 | () => () => { |
146 | 155 | resizeMonitor.current.cancel(); |
| 156 | + sourceResizeMonitor.current.cancel(); |
147 | 157 | if (winResizeRef.current) winResizeRef.current.remove(); |
148 | 158 | cancelForceAlign(); |
149 | 159 | }, |
|
0 commit comments