• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

UI5 / webcomponents-react / 23536655283
85%

Build:
DEFAULT BRANCH: main
Ran 25 Mar 2026 10:38AM UTC
Jobs 8
Files 429
Run time 2min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

25 Mar 2026 10:23AM UTC coverage: 84.809%. Remained the same
23536655283

push

github

web-flow
fix(AnalyticalTable): prevent empty table body flash on first render (#8375)

## Description

When an `AnalyticalTable` with `visibleRowCountMode="Auto"` mounts,
there is a brief but visible flash where the table headers and toolbar
are fully rendered while the body area is empty. After a frame the rows
appear, but the flicker is noticeable — especially in applications where
the table is rendered inside a layout that itself triggers re-layouts on
mount (e.g. an `ObjectPage` with `IconTabBar` mode).

### Root cause

`VirtualTableBodyContainer` needs the body `<div>` to be in the DOM
before the virtualizer can measure it and render rows. To enforce this,
it gates the row children behind an `isMounted` flag:

```tsx
const [isMounted, setIsMounted] = useState(false);

useEffect(() => {
  if (parentRef.current) {
    setIsMounted(true);
  }
}, [parentRef]);

// later in JSX:
{isMounted && children}
```

The problem is the choice of `useEffect`. React's `useEffect` runs
**after** the browser paints, which means every mount follows this
sequence:

1. React commits the component tree to the DOM — the body `<div
ref={parentRef}>` is in the document, but `isMounted` is still `false`,
so `children` (the rows) are not part of the tree.
2. The **browser paints** this state — the user sees a complete table
frame with an empty body.
3. Only now does `useEffect` fire, finding `parentRef.current` set and
calling `setIsMounted(true)`.
4. React re-renders with the rows included, the browser paints again —
the table is now complete.

Step 2 is the flash. It is a single frame, but it is consistently
reproducible on every mount.

### Fix

Replace `useEffect` with `useLayoutEffect`. Because `useLayoutEffect`
runs synchronously after DOM mutations but **before** the browser
paints, the ref check and state update happen in time for React to
include the rows in the very first paint. The user never sees an empty
body.

### Why this is safe

- `parentRef.current` is guaranteed t... (continued)

3511 of 4500 branches covered (78.02%)

Branch coverage included in aggregate %.

1 of 1 new or added line in 1 file covered. (100.0%)

6521 of 7329 relevant lines covered (88.98%)

114016.81 hits per line

Subprojects
ID Flag name Job ID Ran Files Coverage
1 playwright 23536655283.1 25 Mar 2026 10:39AM UTC 9
86.96
GitHub Action Run
2 main/src/internal 23536655283.2 25 Mar 2026 10:38AM UTC 348
15.24
GitHub Action Run
3 main/src/components 23536655283.3 25 Mar 2026 10:45AM UTC 349
81.07
GitHub Action Run
4 compat 23536655283.4 25 Mar 2026 10:38AM UTC 362
18.15
GitHub Action Run
5 cypress-commands 23536655283.5 25 Mar 2026 10:38AM UTC 347
14.95
GitHub Action Run
6 main/src/webComponents 23536655283.6 25 Mar 2026 10:38AM UTC 347
13.53
GitHub Action Run
7 base 23536655283.7 25 Mar 2026 10:39AM UTC 352
16.24
GitHub Action Run
8 charts 23536655283.8 25 Mar 2026 10:40AM UTC 408
24.78
GitHub Action Run
Source Files on build 23536655283
  • Tree
  • List 429
  • Changed 4
  • Source Changed 4
  • Coverage Changed 0
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #23536655283
  • a4fb3353 on github
  • Prev Build on gh-readonly-queue/main/pr-8380-32dd0b8a3705e533457a7289504389bf9b3d9137 (#23535904362)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc