Do not send popups with unresolvable anchors to Scout JS#2032
Merged
fschinkel merged 1 commit intoreleases/24.2from Mar 4, 2026
Merged
Conversation
ee9b562 to
da4a4f6
Compare
4eafc8e to
78a5f4b
Compare
cguglielmo
reviewed
Mar 2, 2026
The PopupManager contains a set of popups, which themselves may contain anchors. When a JsonPopup builds its json it may happen that there is no json adapter for the anchor of the popup, because the anchor is e.g. part of an outline that is currently not the active outline. The JsonPopup can not leave its anchor property empty as a popup without anchor will be rendered directly which would be incorrect. In addition, the JsonPopup can not return null when creating its json as this leads to other errors. Therefore, the JsonPopupManager needs to filter its set of popups and ensure that no popup containing an anchor without a json adapter is sent to Scout JS. To ensure correct updates of its property "popups" the JsonPopupManager needs to observe all current anchors of its popups and perform an update of its property "popups" if json adapters are created for one of these observed anchors. This is relevant e.g. when the JsonPopupManager is processed before the json adapter of one of its popups anchors is processed which may happen e.g. when the browser is reloaded. As the PopupManager.ts only renders newly added popups and as a formerly rendered popup will be removed when its anchor is removed, it is not necessary to listen on json adapter disposals. The only time the PopupManager.ts will try to rerender these popups with potentially unavailable anchors is when the browser is reloaded and in this case the property "popups" will be sent again and is therefore correctly filtered. Additionally, close a Popup if its anchor is disposed to prevent memory leaks. Some popup anchors may be part of tiles. Therefore, reposition those popups after the layout animation of the TileGrid is done. 448950
78a5f4b to
2380624
Compare
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.
The PopupManager contains a set of popups, which themselves may contain anchors. When a JsonPopup builds its json it may happen that there is no json adapter for the anchor of the popup, because the anchor is e.g. part of an outline that is currently not the active outline. The JsonPopup can not leave its anchor property empty as a popup without anchor will be rendered directly which would be incorrect. In addition, the JsonPopup can not return null when creating its json as this leads to other errors.
Therefore, the JsonPopupManager needs to filter its set of popups and ensure that no popup containing an anchor without a json adapter is sent to Scout JS. To ensure correct updates of its property "popups" the JsonPopupManager needs to observe all current anchors of its popups and perform an update of its property "popups" if json adapters are created for one of these observed anchors. This is relevant e.g. when the JsonPopupManager is processed before the json adapter of one of its popups anchors is processed which may happen e.g. when the browser is reloaded.
As the PopupManager.ts only renders newly added popups and as a formerly rendered popup will be removed when its anchor is removed, it is not necessary to listen on json adapter disposals. The only time the PopupManager.ts will try to rerender these popups with potentially unavailable anchors is when the browser is reloaded and in this case the property "popups" will be sent again and is therefore correctly filtered.
Additionally, close a Popup if its anchor is disposed to prevent memory leaks.
Some popup anchors may be part of tiles. Therefore, reposition those popups after the layout animation of the TileGrid is done.
448950