@@ -74,16 +74,23 @@ type MarkDownRenderers = {
7474const markDownRenderers : { [ nodeType : string ] : React . ElementType } = {
7575 // eslint-disable-next-line react/display-name
7676 link : ( props : MarkDownRenderers ) => {
77- if (
78- ! props . href ||
79- ( ! props . href . startsWith ( 'http' ) && ! props . href . startsWith ( 'mailto:' ) )
80- ) {
81- return props . children ;
77+ const { children, href } = props ;
78+
79+ const isEmail = href ?. startsWith ( 'mailto:' ) ;
80+ const isUrl = href ?. startsWith ( 'http' ) ;
81+
82+ if ( ! href || ( ! isEmail && ! isUrl ) ) {
83+ return children ;
8284 }
8385
8486 return (
85- < a href = { props . href } rel = 'nofollow noreferrer noopener' target = '_blank' >
86- { props . children }
87+ < a
88+ className = { `${ isUrl ? 'str-chat__message-url-link' : '' } ` }
89+ href = { href }
90+ rel = 'nofollow noreferrer noopener'
91+ target = '_blank'
92+ >
93+ { children }
8794 </ a >
8895 ) ;
8996 } ,
@@ -144,18 +151,24 @@ const mentionsMarkdownPlugin = <
144151 return transform ;
145152} ;
146153
147- type MentionProps < Us extends DefaultUserType < Us > = DefaultUserType > = {
154+ export type MentionProps < Us extends DefaultUserType < Us > = DefaultUserType > = {
148155 mentioned_user : UserResponse < Us > ;
149156} ;
150157
151158const Mention = < Us extends DefaultUserType < Us > = DefaultUserType > (
152159 props : PropsWithChildren < Us > ,
153160) => < span className = 'str-chat__message-mention' > { props . children } </ span > ;
154161
162+ export type RenderTextOptions = {
163+ customMarkDownRenderers ?: {
164+ [ nodeType : string ] : React . ElementType ;
165+ } ;
166+ } ;
167+
155168export const renderText = < Us extends DefaultUserType < Us > = DefaultUserType > (
156169 text ?: string ,
157170 mentioned_users ?: UserResponse < Us > [ ] ,
158- MentionComponent : React . ComponentType < MentionProps < Us > > = Mention ,
171+ options : RenderTextOptions = { } ,
159172) => {
160173 // take the @ mentions and turn them into markdown?
161174 // translate links
@@ -188,7 +201,8 @@ export const renderText = <Us extends DefaultUserType<Us> = DefaultUserType>(
188201 if ( noParsingNeeded . length > 0 || linkIsInBlock ) return ;
189202
190203 const displayLink =
191- type === 'email' ? value : truncate ( value . replace ( detectHttp , '' ) , 20 ) ;
204+ type === 'email' ? value : value . replace ( detectHttp , '' ) ;
205+
192206 newText = newText . replace ( value , `[${ displayLink } ](${ encodeURI ( href ) } )` ) ;
193207 } ) ;
194208
@@ -199,8 +213,9 @@ export const renderText = <Us extends DefaultUserType<Us> = DefaultUserType>(
199213 }
200214
201215 const renderers = {
216+ mention : Mention ,
202217 ...markDownRenderers ,
203- mention : MentionComponent ,
218+ ... options . customMarkDownRenderers ,
204219 } ;
205220
206221 return (
0 commit comments