@@ -65,6 +65,7 @@ import { useTranslationContext } from '../../context/TranslationContext';
65
65
import { TypingProvider } from '../../context/TypingContext' ;
66
66
67
67
import {
68
+ DEFAULT_HIGHLIGHT_DURATION ,
68
69
DEFAULT_INITIAL_CHANNEL_PAGE_SIZE ,
69
70
DEFAULT_JUMP_TO_PAGE_SIZE ,
70
71
DEFAULT_NEXT_CHANNEL_PAGE_SIZE ,
@@ -753,46 +754,58 @@ const ChannelInner = <
753
754
754
755
const clearHighlightedMessageTimeoutId = useRef < ReturnType < typeof setTimeout > | null > ( null ) ;
755
756
756
- const jumpToMessage = async ( messageId : string , messageLimit = DEFAULT_JUMP_TO_PAGE_SIZE ) => {
757
- dispatch ( { loadingMore : true , type : 'setLoadingMore' } ) ;
758
- await channel . state . loadMessageIntoState ( messageId , undefined , messageLimit ) ;
757
+ const jumpToMessage = useCallback (
758
+ async (
759
+ messageId : string ,
760
+ messageLimit = DEFAULT_JUMP_TO_PAGE_SIZE ,
761
+ highlightDuration = DEFAULT_HIGHLIGHT_DURATION ,
762
+ ) => {
763
+ dispatch ( { loadingMore : true , type : 'setLoadingMore' } ) ;
764
+ await channel . state . loadMessageIntoState ( messageId , undefined , messageLimit ) ;
759
765
760
- /**
761
- * if the message we are jumping to has less than half of the page size older messages,
762
- * we have jumped to the beginning of the channel.
763
- */
764
- const indexOfMessage = channel . state . messages . findIndex ( ( message ) => message . id === messageId ) ;
765
- const hasMoreMessages = indexOfMessage >= Math . floor ( messageLimit / 2 ) ;
766
+ /**
767
+ * if the message we are jumping to has less than half of the page size older messages,
768
+ * we have jumped to the beginning of the channel.
769
+ */
770
+ const indexOfMessage = channel . state . messages . findIndex (
771
+ ( message ) => message . id === messageId ,
772
+ ) ;
773
+ const hasMoreMessages = indexOfMessage >= Math . floor ( messageLimit / 2 ) ;
766
774
767
- loadMoreFinished ( hasMoreMessages , channel . state . messages ) ;
768
- dispatch ( {
769
- hasMoreNewer : channel . state . messages !== channel . state . latestMessages ,
770
- highlightedMessageId : messageId ,
771
- type : 'jumpToMessageFinished' ,
772
- } ) ;
775
+ loadMoreFinished ( hasMoreMessages , channel . state . messages ) ;
776
+ dispatch ( {
777
+ hasMoreNewer : channel . state . messages !== channel . state . latestMessages ,
778
+ highlightedMessageId : messageId ,
779
+ type : 'jumpToMessageFinished' ,
780
+ } ) ;
773
781
774
- if ( clearHighlightedMessageTimeoutId . current ) {
775
- clearTimeout ( clearHighlightedMessageTimeoutId . current ) ;
776
- }
782
+ if ( clearHighlightedMessageTimeoutId . current ) {
783
+ clearTimeout ( clearHighlightedMessageTimeoutId . current ) ;
784
+ }
777
785
778
- clearHighlightedMessageTimeoutId . current = setTimeout ( ( ) => {
779
- clearHighlightedMessageTimeoutId . current = null ;
780
- dispatch ( { type : 'clearHighlightedMessage' } ) ;
781
- } , 500 ) ;
782
- } ;
786
+ clearHighlightedMessageTimeoutId . current = setTimeout ( ( ) => {
787
+ clearHighlightedMessageTimeoutId . current = null ;
788
+ dispatch ( { type : 'clearHighlightedMessage' } ) ;
789
+ } , highlightDuration ) ;
790
+ } ,
791
+ [ channel , loadMoreFinished ] ,
792
+ ) ;
783
793
784
- const jumpToLatestMessage = async ( ) => {
794
+ const jumpToLatestMessage = useCallback ( async ( ) => {
785
795
await channel . state . loadMessageIntoState ( 'latest' ) ;
786
796
// FIXME: we cannot rely on constant value 25 as the page size can be customized by integrators
787
797
const hasMoreOlder = channel . state . messages . length >= 25 ;
788
798
loadMoreFinished ( hasMoreOlder , channel . state . messages ) ;
789
799
dispatch ( {
790
800
type : 'jumpToLatestMessage' ,
791
801
} ) ;
792
- } ;
802
+ } , [ channel , loadMoreFinished ] ) ;
793
803
794
804
const jumpToFirstUnreadMessage = useCallback (
795
- async ( queryMessageLimit = DEFAULT_JUMP_TO_PAGE_SIZE ) => {
805
+ async (
806
+ queryMessageLimit = DEFAULT_JUMP_TO_PAGE_SIZE ,
807
+ highlightDuration = DEFAULT_HIGHLIGHT_DURATION ,
808
+ ) => {
796
809
if ( ! channelUnreadUiState ?. unread_messages ) return ;
797
810
let lastReadMessageId = channelUnreadUiState ?. last_read_message_id ;
798
811
let firstUnreadMessageId = channelUnreadUiState ?. first_unread_message_id ;
@@ -914,7 +927,7 @@ const ChannelInner = <
914
927
clearHighlightedMessageTimeoutId . current = setTimeout ( ( ) => {
915
928
clearHighlightedMessageTimeoutId . current = null ;
916
929
dispatch ( { type : 'clearHighlightedMessage' } ) ;
917
- } , 500 ) ;
930
+ } , highlightDuration ) ;
918
931
} ,
919
932
[ addNotification , channel , loadMoreFinished , t , channelUnreadUiState ] ,
920
933
) ;
0 commit comments