Frontmatter
| id | 8907 |
| title | Regression: LoadMask no longer showing in Big Data Grid example |
| state | Closed |
| labels | bugairegression |
| assignees | tobiu |
| createdAt | Jan 30, 2026, 10:07 AM |
| updatedAt | Jan 30, 2026, 10:08 AM |
| githubUrl | https://github.com/neomjs/neo/issues/8907 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | null |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Jan 30, 2026, 10:08 AM |
Regression: LoadMask no longer showing in Big Data Grid example
tobiu assigned to @tobiu on Jan 30, 2026, 10:08 AM

tobiu
Jan 30, 2026, 10:08 AM
Input from Gemini 3 Pro:
✦ I have applied the fix to
examples/grid/bigData/ControlsContainer.mjsby introducing ame.timeout(5)yield. This ensures the VDOM update has time to dispatch the 'Loading' state before the App Worker is blocked by the heavy data generation process.Changes committed in
0fe6cd300.
tobiu closed this issue on Jan 30, 2026, 10:08 AM
Description
The "Is Loading" mask in the Big Data Grid example (
examples/grid/bigData) stopped appearing during heavy operations (e.g., changing "Amount Rows" or "Amount Columns").Root Cause
Recent changes in
src/mixin/VdomLifecycle.mjsintroduced anawait new Promise(resolve => setTimeout(resolve, 1));insideexecuteVdomUpdate. This forces the VDOM update process to yield to the macrotask queue.In
examples/grid/bigData/ControlsContainer.mjs, the code setsisLoading = 'Is Loading'and immediately triggers a heavy synchronous operation (e.g.,grid.store.amountRows = ...).Because the App Worker is single-threaded, the synchronous data generation operation blocks the event loop. The
setTimeoutcallback inexecuteVdomUpdateis starved until the heavy operation completes, causing the "Loading" mask update to be sent too late (after the work is already done).Fix
Manually yield execution in
ControlsContainer.mjsafter setting the loading state but before triggering the heavy operation. This allows the VDOM update macrotask to run and flush the mask state to the DOM.Impact
examples/grid/bigData/ControlsContainer.mjsProposed Changes
Add
await me.timeout(5);in:onAmountColumnsChangeonAmountRowsChangeonFilterFieldChangeonControlsToggleButtonClick(already present, ensuring consistency)Verification: User has verified the fix locally.