Skip to content

Commit e385a97

Browse files
committed
fix: add initial measurement of elements in view, to ensure correct size after load
1 parent 4a1679e commit e385a97

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

packages/webui/src/client/lib/VirtualElement.tsx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ export function VirtualElement({
6565
}>): JSX.Element | null {
6666
const resizeObserverManager = ElementObserverManager.getInstance()
6767
const [inView, setInView] = useState(initialShow ?? false)
68+
const [waitForInitialLoad, setWaitForInitialLoad] = useState(true)
6869
const [isShowingChildren, setIsShowingChildren] = useState(inView)
6970

7071
const [measurements, setMeasurements] = useState<IElementMeasurements | null>(null)
@@ -199,6 +200,26 @@ export function VirtualElement({
199200
}, [ref, inView])
200201

201202
useEffect(() => {
203+
if (inView === true) {
204+
setIsShowingChildren(true)
205+
206+
// Schedule a measurement after a short delay
207+
if (waitForInitialLoad && ref) {
208+
const initialMeasurementTimeout = window.setTimeout(() => {
209+
const measurements = measureElement(ref, placeholderHeight)
210+
if (measurements) {
211+
setMeasurements(measurements)
212+
setWaitForInitialLoad(false)
213+
}
214+
}, 800)
215+
216+
return () => {
217+
window.clearTimeout(initialMeasurementTimeout)
218+
}
219+
}
220+
return
221+
}
222+
202223
let idleCallback: number | undefined
203224
let optimizeTimeout: number | undefined
204225

0 commit comments

Comments
 (0)