Make UserDetail work independently

This commit is contained in:
Chi Vinh Le
2017-07-27 21:44:29 +07:00
parent b00435bfe3
commit 57fb77008a
18 changed files with 591 additions and 148 deletions
@@ -0,0 +1,27 @@
import React from 'react';
import Highlighter from 'react-highlight-words';
import Linkify from 'react-linkify';
const linkify = new Linkify();
export default ({suspectWords, bannedWords, body, ...rest}) => {
const links = linkify.getMatches(body);
const linkText = links ? links.map((link) => link.raw) : [];
// since words are checked against word boundaries on the backend,
// should be the behavior on the front end as well.
// currently the highlighter plugin does not support out of the box.
const searchWords = [...suspectWords, ...bannedWords]
.filter((w) => {
return new RegExp(`(^|\\s)${w}(\\s|$)`, 'i').test(body);
})
.concat(linkText);
return (
<Highlighter
{...rest}
searchWords={searchWords}
textToHighlight={body}
/>
);
};
@@ -0,0 +1,13 @@
import React from 'react';
import Linkify from 'react-linkify';
const linkify = new Linkify();
export default ({text, children}) => {
const hasLinks = !!linkify.getMatches(text);
if (!hasLinks) {
return null;
}
return React.Children.only(children);
};
@@ -192,7 +192,6 @@
.minimal {
width: 45px;
min-width: 0;
float: left;
}
.approve__active {