Skip to content

Commit b83dfff

Browse files
authored
fix: restore hasBeenAttached on resync (#19023) (#19068)
Fixes #19023
1 parent 85f4a25 commit b83dfff

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

flow-server/src/main/java/com/vaadin/flow/internal/StateNode.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -456,7 +456,10 @@ protected void prepareForResync() {
456456
stateNode.hasBeenAttached = false;
457457
stateNode.hasBeenDetached = false;
458458
});
459-
visitNodeTreeBottomUp(sn -> sn.fireAttachListeners(true));
459+
visitNodeTreeBottomUp(sn -> {
460+
sn.hasBeenAttached = true;
461+
sn.fireAttachListeners(true);
462+
});
460463
}
461464

462465
/**

flow-server/src/test/java/com/vaadin/flow/internal/StateTreeTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -725,9 +725,13 @@ public void prepareForResync_nodeHasAttachAndDetachListeners_treeIsDirtyAndListe
725725
tree.collectChanges(c -> {
726726
});
727727
Assert.assertEquals(0, tree.collectDirtyNodes().size());
728+
Assert.assertTrue(node2.isClientSideInitialized());
729+
Assert.assertTrue(node2.isAttached());
728730

729731
tree.getRootNode().prepareForResync();
730732

733+
Assert.assertFalse(node2.isClientSideInitialized());
734+
Assert.assertTrue(node2.isAttached());
731735
Assert.assertEquals(1, attachCount.get());
732736
Assert.assertEquals(1, detachCount.get());
733737

@@ -743,6 +747,16 @@ public void prepareForResync_nodeHasAttachAndDetachListeners_treeIsDirtyAndListe
743747
Assert.assertTrue(
744748
remaining.hasFeature(PushConfigurationParametersMap.class));
745749

750+
tree.collectChanges(change -> {
751+
});
752+
Assert.assertTrue(node2.isClientSideInitialized());
753+
754+
// Make sure detach listener is called when a resynced node is
755+
// eventually detached
756+
// In practice checks that node2.hasBeenAttached = true
757+
node2.setParent(null);
758+
Assert.assertEquals("Detach listener was not called on final detach", 2,
759+
detachCount.get());
746760
}
747761

748762
@Test

0 commit comments

Comments
 (0)