Skip to content

Commit 0bea2d4

Browse files
committed
refactor: remove LinkPreview class in favor of plain objects
1 parent f4136f0 commit 0bea2d4

File tree

1 file changed

+22
-19
lines changed

1 file changed

+22
-19
lines changed

src/components/MessageInput/LinkPreviewList.tsx

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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';
99
import { useStateStore } from '../../store';
1010
import { PopperTooltip } from '../Tooltip';
1111
import { useEnterLeaveHandlers } from '../Tooltip/hooks';
1212
import { useMessageComposer } from './hooks/messageComposer/useMessageComposer';
1313
import { CloseIcon, LinkIcon } from './icons';
1414

1515
const 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

2323
const 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

6256
const 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

Comments
 (0)