Commit b5d1bae
committed
Fix fragmentInstance#compareDocumentPosition nesting and portals
Found a couple of bugs when integrating this API 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) 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 cc01584 commit b5d1bae
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