Skip to content

Commit b6305b6

Browse files
authored
Merge pull request oxen-io#2540 from Bilb/fix-link-previews-small-images
fix: UI for link previews when the image is too less than 200px
2 parents 1fbeb9f + c75cf6e commit b6305b6

File tree

4 files changed

+33
-21
lines changed

4 files changed

+33
-21
lines changed

stylesheets/_modules.scss

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -152,10 +152,17 @@
152152
background: white;
153153
color: black;
154154
border-radius: var(--border-radius-message-box);
155+
border-bottom-right-radius: 0;
156+
border-bottom-left-radius: 0;
157+
background-color: white; // TODO theming update // var(--message-link-preview-background-color)
155158
margin: var(--padding-link-preview);
156159

157160
.module-image {
158-
margin: -1px;
161+
margin-bottom: 0;
162+
border-radius: 0;
163+
margin-top: -1px;
164+
margin-left: -1px;
165+
border-top-left-radius: var(--border-radius-message-box);
159166
}
160167

161168
&__text {
@@ -164,25 +171,23 @@
164171
}
165172

166173
.module-message__link-preview__content {
167-
padding: 0 0 var(--margins-xs) 0;
168174
display: flex;
169175
flex-direction: row;
170176
align-items: center;
171177
flex-grow: 1;
172-
margin-left: var(--margins-sm);
173178
}
174179

175180
.module-message__link-preview__image_container {
176-
margin: -2px;
177181
margin-inline-end: 8px;
178182
display: inline-block;
179183
}
180184

181185
.module-message__link-preview__icon_container {
186+
display: flex;
187+
justify-content: center;
182188
flex: initial;
183-
min-width: 54px;
184-
width: 54px;
185-
max-height: 54px;
189+
width: 100px;
190+
height: 100px;
186191
position: relative;
187192
margin-left: -2px;
188193
margin-inline-end: 8px;

ts/components/conversation/message/message-content/MessageLinkPreview.tsx

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
import classNames from 'classnames';
22
import React from 'react';
33
import { isImageAttachment } from '../../../../types/Attachment';
4-
import { ImageGrid } from '../../ImageGrid';
54
import { Image } from '../../Image';
65
import { MessageRenderingProps } from '../../../../models/messageType';
76
import { useDispatch, useSelector } from 'react-redux';
8-
import { getMessageLinkPreviewProps } from '../../../../state/selectors/conversations';
7+
import {
8+
getIsMessageSelectionMode,
9+
getMessageLinkPreviewProps,
10+
} from '../../../../state/selectors/conversations';
911
import { SessionIcon } from '../../../icon';
10-
import { MINIMUM_LINK_PREVIEW_IMAGE_WIDTH } from '../message-item/Message';
1112
import { showLinkVisitWarningDialog } from '../../../dialog/SessionConfirm';
1213

1314
export type MessageLinkPreviewSelectorProps = Pick<
@@ -20,9 +21,12 @@ type Props = {
2021
messageId: string;
2122
};
2223

24+
const linkPreviewsImageSize = 100;
25+
2326
export const MessageLinkPreview = (props: Props) => {
2427
const selected = useSelector(state => getMessageLinkPreviewProps(state as any, props.messageId));
2528
const dispatch = useDispatch();
29+
const isMessageSelectionMode = useSelector(getIsMessageSelectionMode);
2630

2731
if (!selected) {
2832
return null;
@@ -44,10 +48,11 @@ export const MessageLinkPreview = (props: Props) => {
4448
}
4549

4650
const previewHasImage = first.image && isImageAttachment(first.image);
47-
const width = first.image && first.image.width;
48-
const isFullSizeImage = width && width >= MINIMUM_LINK_PREVIEW_IMAGE_WIDTH;
4951

5052
function openLinkFromPreview() {
53+
if (isMessageSelectionMode) {
54+
return;
55+
}
5156
if (previews?.length && previews[0].url) {
5257
showLinkVisitWarningDialog(previews[0].url, dispatch);
5358
}
@@ -59,31 +64,28 @@ export const MessageLinkPreview = (props: Props) => {
5964
className={classNames('module-message__link-preview')}
6065
onClick={openLinkFromPreview}
6166
>
62-
{first.image && previewHasImage && isFullSizeImage ? (
63-
<ImageGrid attachments={[first.image]} onError={props.handleImageError} />
64-
) : null}
6567
<div className={classNames('module-message__link-preview__content')}>
66-
{first.image && previewHasImage && !isFullSizeImage ? (
68+
{previewHasImage ? (
6769
<div className="module-message__link-preview__image_container">
6870
<Image
6971
softCorners={true}
7072
alt={window.i18n('previewThumbnail', [first.domain])}
71-
height={72}
72-
width={72}
73+
height={linkPreviewsImageSize}
74+
width={linkPreviewsImageSize}
7375
url={first.image.url}
7476
attachment={first.image}
7577
onError={props.handleImageError}
7678
/>
7779
</div>
78-
) : !first.image || !previewHasImage ? (
80+
) : (
7981
<div className="module-message__link-preview__icon_container">
8082
<div className="module-message__link-preview__icon_container__inner">
8183
<div className="module-message__link-preview__icon-container__circle-background">
8284
<SessionIcon iconType="link" iconSize="small" />
8385
</div>
8486
</div>
8587
</div>
86-
) : null}
88+
)}
8789
<div className={classNames('module-message__link-preview__text')}>
8890
<div className="module-message__link-preview__title">{first.title}</div>
8991
<div className="module-message__link-preview__location">{first.domain}</div>

ts/state/selectors/conversations.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -647,6 +647,11 @@ export const getSelectedMessageIds = createSelector(
647647
(state: ConversationsStateType): Array<string> => state.selectedMessageIds
648648
);
649649

650+
export const getIsMessageSelectionMode = createSelector(
651+
getSelectedMessageIds,
652+
(state: Array<string>): boolean => Boolean(state.length)
653+
);
654+
650655
export const getLightBoxOptions = createSelector(
651656
getConversations,
652657
(state: ConversationsStateType): LightBoxOptions | undefined => state.lightBox

ts/window.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ declare global {
4343
};
4444
};
4545
SessionSnodeAPI: SessionSnodeAPI;
46-
onLogin: any;
46+
onLogin: (pw: string) => Promise<void>;
4747
persistStore?: Persistor;
4848
restart: any;
4949
getSeedNodeList: () => Array<string> | undefined;

0 commit comments

Comments
 (0)