1- import * as React from 'react' ;
2- import { useRef , useEffect } from 'react' ;
31import useState from 'rc-util/lib/hooks/useState' ;
2+ import * as React from 'react' ;
3+ import { useEffect , useRef } from 'react' ;
4+ import type { CSSMotionProps } from '../CSSMotion' ;
5+ import type {
6+ MotionEvent ,
7+ MotionEventHandler ,
8+ MotionPrepareEventHandler ,
9+ MotionStatus ,
10+ StepStatus ,
11+ } from '../interface' ;
412import {
513 STATUS_APPEAR ,
6- STATUS_NONE ,
7- STATUS_LEAVE ,
814 STATUS_ENTER ,
15+ STATUS_LEAVE ,
16+ STATUS_NONE ,
17+ STEP_ACTIVE ,
918 STEP_PREPARE ,
19+ STEP_PREPARED ,
1020 STEP_START ,
11- STEP_ACTIVE ,
12- } from '../interface' ;
13- import type {
14- MotionStatus ,
15- MotionEventHandler ,
16- MotionEvent ,
17- MotionPrepareEventHandler ,
18- StepStatus ,
1921} from '../interface' ;
20- import type { CSSMotionProps } from '../CSSMotion' ;
21- import useStepQueue , { DoStep , SkipStep , isActive } from './useStepQueue' ;
2222import useDomMotionEvents from './useDomMotionEvents' ;
2323import useIsomorphicLayoutEffect from './useIsomorphicLayoutEffect' ;
24+ import useStepQueue , { DoStep , isActive , SkipStep } from './useStepQueue' ;
2425
2526export default function useStatus (
2627 supportMotion : boolean ,
@@ -63,6 +64,14 @@ export default function useStatus(
6364 // ========================== Motion End ==========================
6465 const activeRef = useRef ( false ) ;
6566
67+ /**
68+ * Clean up status & style
69+ */
70+ function updateMotionEndStatus ( ) {
71+ setStatus ( STATUS_NONE , true ) ;
72+ setStyle ( null , true ) ;
73+ }
74+
6675 function onInternalMotionEnd ( event : MotionEvent ) {
6776 const element = getDomElement ( ) ;
6877 if ( event && ! event . deadline && event . target !== element ) {
@@ -85,8 +94,7 @@ export default function useStatus(
8594
8695 // Only update status when `canEnd` and not destroyed
8796 if ( status !== STATUS_NONE && currentActive && canEnd !== false ) {
88- setStatus ( STATUS_NONE , true ) ;
89- setStyle ( null , true ) ;
97+ updateMotionEndStatus ( ) ;
9098 }
9199 }
92100
@@ -125,7 +133,7 @@ export default function useStatus(
125133 }
126134 } , [ status ] ) ;
127135
128- const [ startStep , step ] = useStepQueue ( status , newStep => {
136+ const [ startStep , step ] = useStepQueue ( status , ! supportMotion , newStep => {
129137 // Only prepare step can be skip
130138 if ( newStep === STEP_PREPARE ) {
131139 const onPrepare = eventHandlers [ STEP_PREPARE ] ;
@@ -155,6 +163,10 @@ export default function useStatus(
155163 }
156164 }
157165
166+ if ( step === STEP_PREPARED ) {
167+ updateMotionEndStatus ( ) ;
168+ }
169+
158170 return DoStep ;
159171 } ) ;
160172
@@ -169,9 +181,9 @@ export default function useStatus(
169181 const isMounted = mountedRef . current ;
170182 mountedRef . current = true ;
171183
172- if ( ! supportMotion ) {
173- return ;
174- }
184+ // if (!supportMotion) {
185+ // return;
186+ // }
175187
176188 let nextStatus : MotionStatus ;
177189
0 commit comments