Commit a96a0f3
authored
Fix fragmentInstance#compareDocumentPosition nesting and portal cases (#34069)
Found a couple of issues while integrating
FragmentInstance#compareDocumentPosition into Fabric.
1. Basic checks of nested host instances were inaccurate. For example,
checking the first child of the first child of the Fragment would not
return CONTAINED_BY.
2. Then fixing that logic exposed issues with Portals. The DOM
positioning relied on the assumption that the first and last top-level
children were in the same order as the Fiber tree. I added additional
checks against the parent's position in the DOM, and special cased a
portaled Fragment by getting its DOM parent from the child instance,
rather than taking the instance from the Fiber return. This should be
accurate in more cases. Though its still a guess and I'm not sure yet
I've covered every variation of this. Portals are hard to deal with and
we may end up having to push more results towards
IMPLEMENTATION_SPECIFIC if accuracy is an issue.1 parent 02a8811 commit a96a0f3
File tree
3 files changed
+219
-44
lines changed- packages
- react-dom-bindings/src/client
- react-dom/src/__tests__
- react-reconciler/src
3 files changed
+219
-44
lines changedLines changed: 56 additions & 16 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
38 | 38 | | |
39 | 39 | | |
40 | 40 | | |
41 | | - | |
| 41 | + | |
42 | 42 | | |
43 | 43 | | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
44 | 51 | | |
45 | 52 | | |
46 | 53 | | |
| |||
63 | 70 | | |
64 | 71 | | |
65 | 72 | | |
66 | | - | |
67 | | - | |
68 | | - | |
69 | | - | |
70 | | - | |
71 | | - | |
72 | | - | |
73 | 73 | | |
74 | 74 | | |
75 | 75 | | |
| |||
3052 | 3052 | | |
3053 | 3053 | | |
3054 | 3054 | | |
| 3055 | + | |
| 3056 | + | |
3055 | 3057 | | |
3056 | 3058 | | |
3057 | 3059 | | |
3058 | 3060 | | |
3059 | 3061 | | |
3060 | | - | |
3061 | | - | |
3062 | 3062 | | |
3063 | 3063 | | |
3064 | 3064 | | |
| |||
3095 | 3095 | | |
3096 | 3096 | | |
3097 | 3097 | | |
| 3098 | + | |
| 3099 | + | |
| 3100 | + | |
| 3101 | + | |
| 3102 | + | |
| 3103 | + | |
| 3104 | + | |
| 3105 | + | |
| 3106 | + | |
| 3107 | + | |
| 3108 | + | |
| 3109 | + | |
| 3110 | + | |
| 3111 | + | |
| 3112 | + | |
| 3113 | + | |
| 3114 | + | |
| 3115 | + | |
| 3116 | + | |
| 3117 | + | |
3098 | 3118 | | |
3099 | 3119 | | |
| 3120 | + | |
| 3121 | + | |
| 3122 | + | |
| 3123 | + | |
| 3124 | + | |
| 3125 | + | |
| 3126 | + | |
| 3127 | + | |
| 3128 | + | |
| 3129 | + | |
| 3130 | + | |
| 3131 | + | |
| 3132 | + | |
| 3133 | + | |
| 3134 | + | |
| 3135 | + | |
3100 | 3136 | | |
3101 | | - | |
3102 | | - | |
3103 | | - | |
3104 | | - | |
| 3137 | + | |
| 3138 | + | |
| 3139 | + | |
3105 | 3140 | | |
3106 | 3141 | | |
| 3142 | + | |
| 3143 | + | |
| 3144 | + | |
3107 | 3145 | | |
3108 | 3146 | | |
3109 | 3147 | | |
| |||
3141 | 3179 | | |
3142 | 3180 | | |
3143 | 3181 | | |
3144 | | - | |
| 3182 | + | |
| 3183 | + | |
| 3184 | + | |
3145 | 3185 | | |
3146 | 3186 | | |
3147 | 3187 | | |
3148 | 3188 | | |
3149 | 3189 | | |
3150 | 3190 | | |
3151 | 3191 | | |
3152 | | - | |
| 3192 | + | |
3153 | 3193 | | |
3154 | 3194 | | |
3155 | 3195 | | |
| |||
Lines changed: 121 additions & 18 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1197 | 1197 | | |
1198 | 1198 | | |
1199 | 1199 | | |
1200 | | - | |
1201 | | - | |
| 1200 | + | |
| 1201 | + | |
1202 | 1202 | | |
1203 | | - | |
1204 | | - | |
1205 | | - | |
| 1203 | + | |
| 1204 | + | |
| 1205 | + | |
1206 | 1206 | | |
1207 | | - | |
| 1207 | + | |
1208 | 1208 | | |
1209 | 1209 | | |
1210 | 1210 | | |
| |||
1289 | 1289 | | |
1290 | 1290 | | |
1291 | 1291 | | |
1292 | | - | |
| 1292 | + | |
1293 | 1293 | | |
1294 | 1294 | | |
1295 | 1295 | | |
| |||
1328 | 1328 | | |
1329 | 1329 | | |
1330 | 1330 | | |
1331 | | - | |
| 1331 | + | |
1332 | 1332 | | |
1333 | 1333 | | |
1334 | 1334 | | |
| |||
1491 | 1491 | | |
1492 | 1492 | | |
1493 | 1493 | | |
| 1494 | + | |
| 1495 | + | |
| 1496 | + | |
| 1497 | + | |
| 1498 | + | |
| 1499 | + | |
| 1500 | + | |
| 1501 | + | |
| 1502 | + | |
| 1503 | + | |
| 1504 | + | |
| 1505 | + | |
| 1506 | + | |
| 1507 | + | |
| 1508 | + | |
| 1509 | + | |
| 1510 | + | |
| 1511 | + | |
| 1512 | + | |
| 1513 | + | |
| 1514 | + | |
| 1515 | + | |
| 1516 | + | |
| 1517 | + | |
| 1518 | + | |
| 1519 | + | |
| 1520 | + | |
| 1521 | + | |
| 1522 | + | |
| 1523 | + | |
| 1524 | + | |
| 1525 | + | |
| 1526 | + | |
| 1527 | + | |
| 1528 | + | |
| 1529 | + | |
| 1530 | + | |
| 1531 | + | |
| 1532 | + | |
| 1533 | + | |
| 1534 | + | |
| 1535 | + | |
| 1536 | + | |
| 1537 | + | |
| 1538 | + | |
| 1539 | + | |
| 1540 | + | |
| 1541 | + | |
| 1542 | + | |
| 1543 | + | |
| 1544 | + | |
| 1545 | + | |
| 1546 | + | |
| 1547 | + | |
| 1548 | + | |
| 1549 | + | |
| 1550 | + | |
| 1551 | + | |
| 1552 | + | |
| 1553 | + | |
| 1554 | + | |
| 1555 | + | |
| 1556 | + | |
| 1557 | + | |
| 1558 | + | |
| 1559 | + | |
| 1560 | + | |
| 1561 | + | |
| 1562 | + | |
| 1563 | + | |
| 1564 | + | |
1494 | 1565 | | |
1495 | 1566 | | |
1496 | 1567 | | |
| |||
1551 | 1622 | | |
1552 | 1623 | | |
1553 | 1624 | | |
1554 | | - | |
1555 | | - | |
| 1625 | + | |
| 1626 | + | |
1556 | 1627 | | |
1557 | | - | |
1558 | | - | |
| 1628 | + | |
| 1629 | + | |
1559 | 1630 | | |
1560 | 1631 | | |
1561 | 1632 | | |
| |||
1600 | 1671 | | |
1601 | 1672 | | |
1602 | 1673 | | |
| 1674 | + | |
| 1675 | + | |
1603 | 1676 | | |
1604 | 1677 | | |
1605 | 1678 | | |
| |||
1612 | 1685 | | |
1613 | 1686 | | |
1614 | 1687 | | |
1615 | | - | |
| 1688 | + | |
| 1689 | + | |
| 1690 | + | |
| 1691 | + | |
| 1692 | + | |
1616 | 1693 | | |
1617 | 1694 | | |
1618 | 1695 | | |
1619 | 1696 | | |
| 1697 | + | |
1620 | 1698 | | |
1621 | 1699 | | |
1622 | 1700 | | |
1623 | 1701 | | |
1624 | 1702 | | |
1625 | 1703 | | |
1626 | | - | |
1627 | | - | |
1628 | | - | |
| 1704 | + | |
| 1705 | + | |
| 1706 | + | |
| 1707 | + | |
1629 | 1708 | | |
1630 | 1709 | | |
1631 | | - | |
| 1710 | + | |
| 1711 | + | |
1632 | 1712 | | |
1633 | 1713 | | |
1634 | 1714 | | |
| |||
1642 | 1722 | | |
1643 | 1723 | | |
1644 | 1724 | | |
1645 | | - | |
1646 | 1725 | | |
1647 | 1726 | | |
1648 | 1727 | | |
| |||
1654 | 1733 | | |
1655 | 1734 | | |
1656 | 1735 | | |
| 1736 | + | |
1657 | 1737 | | |
1658 | 1738 | | |
1659 | 1739 | | |
| |||
1676 | 1756 | | |
1677 | 1757 | | |
1678 | 1758 | | |
| 1759 | + | |
| 1760 | + | |
| 1761 | + | |
| 1762 | + | |
| 1763 | + | |
| 1764 | + | |
| 1765 | + | |
| 1766 | + | |
| 1767 | + | |
| 1768 | + | |
| 1769 | + | |
| 1770 | + | |
| 1771 | + | |
| 1772 | + | |
| 1773 | + | |
| 1774 | + | |
| 1775 | + | |
| 1776 | + | |
| 1777 | + | |
| 1778 | + | |
| 1779 | + | |
| 1780 | + | |
| 1781 | + | |
1679 | 1782 | | |
1680 | 1783 | | |
1681 | 1784 | | |
| |||
0 commit comments