@@ -47,21 +47,53 @@ export default function OGMessageItemBody({
47
47
>
48
48
< p className = "sendbird-og-message-item-body__text-bubble" >
49
49
{
50
- message ?. message . split ( ' ' ) . map ( ( word : string ) => (
51
- isUrl ( word )
52
- ? (
53
- < LinkLabel
54
- className = "sendbird-og-message-item-body__text-bubble__message"
55
- key = { uuidv4 ( ) }
56
- src = { word }
57
- type = { LabelTypography . BODY_1 }
58
- color = { isByMe ? LabelColors . ONCONTENT_1 : LabelColors . ONBACKGROUND_1 }
59
- >
60
- { word }
61
- </ LinkLabel >
62
- )
63
- : ( `${ word } ` )
64
- ) )
50
+ message ?. message . split ( ' ' ) . map ( ( word : string ) => {
51
+ const urlRegex = new RegExp ( "([a-zA-Z0-9]+://)?([a-zA-Z0-9_]+:[a-zA-Z0-9_]+@)?([a-zA-Z0-9.-]+\\.[A-Za-z]{2,4})(:[0-9]+)?(/.*)?" ) ;
52
+ const targetUrl = urlRegex . exec ( word ) ?. [ 0 ] ;
53
+ const stringUrl = { front : '' , url : '' , back : '' } ;
54
+ if ( targetUrl ) {
55
+ const targetUrlIndex = word . indexOf ( targetUrl ) ;
56
+ if ( targetUrlIndex > 0 ) {
57
+ stringUrl . front = word . slice ( 0 , targetUrlIndex ) ;
58
+ }
59
+ stringUrl . url = word . slice ( targetUrlIndex , targetUrlIndex + targetUrl . length ) ;
60
+ if ( targetUrlIndex + targetUrl . length < word . length ) {
61
+ stringUrl . back = word . slice ( targetUrlIndex + targetUrl . length ) ;
62
+ }
63
+ }
64
+ if ( targetUrl ) {
65
+ return [
66
+ stringUrl . front ? stringUrl . front : '' ,
67
+ stringUrl . url ? (
68
+ < LinkLabel
69
+ className = "sendbird-word__url"
70
+ key = { uuidv4 ( ) }
71
+ src = { stringUrl . url }
72
+ type = { LabelTypography . BODY_1 }
73
+ color = { isByMe ? LabelColors . ONCONTENT_1 : LabelColors . ONBACKGROUND_1 }
74
+ >
75
+ { stringUrl . url }
76
+ </ LinkLabel >
77
+ ) : null ,
78
+ stringUrl . back ? stringUrl . back : '' ,
79
+ ] ;
80
+ }
81
+ return (
82
+ isUrl ( word )
83
+ ? (
84
+ < LinkLabel
85
+ className = "sendbird-og-message-item-body__text-bubble__message"
86
+ key = { uuidv4 ( ) }
87
+ src = { word }
88
+ type = { LabelTypography . BODY_1 }
89
+ color = { isByMe ? LabelColors . ONCONTENT_1 : LabelColors . ONBACKGROUND_1 }
90
+ >
91
+ { word }
92
+ </ LinkLabel >
93
+ )
94
+ : ( `${ word } ` )
95
+ ) ;
96
+ } )
65
97
}
66
98
{
67
99
isEditedMessage ( message ) && (
0 commit comments