@@ -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