unknownEvent.tsx (3654B)
1 import { memo } from "react"; 2 import { IRoomEvent } from "../../app/sdk/api/events"; 3 import { FC } from "react"; 4 import Linkify from "linkify-react"; 5 import { OnlineState } from "../../app/sdk/api/otherEnums"; 6 import { Room } from "../../app/sdk/room"; 7 import { MessageWrapper } from "./wrapper"; 8 9 type UnknownEventProps = { 10 /** 11 * The event to render 12 */ 13 event: IRoomEvent; 14 /** 15 * The room of the event to display 16 */ 17 room?: Room; 18 /** 19 * If the previous event was sent by the same user 20 */ 21 hasPreviousEvent?: boolean; 22 }; 23 24 const linkifyOptions = { 25 defaultProtocol: "https", 26 rel: "noopener", 27 target: "_blank", 28 className: "text-blue-500 hover:text-blue-700 active:text-blue-700 visited:text-blue-500" 29 } 30 31 const UnknownEvent: FC<UnknownEventProps> = memo(({ event, room, hasPreviousEvent }) => { 32 return ( 33 <MessageWrapper 34 displayname={room?.getMemberName(event.sender) || event.sender} 35 avatar_url={room?.getMemberAvatar(event.sender) || ""} 36 onlineState={room?.presence || OnlineState.Unknown} 37 isBot={room?.isBot(event.sender) || false} 38 dm={room?.isDM() || false} 39 hasPreviousEvent={hasPreviousEvent} 40 > 41 <Linkify options={linkifyOptions} as='p' className="whitespace-break-spaces text-black text-base font-normal">{JSON.stringify(event, null, 4)}</Linkify> 42 </MessageWrapper> 43 ) 44 }); 45 46 export default UnknownEvent; 47 48 type UndecryptableEventProps = { 49 /** 50 * The event to render 51 */ 52 event: IRoomEvent; 53 /** 54 * The room of the event to display 55 */ 56 room?: Room; 57 /** 58 * If the previous event was sent by the same user 59 */ 60 hasPreviousEvent?: boolean; 61 }; 62 63 export const UndecryptableEvent: FC<UndecryptableEventProps> = memo(({ event, room, hasPreviousEvent }) => { 64 return ( 65 <MessageWrapper 66 displayname={room?.getMemberName(event.sender) || event.sender} 67 avatar_url={room?.getMemberAvatar(event.sender) || ""} 68 onlineState={room?.presence || OnlineState.Unknown} 69 isBot={room?.isBot(event.sender) || false} 70 dm={room?.isDM() || false} 71 hasPreviousEvent={hasPreviousEvent} 72 > 73 <Linkify options={linkifyOptions} as='p' className="whitespace-pre-wrap text-base font-normal text-orange-600">Unable to decrypt event</Linkify> 74 </MessageWrapper> 75 ) 76 }); 77 78 type RedactedEventProps = { 79 /** 80 * The original event 81 */ 82 event: IRoomEvent; 83 /** 84 * The event to render 85 */ 86 redacted_because?: string; 87 /** 88 * The room of the event to display 89 */ 90 room?: Room; 91 /** 92 * If the previous event was sent by the same user 93 */ 94 hasPreviousEvent?: boolean; 95 }; 96 97 export const RedactedEvent: FC<RedactedEventProps> = memo(({ event, redacted_because, room, hasPreviousEvent }) => { 98 return ( 99 <MessageWrapper 100 displayname={room?.getMemberName(event.sender) || event.sender} 101 avatar_url={room?.getMemberAvatar(event.sender) || ""} 102 onlineState={room?.presence || OnlineState.Unknown} 103 isBot={room?.isBot(event.sender) || false} 104 dm={room?.isDM() || false} 105 hasPreviousEvent={hasPreviousEvent} 106 > 107 {redacted_because && <p className="whitespace-pre-wrap text-base font-normal text-blue-600 italic">Message was redacted: {redacted_because}</p>} 108 {!redacted_because && <p className="whitespace-pre-wrap text-base font-normal text-blue-600 italic">Message was redacted</p>} 109 </MessageWrapper> 110 ) 111 }); 112