Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion public/locales_0.1.5/en/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -272,5 +272,6 @@
"STATUS_VIDEO_FALLBACK": "Video status",
"STATUS_AUDIO_FALLBACK": "Audio status",
"STATUS_QUOTE_EXCEEDED": "The tariff quota has been exceeded. The status has not been sent",
"STATUS_BULK_NOT_SENT": "Failed to send {failed} of {total} statuses"
"STATUS_BULK_NOT_SENT": "Failed to send {failed} of {total} statuses",
"AD_MSG_TITLE": "Message via advertisement"
}
3 changes: 2 additions & 1 deletion public/locales_0.1.5/he/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -270,5 +270,6 @@
"STATUS_VIDEO_FALLBACK": "סטטוס וידאו",
"STATUS_AUDIO_FALLBACK": "סטטוס אודיו",
"STATUS_QUOTE_EXCEEDED": "חריגה ממכסת התעריף. הסטטוס לא נשלח",
"STATUS_BULK_NOT_SENT": "לא נשלחו {failed} מתוך {total} סטטוסים"
"STATUS_BULK_NOT_SENT": "לא נשלחו {failed} מתוך {total} סטטוסים",
"AD_MSG_TITLE": "הודעה באמצעות פרסומת"
}
3 changes: 2 additions & 1 deletion public/locales_0.1.5/ru/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -288,5 +288,6 @@
"STATUS_VIDEO_FALLBACK": "Видео-статус",
"STATUS_AUDIO_FALLBACK": "Аудио-статус",
"STATUS_QUOTE_EXCEEDED": "Превышена квота тарифа. Статус не отправлен",
"STATUS_BULK_NOT_SENT": "Не отправлено {failed} из {total} статусов"
"STATUS_BULK_NOT_SENT": "Не отправлено {failed} из {total} статусов",
"AD_MSG_TITLE": "Сообщение через рекламу"
}
3 changes: 2 additions & 1 deletion public/locales_0.1.5/tr/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -272,5 +272,6 @@
"STATUS_VIDEO_FALLBACK": "Video durumu",
"STATUS_AUDIO_FALLBACK": "Ses durumu",
"STATUS_QUOTE_EXCEEDED": "Tarife kotası aşıldı. Durum gönderilmedi",
"STATUS_BULK_NOT_SENT": "{total} durumdan {failed} tanesi gönderilemedi"
"STATUS_BULK_NOT_SENT": "{total} durumdan {failed} tanesi gönderilemedi",
"AD_MSG_TITLE": "Reklam yoluyla mesaj"
}
8 changes: 1 addition & 7 deletions src/components/shared/chat-list/chat-list-item.component.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -233,13 +233,7 @@ const ChatListItem: FC<ContactListItemProps> = ({
height: 20,
})}
{getMessageTypeIcon(lastMessage.typeMessage)}
{lastMessage.isDeleted ? (
<i>{t('DELETED_MESSAGE')}</i>
) : (
<span className="text-overflow" style={{ width: 300 }}>
{formattedPreviewMessage}
</span>
)}
{lastMessage.isDeleted ? <i>{t('DELETED_MESSAGE')}</i> : formattedPreviewMessage}
</Flex>
)
}
Expand Down
5 changes: 2 additions & 3 deletions src/components/shared/chat-view.component.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -219,9 +219,7 @@ const ChatView: FC = () => {
const selectedOptions =
msg.pollMessageData?.votes
?.filter((vote) =>
vote.optionVoters.some(
(voter) => getPhoneNumberFromChatId(voter) === senderPhone
)
vote.optionVoters.some((voter) => getPhoneNumberFromChatId(voter) === senderPhone)
)
.map((vote) => vote.optionName) ?? [];

Expand Down Expand Up @@ -469,6 +467,7 @@ const ChatView: FC = () => {
statusMessage: message.statusMessage,
quotedMessage: message.quotedMessage,
templateMessage: templateMessage,
extendedTextMessage: message.extendedTextMessage,
interactiveButtonsMessage: interactiveButtonsMessage,
caption: message.caption,
fileName: message.fileName,
Expand Down
40 changes: 40 additions & 0 deletions src/components/shared/message/ad-message.component.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import { FC } from 'react';

import { Image, Space } from 'antd';
import { useTranslation } from 'react-i18next';

import { ExtendedTextMessage } from 'types';
import { getAdMsgUrlHostname, IMAGE_FALLBACK } from 'utils';

type AdMessageProps = Pick<ExtendedTextMessage, 'sourceUrl' | 'thumbnailUrl' | 'description'>;

const AdMessage: FC<AdMessageProps> = ({ sourceUrl, thumbnailUrl, description }) => {
const { t } = useTranslation();
const adUrlHostname = getAdMsgUrlHostname(sourceUrl);

return (
<a href={sourceUrl} target="_blank" rel="noreferrer" style={{ marginTop: 10 }}>
<Space direction="vertical" className="ad-message p-10">
<i style={{ color: 'var(--icon-color)' }}>{t('AD_MSG_TITLE')}</i>
<Image
width={300}
src={thumbnailUrl}
style={{ borderRadius: 10 }}
preview={false}
alt="image"
fallback={IMAGE_FALLBACK}
/>
<span style={{ width: 300, fontSize: 12 }} className="text-overflow">
{description}
</span>
{adUrlHostname && (
<span className="text-overflow" style={{ width: 300 }}>
{adUrlHostname}
</span>
)}
</Space>
</a>
);
};

export default AdMessage;
11 changes: 2 additions & 9 deletions src/components/shared/message/file-message.component.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,13 @@ import { FC } from 'react';
import { Image, Space, Typography } from 'antd';

import { MessageProps } from './message.component';
import { getMessageTypeIcon } from 'utils';
import { getMessageTypeIcon, IMAGE_FALLBACK } from 'utils';

const FileMessage: FC<
Pick<MessageProps['messageDataForRender'], 'downloadUrl' | 'typeMessage' | 'fileName' | 'type'>
> = ({ downloadUrl, typeMessage, fileName, type }) => {
if (typeMessage === 'imageMessage') {
return (
<Image
width={300}
src={downloadUrl}
alt="image"
fallback="data:image/png;base64,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"
/>
);
return <Image width={300} src={downloadUrl} alt="image" fallback={IMAGE_FALLBACK} />;
}

return (
Expand Down
12 changes: 12 additions & 0 deletions src/components/shared/message/message.component.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { Space } from 'antd';
import clsx from 'clsx';
import { useTranslation } from 'react-i18next';

import AdMessage from './ad-message.component';
import AudioMessage from './audio-message.component';
import FileMessage from './file-message.component';
import MessageErrorBoundary from './message-error-boundary.component';
Expand Down Expand Up @@ -40,6 +41,7 @@ const Message: FC<MessageProps> = ({ messageDataForRender, preview }) => {
quotedMessage,
templateMessage,
interactiveButtonsMessage,
extendedTextMessage,
caption,
fileName,
isDeleted,
Expand Down Expand Up @@ -134,6 +136,8 @@ const Message: FC<MessageProps> = ({ messageDataForRender, preview }) => {
);
}

const isAdMsg = extendedTextMessage && extendedTextMessage.sourceType === 'ad';

return (
<div
ref={messageRef}
Expand Down Expand Up @@ -165,6 +169,14 @@ const Message: FC<MessageProps> = ({ messageDataForRender, preview }) => {
/>
)}

{isAdMsg && (
<AdMessage
sourceUrl={extendedTextMessage.sourceUrl}
description={extendedTextMessage.description}
thumbnailUrl={extendedTextMessage.thumbnailUrl}
/>
)}

{isDeleted && !showDeletedMessage ? (
<Space>
<i className="deleted-message">{t('DELETED_MESSAGE')}</i>
Expand Down
7 changes: 7 additions & 0 deletions src/styles/components/shared/message.scss
Original file line number Diff line number Diff line change
Expand Up @@ -217,3 +217,10 @@
color: var(--primary-color);
}
}

.ad-message {
background-color: var(--qouted-message-outgoing-bg-color);
border-radius: 10px;
padding: 10px;
color: var(--icon-color);
}
1 change: 1 addition & 0 deletions src/styles/index.scss
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,7 @@ html {
.text-overflow {
display: -webkit-box;
overflow: hidden;
text-overflow: ellipsis;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
}
Expand Down
6 changes: 6 additions & 0 deletions src/types/api.types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,12 @@ export interface ExtendedTextMessage {
title: string;
previewType: string;
jpegThumbnail: string;
mediaType?: 'IMAGE' | 'VIDEO';
showAdAttribution?: boolean;
sourceId?: string;
sourceType?: string;
sourceUrl?: string;
thumbnailUrl?: string;
}

export interface ExtendedTextMessageData {
Expand Down
2 changes: 2 additions & 0 deletions src/types/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { Color } from 'antd/es/color-picker';
import {
Button,
ExpandedInstanceInterface,
ExtendedTextMessage,
FontType,
GetContactInfoResponseInterface,
GetGroupDataSuccessResponseInterface,
Expand Down Expand Up @@ -371,6 +372,7 @@ export interface MessageDataForRender {
quotedMessage?: QuotedMessageInterface;
templateMessage?: ParsedWabaTemplateInterface;
interactiveButtonsMessage?: ParsedWabaTemplateInterface;
extendedTextMessage?: ExtendedTextMessage;
caption?: string;
fileName?: string;
isDeleted?: boolean;
Expand Down
6 changes: 5 additions & 1 deletion src/utils/component.utils.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,11 @@ export function getFormattedMessage(
if (!formattedText) {
return textMessage;
}
return <span>{parse(formattedText)}</span>;
return (
<span className="text-overflow" style={{ width: 300 }}>
{parse(formattedText)}
</span>
);
}

export function fillString(string: string, data: string[]) {
Expand Down
13 changes: 13 additions & 0 deletions src/utils/message.utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@ import { MessageInterface } from 'types';

type MessageLike = Partial<MessageInterface> & Pick<MessageInterface, 'typeMessage'>;

export const IMAGE_FALLBACK =
'data:image/png;base64,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';

export function getTextMessage(message: MessageLike) {
if (message.typeMessage === 'reactionMessage') {
return (
Expand Down Expand Up @@ -75,3 +78,13 @@ export function getJSONMessage(message: Partial<MessageInterface>): string {
}
}
}

export function getAdMsgUrlHostname(url?: string) {
if (!url) return null;

try {
return new URL(url).hostname;
} catch {
return url;
}
}