43
} from './ReactFiberTracingMarkerComponent';
44
import type {
45
ViewTransitionProps,
46
- ViewTransitionInstance,
46
+ ViewTransitionState,
47
} from './ReactFiberViewTransitionComponent';
48
49
import {
283
root: FiberRoot,
284
firstChild: Fiber,
285
committedLanes: Lanes,
286
- appearingViewTransitions: Map<string, ViewTransitionInstance> | null,
286
+ appearingViewTransitions: Map<string, ViewTransitionState> | null,
287
): void {
288
focusedInstanceHandle = prepareForCommit(root.containerInfo);
289
shouldFireAfterActiveInstanceBlur = false;
305
306
function commitBeforeMutationEffects_begin(
307
isViewTransitionEligible: boolean,
308
- appearingViewTransitions: Map<string, ViewTransitionInstance> | null,
308
+ appearingViewTransitions: Map<string, ViewTransitionState> | null,
309
) {
310
// If this commit is eligible for a View Transition we look into all mutated subtrees.
311
// TODO: We could optimize this by marking these with the Snapshot subtree flag in the render phase.
523
function commitBeforeMutationEffectsDeletion(
524
deletion: Fiber,
525
isViewTransitionEligible: boolean,
526
- appearingViewTransitions: Map<string, ViewTransitionInstance> | null,
526
+ appearingViewTransitions: Map<string, ViewTransitionState> | null,
527
) {
528
if (enableCreateEventHandleAPI) {
529
// TODO (effects) It would be nice to avoid calling doesFiberContain()
653
child.tag === ViewTransitionComponent &&
654
(child.flags & ViewTransitionNamedStatic) !== NoFlags
655
) {
656
- const instance: ViewTransitionInstance = child.stateNode;
656
+ const instance: ViewTransitionState = child.stateNode;
657
if (instance.paired) {
658
const props: ViewTransitionProps = child.memoizedProps;
659
if (props.name == null || props.name === 'auto') {
721
722
function commitDeletedPairViewTransitions(
723
deletion: Fiber,
724
- appearingViewTransitions: Map<string, ViewTransitionInstance>,
724
+ appearingViewTransitions: Map<string, ViewTransitionState>,
725
): void {
726
if (appearingViewTransitions.size === 0) {
727
// We've found all.
761
restoreViewTransitionOnHostInstances(child.child, false);
762
} else {
763
// We'll transition between them.
764
- const oldinstance: ViewTransitionInstance = child.stateNode;
765
- const newInstance: ViewTransitionInstance = pair;
764
+ const oldinstance: ViewTransitionState = child.stateNode;
765
+ const newInstance: ViewTransitionState = pair;
766
newInstance.paired = oldinstance;
767
}
768
// Delete the entry so that we know when we've found all of them
782
783
function commitExitViewTransitions(
784
deletion: Fiber,
785
- appearingViewTransitions: Map<string, ViewTransitionInstance> | null,
785
+ appearingViewTransitions: Map<string, ViewTransitionState> | null,
786
): void {
787
if (deletion.tag === ViewTransitionComponent) {
788
const props: ViewTransitionProps = deletion.memoizedProps;
805
if (pair !== undefined) {
806
// We found a new appearing view transition with the same name as this deletion.
807
// We'll transition between them instead of running the normal exit.
808
- const oldinstance: ViewTransitionInstance = deletion.stateNode;
809
- const newInstance: ViewTransitionInstance = pair;
808
+ const oldinstance: ViewTransitionState = deletion.stateNode;
809
+ const newInstance: ViewTransitionState = pair;
810
newInstance.paired = oldinstance;
811
// Delete the entry so that we know when we've found all of them
812
// and can stop searching (size reaches zero).
894
child.tag === ViewTransitionComponent &&
895
(child.flags & ViewTransitionNamedStatic) !== NoFlags
896
) {
897
- const instance: ViewTransitionInstance = child.stateNode;
897
+ const instance: ViewTransitionState = child.stateNode;
898
if (instance.paired !== null) {
899
instance.paired = null;
900
restoreViewTransitionOnHostInstances(child.child, false);
908
909
function restoreEnterViewTransitions(placement: Fiber): void {
910
if (placement.tag === ViewTransitionComponent) {
911
- const instance: ViewTransitionInstance = placement.stateNode;
911
+ const instance: ViewTransitionState = placement.stateNode;
912
instance.paired = null;
913
restoreViewTransitionOnHostInstances(placement.child, false);
914
restorePairedViewTransitions(placement);
925
926
function restoreExitViewTransitions(deletion: Fiber): void {
927
if (deletion.tag === ViewTransitionComponent) {
928
- const instance: ViewTransitionInstance = deletion.stateNode;
928
+ const instance: ViewTransitionState = deletion.stateNode;
929
instance.paired = null;
930
restoreViewTransitionOnHostInstances(deletion.child, false);
931
restorePairedViewTransitions(deletion);
1345
}
1346
break;
1347
}
1348
+ case ViewTransitionComponent: {
1349
+ if (enableViewTransition) {
1350
+ recursivelyTraverseLayoutEffects(
1351
+ finishedRoot,
1352
+ finishedWork,
1353
+ committedLanes,
1354
+ );
1355
+ if (flags & Ref) {
1356
+ safelyAttachRef(finishedWork, finishedWork.return);
1357
+ }
1358
+ break;
1359
+ }
1360
+ // Fallthrough
1361
+ }
1362
default: {
1363
recursivelyTraverseLayoutEffects(
1364
finishedRoot,
2844
}
2845
case ViewTransitionComponent:
2846
if (enableViewTransition) {
2847
+ if (flags & Ref) {
2848
+ if (!offscreenSubtreeWasHidden && current !== null) {
2849
+ safelyDetachRef(current, current.return);
2850
+ }
2851
+ }
2852
const prevMutationContext = pushMutationContext();
2853
recursivelyTraverseMutationEffects(root, finishedWork, lanes);
2854
commitReconciliationEffects(finishedWork, lanes);
3213
}
3214
break;
3215
}
3216
+ case ViewTransitionComponent: {
3217
+ if (enableViewTransition) {
3218
+ safelyDetachRef(finishedWork, finishedWork.return);
3219
+ }
3220
+ // Fallthrough
3221
+ }
3222
default: {
3223
recursivelyTraverseDisappearLayoutEffects(finishedWork);
3224
break;
3393
safelyAttachRef(finishedWork, finishedWork.return);
3394
break;
3395
}
3396
+ case ViewTransitionComponent: {
3397
+ if (enableViewTransition) {
3398
+ recursivelyTraverseReappearLayoutEffects(
3399
+ finishedRoot,
3400
+ finishedWork,
3401
+ includeWorkInProgressEffects,
3402
+ );
3403
+ safelyAttachRef(finishedWork, finishedWork.return);
3404
+ break;
3405
+ }
3406
+ // Fallthrough
3407
+ }
3408
default: {
3409
recursivelyTraverseReappearLayoutEffects(
3410
finishedRoot,