@@ -38,6 +38,7 @@ type MessageUIProps = {
3838 renderMessageContent ?: ( ) => React . ReactElement ;
3939} ;
4040
41+ // todo: Refactor this component, is too complex now
4142const Message = ( props : MessageUIProps ) : React . FC < MessageUIProps > | React . ReactElement => {
4243 const {
4344 message,
@@ -134,39 +135,47 @@ const Message = (props: MessageUIProps): React.FC<MessageUIProps> | React.ReactE
134135 } , [ showEdit , message ?. reactions ?. length ] ) ;
135136
136137 useLayoutEffect ( ( ) => {
137- if ( highLightedMessageId === message . messageId ) {
138- if ( useMessageScrollRef && useMessageScrollRef . current ) {
139- useMessageScrollRef . current . scrollIntoView ( { block : 'center' , inline : 'center' } ) ;
140- setIsAnimated ( false ) ;
141- setTimeout ( ( ) => {
142- setIsHighlighted ( true ) ;
143- } , 500 ) ;
144- setTimeout ( ( ) => {
145- setHighLightedMessageId ( 0 ) ;
146- onMessageHighlighted ?. ( ) ;
147- } , 1600 ) ;
148- }
138+ let animationTimeout = null ;
139+ let messageHighlightedTimeout = null ;
140+ if ( highLightedMessageId === message . messageId && useMessageScrollRef ? .current ) {
141+ useMessageScrollRef . current . scrollIntoView ( { block : 'center' , inline : 'center' } ) ;
142+ setIsAnimated ( false ) ;
143+ animationTimeout = setTimeout ( ( ) => {
144+ setIsHighlighted ( true ) ;
145+ } , 500 ) ;
146+ messageHighlightedTimeout = setTimeout ( ( ) => {
147+ setHighLightedMessageId ( 0 ) ;
148+ onMessageHighlighted ?. ( ) ;
149+ } , 1600 ) ;
149150 } else {
150151 setIsHighlighted ( false ) ;
151152 }
153+ return ( ) => {
154+ clearTimeout ( animationTimeout ) ;
155+ clearTimeout ( messageHighlightedTimeout ) ;
156+ }
152157 } , [ highLightedMessageId , useMessageScrollRef . current , message . messageId ] ) ;
153158
154159 useLayoutEffect ( ( ) => {
155- if ( animatedMessageId === message . messageId ) {
156- if ( useMessageScrollRef && useMessageScrollRef . current ) {
157- useMessageScrollRef . current . scrollIntoView ( { block : 'center' , inline : 'center' } ) ;
158- setIsHighlighted ( false ) ;
159- setTimeout ( ( ) => {
160- setIsAnimated ( true ) ;
161- } , 500 ) ;
162- setTimeout ( ( ) => {
163- setAnimatedMessageId ( 0 ) ;
164- onMessageAnimated ?. ( ) ;
165- } , 1600 ) ;
166- }
160+ let animationTimeout = null ;
161+ let messageAnimatedTimeout = null ;
162+ if ( animatedMessageId === message . messageId && useMessageScrollRef ? .current ) {
163+ useMessageScrollRef . current . scrollIntoView ( { block : 'center' , inline : 'center' } ) ;
164+ setIsHighlighted ( false ) ;
165+ animationTimeout = setTimeout ( ( ) => {
166+ setIsAnimated ( true ) ;
167+ } , 500 ) ;
168+ messageAnimatedTimeout = setTimeout ( ( ) => {
169+ setAnimatedMessageId ( 0 ) ;
170+ onMessageAnimated ?. ( ) ;
171+ } , 1600 ) ;
167172 } else {
168173 setIsAnimated ( false ) ;
169174 }
175+ return ( ) => {
176+ clearTimeout ( animationTimeout ) ;
177+ clearTimeout ( messageAnimatedTimeout ) ;
178+ }
170179 } , [ animatedMessageId , useMessageScrollRef . current , message . messageId , onMessageAnimated ] ) ;
171180 const renderedMessage = useMemo ( ( ) => {
172181 return renderMessage ?.( {
0 commit comments