@@ -5,19 +5,19 @@ import type {
55 LinkPreviewsManagerState ,
66 MessageComposerState ,
77} from 'stream-chat' ;
8- import { LinkPreviewStatus , type MessageComposerConfig } from 'stream-chat' ;
8+ import { LinkPreviewsManager } from 'stream-chat' ;
99import { useStateStore } from '../../store' ;
1010import { PopperTooltip } from '../Tooltip' ;
1111import { useEnterLeaveHandlers } from '../Tooltip/hooks' ;
1212import { useMessageComposer } from './hooks/messageComposer/useMessageComposer' ;
1313import { CloseIcon , LinkIcon } from './icons' ;
1414
1515const linkPreviewsManagerStateSelector = ( state : LinkPreviewsManagerState ) => ( {
16- linkPreviews : Array . from ( state . previews . values ( ) ) ,
17- } ) ;
18-
19- const linkPreviewsManagerConfigStateSelector = ( state : MessageComposerConfig ) => ( {
20- linkPreviewsEnabled : state . linkPreviews . enabled ,
16+ linkPreviews : Array . from ( state . previews . values ( ) ) . filter (
17+ ( preview ) =>
18+ LinkPreviewsManager . previewIsLoaded ( preview ) ||
19+ LinkPreviewsManager . previewIsLoading ( preview ) ,
20+ ) ,
2121} ) ;
2222
2323const messageComposerStateSelector = ( state : MessageComposerState ) => ( {
@@ -35,22 +35,16 @@ export const LinkPreviewList = () => {
3535 linkPreviewsManager . state ,
3636 linkPreviewsManagerStateSelector ,
3737 ) ;
38- const { linkPreviewsEnabled } = useStateStore (
39- messageComposer . configState ,
40- linkPreviewsManagerConfigStateSelector ,
41- ) ;
42- const showLinkPreviews =
43- linkPreviewsEnabled && linkPreviews . length > 0 && ! quotedMessage ;
38+
39+ const showLinkPreviews = linkPreviews . length > 0 && ! quotedMessage ;
4440
4541 if ( ! showLinkPreviews ) return null ;
4642
4743 return (
4844 < div className = 'str-chat__link-preview-list' >
49- { linkPreviews . map ( ( linkPreview ) =>
50- linkPreview . status === LinkPreviewStatus . LOADED ? (
51- < LinkPreviewCard key = { linkPreview . og_scrape_url } linkPreview = { linkPreview } />
52- ) : null ,
53- ) }
45+ { linkPreviews . map ( ( linkPreview ) => (
46+ < LinkPreviewCard key = { linkPreview . og_scrape_url } linkPreview = { linkPreview } />
47+ ) ) }
5448 </ div >
5549 ) ;
5650} ;
@@ -60,14 +54,22 @@ type LinkPreviewProps = {
6054} ;
6155
6256const LinkPreviewCard = ( { linkPreview } : LinkPreviewProps ) => {
57+ const { linkPreviewsManager } = useMessageComposer ( ) ;
6358 const { handleEnter, handleLeave, tooltipVisible } =
6459 useEnterLeaveHandlers < HTMLDivElement > ( ) ;
6560 const [ referenceElement , setReferenceElement ] = useState < HTMLDivElement | null > ( null ) ;
61+
62+ if (
63+ ! LinkPreviewsManager . previewIsLoaded ( linkPreview ) &&
64+ ! LinkPreviewsManager . previewIsLoading ( linkPreview )
65+ )
66+ return null ;
67+
6668 return (
6769 < div
6870 className = { clsx ( 'str-chat__link-preview-card' , {
6971 'str-chat__link-preview-card--loading' :
70- linkPreview . status === LinkPreviewStatus . LOADING ,
72+ LinkPreviewsManager . previewIsLoading ( linkPreview ) ,
7173 } ) }
7274 data-testid = 'link-preview-card'
7375 >
@@ -97,7 +99,8 @@ const LinkPreviewCard = ({ linkPreview }: LinkPreviewProps) => {
9799 < button
98100 className = 'str-chat__link-preview-card__dismiss-button'
99101 data-testid = 'link-preview-card-dismiss-btn'
100- onClick = { linkPreview . dismiss }
102+ onClick = { ( ) => linkPreviewsManager . dismissPreview ( linkPreview . og_scrape_url ) }
103+ type = 'button'
101104 >
102105 < CloseIcon />
103106 </ button >
0 commit comments