Ensure recalculateColumnWidths works with refreshAll. (#11934)
Column widths shouldn't be calculated between the clearing of cache and
re-populating it, but be delayed until the cache has some content again.
The calculations should only be triggered immediately if no rows are
expected.
Fixes #9996
If first attempt at scrolling doesn't succeed it's unlikely that
continuing to wait is going to make any difference. Cache should be
populated before triggering any actions that depend on the row being
visible, otherwise it should be enough to trust that scrollToRow
actually scrolls to row and once scrolling is done the row is as much in
view as it's going to get. This way we don't get into a situation where
Editor never opens because it's still waiting for that one last pixel
that can't be achieved thanks to browser zoom causing rounding errors.
Continues on #11672
Check actual Grid selection instead of relying on allSelected flag. (#11787)
The checkbox for selecting all rows only selects all the rows that have
not been filtered out. Changing the filtering does not change the
selection or the checkbox state so assuming that all rows are selected
simply because the checkbox has been checked cannot work.
Fixes #11479
Updated row and spacer handling for Escalator (#11438)
Updated row and spacer handling for Escalator.
Main changes:
- Spacers are only maintained and checked for rows that have DOM
representation, and not at all if there is no details generator. This
gives notable performance improvements to some particularly large Grids
- Escalator no longer tries to trim away any rows that don't fit within
the viewport just because a details row gets opened in Grid. This leads
to some increase in simultaneous DOM elements, but simplifies the logic
considerably. For example opening or closing details rows doesn't
require checking the overall content validity beyond the details row
itself anymore, but some repositioning at most. There are also no longer
any orphaned spacers without corresponding DOM rows.
- Spacers are better integrated into the overall position calculations.
- Some public methods that are no longer used by Escalator or have
changed functionality or order of operations. Any extending classes that
tap into row, spacer, or scroll position handling are likely to need
reworking after this update.
- Auto-detecting row height is delayed until Escalator is both attached
and displayed.
Improvements to detail row index handling. (#11345)
- Escalator should notify when an existing details row is moved to a new
index.
- Grid and DetailsManagerConnector should update their internal indexing
when details manager index changes in Escalator.
Add more context information to criteriaScript in GridDropTargetConnector (#11321)
* Add more context information to criteriaScript in GridDropTargetConnector
When using drag and drop in Grids and TreeGrids a criteriaScript can be specified.
However, this criteriaScript only gets an event as input parameter.
It would be helpful if the criteriaScript would get more information:
- the DropLocation
- the targetElement which is used as a base for the DropLocation
This change provides a protected method in DropTargetExtensionConnector
which decides, if the drop is allowed by the criteriaScript.
This method is overriden in GridDropTargetConnector to
provide the both parameters dropLocation and targetElement.
* add Test UI for criteriaScript with targetElement and dropLocation
* add some description for the Test UI
Revert change to fix issue on removing Grid with components (#11224)
* Test case for removing Grid with components
* This reverts commit b2745dc14f.
Add test case to address the issue with removing gird with components;
Current situation: the grid cannot be removed and client-side throw an error.
fixes: Revert the corresponding change, as it didn't address any issue which was fixed.
* Rename HierarchicalDataCommunicator#getMapper to getHierarchyMapper
* Make rpc field in Notification private
* Change DropIndexCalculator.ALWAYS_DROP_TO_END to a generic static method
* Move EditorImpl#editRow documentation to the interface level
* Correct GridDragEndEvent, GridDragStartEvent constructor javadocs
* Revert SharedState.registeredEventListeners to a Set
* Rename GridDropTarget dropAllowedOnSortedGridRows
* Rename ColumnState.contentMode to tooltipContentMode
Add new drop mode ON_GRID for GridDropTarget (#10296)
* Add new drop mode ON_GRID for GridDropTarget
Also adds a way to not accept drops on rows when the user has sorted the grid.
This way the bad UX can be avoided for showing the drop indicator for the wrong place when the grid has been sorted.
This has not been made default behavior to GridDropTarget since it would change behavior compared to 8.1.
Instead if is triggerable via API in GridDropTarget.
* Refactor sorted grid drop logic to server side
* Block setDropMode calls
Blocking setDropMode set values if the grid has been sorted and drop on
sorted rows is not allowed. The value is used once the grid is not sorted
anymore or the drops are allowed on sorted rows.
In some places, getWidget() is called many times, and I believe this can
have a litte performance improvement, since in some cases
super.getWidget() is called more than once.