1
- import React , { useState } from 'react' ;
1
+ import React , { useState , useMemo } from 'react' ;
2
2
import PropTypes from 'prop-types' ;
3
3
4
4
import { injectIntl , intlShape } from '@edx/frontend-platform/i18n' ;
@@ -18,8 +18,22 @@ const WelcomeMessage = ({ courseId, intl }) => {
18
18
19
19
const [ display , setDisplay ] = useState ( true ) ;
20
20
21
- const shortWelcomeMessageHtml = truncate ( welcomeMessageHtml , 100 , { byWords : true , keepWhitespaces : true } ) ;
22
- const messageCanBeShortened = shortWelcomeMessageHtml . length < welcomeMessageHtml . length ;
21
+ // welcomeMessageHtml can contain comments or malformatted HTML which can impact the length that determines
22
+ // messageCanBeShortened. We clean it by calling truncate with a length of welcomeMessageHtml.length which
23
+ // will not result in a truncation but a formatting into 'truncate-html' canonical format.
24
+ const cleanedWelcomeMessageHtml = useMemo (
25
+ ( ) => truncate ( welcomeMessageHtml , welcomeMessageHtml . length , { keepWhitespaces : true } ) ,
26
+ [ welcomeMessageHtml ] ,
27
+ ) ;
28
+ const shortWelcomeMessageHtml = useMemo (
29
+ ( ) => truncate ( cleanedWelcomeMessageHtml , 100 , { byWords : true , keepWhitespaces : true } ) ,
30
+ [ cleanedWelcomeMessageHtml ] ,
31
+ ) ;
32
+ const messageCanBeShortened = useMemo (
33
+ ( ) => ( shortWelcomeMessageHtml . length < cleanedWelcomeMessageHtml . length ) ,
34
+ [ cleanedWelcomeMessageHtml , shortWelcomeMessageHtml ] ,
35
+ ) ;
36
+
23
37
const [ showShortMessage , setShowShortMessage ] = useState ( messageCanBeShortened ) ;
24
38
const dispatch = useDispatch ( ) ;
25
39
@@ -63,7 +77,7 @@ const WelcomeMessage = ({ courseId, intl }) => {
63
77
className = "inline-link"
64
78
data-testid = "long-welcome-message-iframe"
65
79
key = "full-html"
66
- html = { welcomeMessageHtml }
80
+ html = { cleanedWelcomeMessageHtml }
67
81
title = { intl . formatMessage ( messages . welcomeMessage ) }
68
82
/>
69
83
) }
0 commit comments