Changes since 25.0.0-alpha8
Breaking changes
-
Centralize hierarchy management server-side
Commit · Pull request · Issues 21876, 21877The PR refactors HierarchicalDataCommunicator so that hierarchy management (expanded items, hierarchical cache) is centralized on the server side instead of being shared between client and server. This makes the client a simple consumer of flattened data lists, which significantly reduces the client-side complexity and opens the door for introducing flat data providers to support fetching flattened data directly from the data source. Key changes HierarchyMapper and HierarchicalCommunicationController have been replaced with the new concept, Cache. This new class provides a system for storing data in a hierarchical structure while enabling access in a flattened format for client-side consumption. setRequestedRange and setParentRequestedRange have been replaced with a single setViewportRange which spans all hierarchy levels. Caveats setViewportRange does not currently remove items from Cache and KeyMapper when they move out of the viewport. However, the previous version also only removed items from KeyMapper while keeping them in HierarchyMapper, so item instances actually continued to remain in memory. I feel this could be optimized separately if needed. setViewportRange currently always sends the full viewport to the client even when some items are already present on the client-side. I plan to address this separately, see #21989 refresh(T item) currently also sends the full viewport on every item refresh. I plan to address this separately, see #21989 Test coverage The PR aims at providing test coverage for all core functionality and public APIs. Individual tests for internal APIs such as Cache will be added separately. The refactoring successfully passes all TreeGrid ITs, see #7676 Depends on refactor: remove deprecated HierarchicalDataCommunicator APIs #21965
Fixes
-
Fixed high CPU usage due to pending JS commands (#22024)
Commit · Pull request · IssueField "pendingJsInvocations" should be a Set instead of a List in order to avoid O(n^2) operations. This greatly improves performance in situations where many fields are updated constantly and the JS command queue becomes very large.
-
Support callpod user agent format
Commit · Pull request · Issues 21829, 21546 -
Do not throw when missing CSS in node_modules
Commit · Pull request · IssueA missing CSS file in
node_modules
should be reported but not stop the build eagerly, because Vite might be able to resolve that elsewhere (e. g., hoisted setup, plugins, etc). -
Run only one queued navigate() at a time
Commit · Pull requestThis fixes cases where the server sends multiple navigate() calls in the same response. There is currently no IT that would fail but this might very well resolve some edge/timing cases without ITs. This is needed also for React 19 where timing is slightly different and the current solution does not work.