Skip to content

Commit ecfab4a

Browse files
Merge pull request #548 from GetStream/message-actions-update
Message actions update
2 parents c7a83b8 + 3ecec47 commit ecfab4a

File tree

4 files changed

+164
-60
lines changed

4 files changed

+164
-60
lines changed

src/components/Channel/Channel.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@ export type ChannelPropsWithContext<
239239
| 'InlineUnreadIndicator'
240240
| 'markdownRules'
241241
| 'Message'
242+
| 'messageActions'
242243
| 'MessageAvatar'
243244
| 'MessageContent'
244245
| 'messageContentOrder'
@@ -444,6 +445,7 @@ const ChannelWithContext = <
444445
messageId,
445446
maxNumberOfFiles = 10,
446447
Message = MessageDefault,
448+
messageActions,
447449
MessageAvatar = MessageAvatarDefault,
448450
MessageContent = MessageContentDefault,
449451
messageContentOrder = ['gallery', 'files', 'text', 'attachments'],
@@ -1475,6 +1477,7 @@ const ChannelWithContext = <
14751477
loadMoreRecent,
14761478
markdownRules,
14771479
Message,
1480+
messageActions,
14781481
MessageAvatar,
14791482
MessageContent,
14801483
messageContentOrder,

src/components/Channel/hooks/useCreateMessagesContext.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ export const useCreateMessagesContext = <
6363
loadMoreRecent,
6464
markdownRules,
6565
Message,
66+
messageActions,
6667
MessageAvatar,
6768
MessageContent,
6869
messageContentOrder,
@@ -170,6 +171,7 @@ export const useCreateMessagesContext = <
170171
loadMoreRecent,
171172
markdownRules,
172173
Message,
174+
messageActions,
173175
MessageAvatar,
174176
MessageContent,
175177
messageContentOrder,

src/components/Message/Message.tsx

