Skip to content
Closed
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
351 changes: 147 additions & 204 deletions examples/typescript/yarn.lock

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@
"@playwright/test": "^1.42.1",
"@semantic-release/changelog": "^6.0.3",
"@semantic-release/git": "^10.0.1",
"@stream-io/stream-chat-css": "^5.7.2",
"@stream-io/stream-chat-css": "^5.8.0",
"@testing-library/dom": "^10.4.0",
"@testing-library/jest-dom": "^6.6.3",
"@testing-library/react": "^16.2.0",
Expand Down
1 change: 1 addition & 0 deletions src/components/Channel/Channel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ type ChannelPropsForwardedToComponentContext<
| 'Message'
| 'MessageActions'
| 'MessageBouncePrompt'
| 'MessageBlocked'
| 'MessageDeleted'
| 'MessageListNotifications'
| 'MessageListMainPanel'
Expand Down
34 changes: 34 additions & 0 deletions src/components/Message/MessageBlocked.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import React from 'react';
import clsx from 'clsx';

import { useUserRole } from './hooks/useUserRole';
import { useTranslationContext } from '../../context/TranslationContext';
import { useMessageContext } from '../../context';

export const MessageBlocked = () => {
const { message } = useMessageContext();
const { t } = useTranslationContext('MessageBlocked');

const { isMyMessage } = useUserRole(message);

const messageClasses = clsx(
'str-chat__message str-chat__message-simple str-chat__message--blocked',
message.type,
{
'str-chat__message--me str-chat__message-simple--me': isMyMessage,
'str-chat__message--other': !isMyMessage,
},
);

return (
<div
className={messageClasses}
data-testid='message-blocked-component'
key={message.id}
>
<div className='str-chat__message--blocked-inner'>
{t<string>('Message was blocked by moderation policies')}
</div>
</div>
);
};
7 changes: 7 additions & 0 deletions src/components/Message/MessageSimple.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,15 @@ import clsx from 'clsx';
import { MessageErrorIcon } from './icons';
import { MessageBouncePrompt as DefaultMessageBouncePrompt } from '../MessageBounce';
import { MessageDeleted as DefaultMessageDeleted } from './MessageDeleted';
import { MessageBlocked as DefaultMessageBlocked } from './MessageBlocked';
import { MessageOptions as DefaultMessageOptions } from './MessageOptions';
import { MessageRepliesCountButton as DefaultMessageRepliesCountButton } from './MessageRepliesCountButton';
import { MessageStatus as DefaultMessageStatus } from './MessageStatus';
import { MessageText } from './MessageText';
import { MessageTimestamp as DefaultMessageTimestamp } from './MessageTimestamp';
import {
areMessageUIPropsEqual,
isMessageBlocked,
isMessageBounced,
isMessageEdited,
messageHasAttachments,
Expand Down Expand Up @@ -77,6 +79,7 @@ const MessageSimpleWithContext = <
// TODO: remove this "passthrough" in the next
// major release and use the new default instead
MessageActions = MessageOptions,
MessageBlocked = DefaultMessageBlocked,
MessageDeleted = DefaultMessageDeleted,
MessageBouncePrompt = DefaultMessageBouncePrompt,
MessageRepliesCountButton = DefaultMessageRepliesCountButton,
Expand All @@ -102,6 +105,10 @@ const MessageSimpleWithContext = <
return <MessageDeleted message={message} />;
}

if (isMessageBlocked(message)) {
return <MessageBlocked />;
}

const showMetadata = !groupedByUser || endOfGroup;
const showReplyCountButton = !threadList && !!message.reply_count;
const allowRetry = message.status === 'failed' && message.errorStatusCode !== 403;
Expand Down
7 changes: 7 additions & 0 deletions src/components/Message/utils.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -496,6 +496,13 @@ export const isMessageBounced = <
(message.moderation_details?.action === 'MESSAGE_RESPONSE_ACTION_BOUNCE' ||
message.moderation?.action === 'bounce');

export const isMessageBlocked = (
message: Pick<StreamMessage, 'type' | 'moderation' | 'moderation_details'>,
) =>
message.type === 'error' &&
(message.moderation_details?.action === 'MESSAGE_RESPONSE_ACTION_REMOVE' ||
message.moderation?.action === 'remove');

