Prevent re-render dangerouslySetInnerHTML

This commit is contained in:
Lim Chee Aun 2024-02-06 17:30:10 +08:00
parent 4f28d3cc6d
commit 436277c6b4

View file

@ -106,6 +106,43 @@ function getPostText(status) {
); );
} }
const PostContent = memo(
({ post, instance, previewMode }) => {
const { content, emojis, language, mentions, url } = post;
return (
<div
lang={language}
dir="auto"
class="inner-content"
onClick={handleContentLinks({
mentions,
instance,
previewMode,
statusURL: url,
})}
dangerouslySetInnerHTML={{
__html: enhanceContent(content, {
emojis,
postEnhanceDOM: (dom) => {
// Remove target="_blank" from links
dom.querySelectorAll('a.u-url[target="_blank"]').forEach((a) => {
if (!/http/i.test(a.innerText.trim())) {
a.removeAttribute('target');
}
});
},
}),
}}
/>
);
},
(oldProps, newProps) => {
const { content: oldContent } = oldProps;
const { content: newContent } = newProps;
return oldContent === newContent;
},
);
function Status({ function Status({
statusID, statusID,
status, status,
@ -1680,59 +1717,10 @@ function Status({
ref={contentRef} ref={contentRef}
data-read-more={readMoreText} data-read-more={readMoreText}
> >
<div <PostContent
lang={language} post={status}
dir="auto" instance={instance}
class="inner-content" previewMode={previewMode}
onClick={handleContentLinks({
mentions,
instance,
previewMode,
statusURL: url,
})}
dangerouslySetInnerHTML={{
__html: enhanceContent(content, {
emojis,
postEnhanceDOM: (dom) => {
// Remove target="_blank" from links
dom
.querySelectorAll('a.u-url[target="_blank"]')
.forEach((a) => {
if (!/http/i.test(a.innerText.trim())) {
a.removeAttribute('target');
}
});
// if (previewMode) return;
// Unfurl Mastodon links
// Array.from(
// dom.querySelectorAll(
// 'a[href]:not(.u-url):not(.mention):not(.hashtag)',
// ),
// )
// .filter((a) => {
// const url = a.href;
// const isPostItself =
// url === status.url || url === status.uri;
// return !isPostItself && isMastodonLinkMaybe(url);
// })
// .forEach((a, i) => {
// unfurlMastodonLink(currentInstance, a.href).then(
// (result) => {
// if (!result) return;
// a.removeAttribute('target');
// if (!sKey) return;
// if (!Array.isArray(states.statusQuotes[sKey])) {
// states.statusQuotes[sKey] = [];
// }
// if (!states.statusQuotes[sKey][i]) {
// states.statusQuotes[sKey].splice(i, 0, result);
// }
// },
// );
// });
},
}),
}}
/> />
<QuoteStatuses id={id} instance={instance} level={quoted} /> <QuoteStatuses id={id} instance={instance} level={quoted} />
</div> </div>