Form: implement relayouting instead of full rerender on dimension change#32728
Open
pharret31 wants to merge 3 commits intoDevExpress:26_1from
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
This pull request implements a performance optimization for the DevExtreme Form widget by replacing full rerenders with lightweight relayouting when dimension changes occur (e.g., responsive screen factor changes). Instead of destroying and recreating all widgets, the form now updates only the ResponsiveBox layout and CSS classes, preserving editor instances and their state.
Changes:
- Introduced a relayouting code path that bypasses full rerender when dimension changes trigger a refresh
- Refactored group column count CSS class management into reusable methods for both initial render and updates
- Added helper methods in LayoutManager for updating ResponsiveBox layout and managing CSS classes without full rerender
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| packages/devextreme/js/__internal/ui/form/form.ts | Added _isDimensionChangeRefresh flag, _updateLayoutsOnDimensionChange(), _applyGroupColCount(), and _updateGroupsColCount() methods to support relayouting. Modified _refresh() to use relayouting path for dimension changes. Refactored group column count class application into reusable method. |
| packages/devextreme/js/__internal/ui/form/form.layout_manager.ts | Added updateResponsiveBoxLayout() method to update ResponsiveBox without full rerender. Added helper methods _getLocationBoundaryFlags(), _getLocationCssClasses(), _getLayoutManagerItemByLocation(), and _updateItemsCssClasses() for CSS class management. Improved type safety by changing _cashedColCount type and removing ts-expect-error comments. Introduced Location and LocationBoundaryFlags type definitions. |
| packages/devextreme/testing/tests/DevExpress.ui.widgets.form/form.tests.js | Updated test expectations to verify that editors are preserved (not reinitialized) during dimension changes, confirming the relayouting optimization works correctly. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.