export const isMessageEdited = <
StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
>(
Expand Down
2 changes: 2 additions & 0 deletions src/context/ComponentContext.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,8 @@ export type ComponentContextValue<
MessageActions?: React.ComponentType;
/** Custom UI component to display the contents of a bounced message modal. Usually it allows to retry, edit, or delete the message. Defaults to and accepts the same props as: [MessageBouncePrompt](https://github.com/GetStream/stream-chat-react/blob/master/src/components/MessageBounce/MessageBouncePrompt.tsx) */
MessageBouncePrompt?: React.ComponentType<MessageBouncePromptProps>;
/** Custom UI component for a moderation-blocked message, defaults to and accepts same props as: [MessageBlocked](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Message/MessageBlocked.tsx) */
MessageBlocked?: React.ComponentType;
/** Custom UI component for a deleted message, defaults to and accepts same props as: [MessageDeleted](https://github.com/GetStream/stream-chat-react/blob/master/src/components/Message/MessageDeleted.tsx) */
MessageDeleted?: React.ComponentType<MessageDeletedProps<StreamChatGenerics>>;
MessageListMainPanel?: React.ComponentType<PropsWithChildrenOnly>;
Expand Down
1 change: 1 addition & 0 deletions src/i18n/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
"Message deleted": "Nachricht gelöscht",
"Message has been successfully flagged": "Nachricht wurde erfolgreich gemeldet",
"Message pinned": "Nachricht angeheftet",
"Message was blocked by moderation policies": "Nachricht wurde durch moderationsrichtlinien blockiert",
"Messages have been marked unread.": "Nachrichten wurden als ungelesen markiert.",
"Missing permissions to upload the attachment": "Fehlende Berechtigungen zum Hochladen des Anhangs",
"Multiple answers": "Mehrere Antworten",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
"Message deleted": "Message deleted",
"Message has been successfully flagged": "Message has been successfully flagged",
"Message pinned": "Message pinned",
"Message was blocked by moderation policies": "Message was blocked by moderation policies",
"Messages have been marked unread.": "Messages have been marked unread.",
"Missing permissions to upload the attachment": "Missing permissions to upload the attachment",
"Multiple answers": "Multiple answers",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
"Message deleted": "Mensaje eliminado",
"Message has been successfully flagged": "El mensaje se marcó correctamente",
"Message pinned": "Mensaje fijado",
"Message was blocked by moderation policies": "El mensaje fue bloqueado por las políticas de moderación",
"Messages have been marked unread.": "Los mensajes han sido marcados como no leídos.",
"Missing permissions to upload the attachment": "Faltan permisos para subir el archivo adjunto",
"Multiple answers": "Múltiples respuestas",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
"Message deleted": "Message supprimé",
"Message has been successfully flagged": "Le message a été signalé avec succès",
"Message pinned": "Message épinglé",
"Message was blocked by moderation policies": "Le message a été bloqué par les politiques de modération",
"Messages have been marked unread.": "Les messages ont été marqués comme non lus.",
"Missing permissions to upload the attachment": "Autorisations manquantes pour télécharger la pièce jointe",
"Multiple answers": "Réponses multiples",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/hi.json
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@
"Message deleted": "मैसेज हटा दिया गया",
"Message has been successfully flagged": "मैसेज को फ्लैग कर दिया गया है",
"Message pinned": "संदेश पिन किया गया",
"Message was blocked by moderation policies": "संदेश को मॉडरेशन नीतियों द्वारा ब्लॉक कर दिया गया है",
"Messages have been marked unread.": "संदेशों को अपठित चिह्नित किया गया है।",
"Missing permissions to upload the attachment": "अटैचमेंट अपलोड करने के लिए अनुमतियां गायब",
"Multiple answers": "कई उत्तर",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/it.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
"Message deleted": "Messaggio cancellato",
"Message has been successfully flagged": "Il messaggio è stato segnalato con successo",
"Message pinned": "Messaggio bloccato",
"Message was blocked by moderation policies": "Il messaggio è stato bloccato dalle politiche di moderazione",
"Messages have been marked unread.": "I messaggi sono stati contrassegnati come non letti.",
"Missing permissions to upload the attachment": "Autorizzazioni mancanti per caricare l'allegato",
"Multiple answers": "Risposte multiple",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/ja.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
"Message deleted": "メッセージが削除されました",
"Message has been successfully flagged": "メッセージに正常にフラグが付けられました",
"Message pinned": "メッセージにピンが付けられました",
"Message was blocked by moderation policies": "メッセージはモデレーションポリシーによってブロックされました",
"Messages have been marked unread.": "メッセージは未読としてマークされました。",
"Missing permissions to upload the attachment": "添付ファイルをアップロードするための許可がありません",
"Multiple answers": "複数回答",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/ko.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
"Message deleted": "메시지가 삭제되었습니다.",
"Message has been successfully flagged": "메시지에 플래그가 지정되었습니다.",
"Message pinned": "메시지 핀했습니다",
"Message was blocked by moderation policies": "메시지가 관리 정책에 의해 차단되었습니다.",
"Messages have been marked unread.": "메시지가 읽지 않음으로 표시되었습니다.",
"Missing permissions to upload the attachment": "첨부 파일을 업로드하려면 권한이 필요합니다",
"Multiple answers": "복수 응답",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/nl.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
"Message deleted": "Bericht verwijderd",
"Message has been successfully flagged": "Bericht is succesvol gemarkeerd",
"Message pinned": "Bericht vastgezet",
"Message was blocked by moderation policies": "Bericht is geblokkeerd door moderatiebeleid",
"Messages have been marked unread.": "Berichten zijn gemarkeerd als ongelezen.",
"Missing permissions to upload the attachment": "Missende toestemmingen om de bijlage te uploaden",
"Multiple answers": "Meerdere antwoorden",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/pt.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
"Message deleted": "Mensagem apagada",
"Message has been successfully flagged": "A mensagem foi reportada com sucesso",
"Message pinned": "Mensagem fixada",
"Message was blocked by moderation policies": "A mensagem foi bloqueada pelas políticas de moderação",
"Messages have been marked unread.": "Mensagens foram marcadas como não lidas.",
"Missing permissions to upload the attachment": "Faltando permissões para enviar o anexo",
"Multiple answers": "Múltiplas respostas",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/ru.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
"Message deleted": "Сообщение удалено",
"Message has been successfully flagged": "Жалоба на сообщение была принята",
"Message pinned": "Сообщение закреплено",
"Message was blocked by moderation policies": "Сообщение было заблокировано модерацией",
"Messages have been marked unread.": "Сообщения были отмечены как непрочитанные.",
"Missing permissions to upload the attachment": "Отсутствуют разрешения для загрузки вложения",
"Multiple answers": "Несколько ответов",
Expand Down
1 change: 1 addition & 0 deletions src/i18n/tr.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
"Message deleted": "Mesaj silindi",
"Message has been successfully flagged": "Mesaj başarıyla bayraklandı",
"Message pinned": "Mesaj sabitlendi",
"Message was blocked by moderation policies": "Mesaj moderasyon politikaları tarafından engellendi",
"Messages have been marked unread.": "Mesajlar okunmamış olarak işaretlendi.",
"Missing permissions to upload the attachment": "Ek yüklemek için izinler eksik",
"Multiple answers": "Çoklu cevaplar",
Expand Down
8 changes: 4 additions & 4 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2438,10 +2438,10 @@
resolved "https://registry.yarnpkg.com/@stream-io/escape-string-regexp/-/escape-string-regexp-5.0.1.tgz#362505c92799fea6afe4e369993fbbda8690cc37"
integrity sha512-qIaSrzJXieZqo2fZSYTdzwSbZgHHsT3tkd646vvZhh4fr+9nO4NlvqGmPF43Y+OfZiWf+zYDFgNiPGG5+iZulQ==

"@stream-io/stream-chat-css@^5.7.2":
version "5.7.2"
resolved "https://registry.yarnpkg.com/@stream-io/stream-chat-css/-/stream-chat-css-5.7.2.tgz#0bd05bb62e9f43d6158af9c3b57798aab4bf2be4"
integrity sha512-AI5uoG9PHaTavkmEMLD1UXHAKD5L4CrGl/FWXH8RK5yldnnHh+4MSeyrPG4IZrCGNd1jqcZ9tYN1lRoY7jUwGA==
"@stream-io/stream-chat-css@^5.8.0":
version "5.8.0"
resolved "https://registry.yarnpkg.com/@stream-io/stream-chat-css/-/stream-chat-css-5.8.0.tgz#6c0032544cfbc59447f71ef88b3c0736aaa676a8"
integrity sha512-p9Z1Ktx3E+o+7EFubNyZWNjg26UNgux8IAK0nhoC04t47Cok5pSHcUbPmTgiICSPXYNNEcDxrCil5crM0ItUUA==

"@stream-io/transliterate@^1.5.5":
version "1.5.5"
Expand Down
Loading