| 48 | const DEFAULT_COLLAPSE_CONTENT_LENGTH = 500; |
| 49 | |
| 50 | export const MessageContents = async ( |
| 51 | props: Pick<MessageProps, 'collapseContent' | 'message'> & { |
| 52 | className?: string; |
| 53 | }, |
| 54 | ) => { |
| 55 | const { message, collapseContent } = props; |
| 56 | |
| 57 | const collapseBy = |
| 58 | typeof collapseContent === 'number' |
| 59 | ? collapseContent |
| 60 | : DEFAULT_COLLAPSE_CONTENT_LENGTH; |
| 61 | |
| 62 | const shouldCollapse = |
| 63 | collapseContent !== false && |
| 64 | collapseContent !== undefined && |
| 65 | (message.content.length > collapseBy || |
| 66 | (message.content.match(/\n/g)?.length ?? 0 > 5)); |
| 67 | const trimmedText = shouldCollapse |
| 68 | ? (message.content.match(/\n/g)?.length ?? 0 > 5) |
| 69 | ? message.content.split('\n').slice(0, 5).join('\n') + '...' |
| 70 | : `${message.content.slice(0, collapseBy).trim()}...` |
| 71 | : message.content; |
| 72 | const discordMarkdownAsHTML = await parse(trimmedText); |
| 73 | return ( |
| 74 | <div |
| 75 | className={cn( |
| 76 | 'max-w-4xl whitespace-break-spaces pt-2 font-body text-primary [overflow-wrap:_anywhere]', |
| 77 | props.className, |
| 78 | )} |
| 79 | > |
| 80 | {discordMarkdownAsHTML} |
| 81 | </div> |
| 82 | ); |
| 83 | }; |
| 84 | |
| 85 | export const MessageEmbeds = (props: { message: MessageProps['message'] }) => { |
| 86 | if (props.message.embeds?.length === 0) return null; |