Lines changed: 97 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ export type MessagePropsWithContext<
176176
| 'handleReply'
177177
| 'handleRetry'
178178
| 'handleThreadReply'
179+
| 'messageActions'
179180
| 'messageContentOrder'
180181
| 'MessageSimple'
181182
| 'muteUser'
@@ -206,10 +207,9 @@ export type MessagePropsWithContext<
206207
enableLongPress?: boolean;
207208
goToMessage?: (messageId: string) => void;
208209
/**
209-
* Array of allowed actions on message
210+
* Array of allowed actions or null on message, this can also be a function returning the array.
210211
* If all the actions need to be disabled an empty array should be provided as value of prop
211212
*/
212-
messageActions?: MessageAction[];
213213
/**
214214
* You can call methods available on the Message
215215
* component such as handleEdit, handleDelete, handleAction etc.
@@ -584,6 +584,8 @@ const MessageWithContext = <
584584

585585
const blockUser = blockUserProp
586586
? blockUserProp(message)
587+
: blockUserProp === null
588+
? null
587589
: {
588590
action: () => async () => {
589591
setOverlay('none');
@@ -604,6 +606,8 @@ const MessageWithContext = <
604606

605607
const copyMessage = copyMessageProp
606608
? copyMessageProp(message)
609+
: copyMessageProp === null
610+
? null
607611
: {
608612
// using depreciated Clipboard from react-native until expo supports the community version or their own
609613
action: () => {
@@ -619,6 +623,8 @@ const MessageWithContext = <
619623

620624
const deleteMessage = deleteMessageProp
621625
? deleteMessageProp(message)
626+
: deleteMessageProp === null
627+
? null
622628
: {
623629
action: () => {
624630
setOverlay('alert');
@@ -652,6 +658,8 @@ const MessageWithContext = <
652658

653659
const editMessage = editMessageProp
654660
? editMessageProp(message)
661+
: editMessageProp === null
662+
? null
655663
: {
656664
action: () => {
657665
setOverlay('none');
@@ -666,6 +674,8 @@ const MessageWithContext = <
666674

667675
const flagMessage = flagMessageProp
668676
? flagMessageProp(message)
677+
: flagMessageProp === null
678+
? null
669679
: {
670680
action: () => {
671681
setOverlay('alert');
@@ -757,6 +767,8 @@ const MessageWithContext = <
757767
);
758768
const muteUser = muteUserProp
759769
? muteUserProp(message)
770+
: muteUserProp === null
771+
? null
760772
: {
761773
action: async () => {
762774
setOverlay('none');
@@ -777,6 +789,8 @@ const MessageWithContext = <
777789

778790
const reply = replyProp
779791
? replyProp(message)
792+
: replyProp === null
793+
? null
780794
: {
781795
action: () => {
782796
setOverlay('none');
@@ -791,6 +805,8 @@ const MessageWithContext = <
791805

792806
const retry = retryProp
793807
? retryProp(message)
808+
: retryProp === null
809+
? null
794810
: {
795811
action: async () => {
796812
setOverlay('none');
@@ -822,6 +838,8 @@ const MessageWithContext = <
822838

823839
const threadReply = threadReplyProp
824840
? threadReplyProp(message)
841+
: threadReplyProp === null
842+
? null
825843
: {
826844
action: () => {
827845
setOverlay('none');
@@ -836,58 +854,98 @@ const MessageWithContext = <
836854

837855
const isThreadMessage = threadList || !!message.parent_id;
838856

839-
setData({
840-
alignment,
841-
clientId: client.userID,
842-
files: attachments.files,
843-
groupStyles,
844-
handleReaction: reactionsEnabled ? handleReaction : undefined,
845-
images: attachments.images,
846-
message,
847-
messageActions: messageActionsProp
857+
const messageActions =
858+
typeof messageActionsProp === 'function'
859+
? messageActionsProp({
860+
blockUser,
861+
canModifyMessage,
862+
copyMessage,
863+
deleteMessage,
864+
editMessage,
865+
error,
866+
flagMessage,
867+
isMyMessage,
868+
isThreadMessage,
869+
message,
870+
messageReactions,
871+
muteUser,
872+
repliesEnabled,
873+
reply,
874+
retry,
875+
threadReply,
876+
})
877+
: messageActionsProp
848878
? messageActionsProp
849-
: error
879+
: error && isMyMessage
850880
? [retry, editMessage, deleteMessage]
851881
: messageReactions
852882
? undefined
853883
: canModifyMessage
854884
? isThreadMessage
855885
? message.text
856-
? [editMessage, copyMessage, flagMessage, deleteMessage]
857-
: [editMessage, flagMessage, deleteMessage]
886+
? isMyMessage
887+
? [editMessage, copyMessage, deleteMessage]
888+
: [copyMessage, flagMessage]
889+
: isMyMessage
890+
? [editMessage, deleteMessage]
891+
: [flagMessage]
858892
: message.text
859893
? repliesEnabled
860-
? [
861-
reply,
862-
threadReply,
863-
editMessage,
864-
copyMessage,
865-
flagMessage,
866-
deleteMessage,
867-
]
868-
: [editMessage, copyMessage, flagMessage, deleteMessage]
894+
? isMyMessage
895+
? [reply, threadReply, editMessage, copyMessage, deleteMessage]
896+
: [reply, threadReply, copyMessage, flagMessage]
897+
: isMyMessage
898+
? [editMessage, copyMessage, deleteMessage]
899+
: [copyMessage]
869900
: repliesEnabled
870-
? [reply, threadReply, editMessage, flagMessage, deleteMessage]
871-
: [editMessage, flagMessage, deleteMessage]
901+
? isMyMessage
902+
? [reply, threadReply, editMessage, deleteMessage]
903+
: [reply, threadReply, flagMessage]
904+
: isMyMessage
905+
? [editMessage, deleteMessage]
906+
: [flagMessage]
872907
: isThreadMessage
873908
? message.text
874-
? [copyMessage, muteUser, flagMessage, blockUser, deleteMessage]
875-
: [muteUser, blockUser, flagMessage, deleteMessage]
909+
? isMyMessage
910+
? [copyMessage, deleteMessage]
911+
: [copyMessage, muteUser, flagMessage, blockUser]
912+
: isMyMessage
913+
? [deleteMessage]
914+
: [muteUser, blockUser, flagMessage]
876915
: message.text
877916
? repliesEnabled
878-
? [
879-
reply,
880-
threadReply,
881-
copyMessage,
882-
muteUser,
883-
flagMessage,
884-
blockUser,
885-
deleteMessage,
886-
]
887-
: [copyMessage, muteUser, flagMessage, blockUser, deleteMessage]
917+
? isMyMessage
918+
? [reply, threadReply, copyMessage, deleteMessage]
919+
: [
920+
reply,
921+
threadReply,
922+
copyMessage,
923+
muteUser,
924+
flagMessage,
925+
blockUser,
926+
]
927+
: isMyMessage
928+
? [copyMessage, deleteMessage]
929+
: [copyMessage, muteUser, flagMessage, blockUser]
888930
: repliesEnabled
889-
? [reply, threadReply, muteUser, blockUser, deleteMessage]
890-
: [muteUser, blockUser, deleteMessage],
931+
? isMyMessage
932+
? [reply, threadReply, deleteMessage]
933+
: [reply, threadReply, muteUser, blockUser]
934+
: isMyMessage
935+
? [deleteMessage]
936+
: [muteUser, blockUser];
937+
938+
setData({
939+
alignment,
940+
clientId: client.userID,
941+
files: attachments.files,
942+
groupStyles,
943+
handleReaction: reactionsEnabled ? handleReaction : undefined,
944+
images: attachments.images,
945+
message,
946+
messageActions: messageActions?.filter(Boolean) as
947+
| MessageAction[]
948+
| undefined,
891949
messageReactionTitle:
892950
!error && messageReactions ? t('Message Reactions') : undefined,
893951
messagesContext: { ...messagesContext, messageContentOrder },

0 commit comments

Comments
 (0)