@kiwicom/smart-faq
Version:
75 lines (61 loc) • 1.94 kB
JavaScript
// @flow
import React from 'react';
import { ThemeConsumer } from 'styled-components';
import LogContext from '@kiwicom/nitro/lib/services/log/context';
import type { Context as LogContextType } from '@kiwicom/nitro/lib/services/log/context';
import { events } from '../../const/events';
type Props = {|
children: string,
|};
const ArticleContentStyles = ({ theme }) => (
<style
dangerouslySetInnerHTML={{
__html: `
.FAQContentRender {
font-family: ${theme.orbit.fontFamily};
font-size: ${theme.orbit.fontSizeTextNormal};
font-weight: ${theme.orbit.fontWeightNormal};
color: ${theme.orbit.colorTextPrimary};
line-height: ${theme.orbit.lineHeightText};
text-align: left;
margin: 0;
}`,
}}
/>
);
const renderArticleContent = rawContent => {
return rawContent.replace(/<a href=/g, '<a target="_blank" href=');
};
class FAQContentRender extends React.Component<Props> {
context: LogContextType;
static contextType = LogContext;
handleClick = (e: SyntheticMouseEvent<HTMLElement>) => {
// $FlowExpectedError: HTMLElement has tagName!
if (e.target.tagName !== 'A') {
return;
}
const props = {
// $FlowExpectedError: HTMLElement has textContent!
linkedText: (e.target.textContent || '').trim(),
// $FlowExpectedError: HTMLElement has getAttribute!
target: e.target.getAttribute('href'),
};
this.context.log(events.FAQ_CONTENT_LINK_CLICKED, props);
};
render() {
const { children } = this.props;
return (
<>
<div
className="FAQContentRender"
onClick={this.handleClick}
dangerouslySetInnerHTML={{ __html: renderArticleContent(children) }}
/>
<ThemeConsumer>
{theme => <ArticleContentStyles theme={theme} />}
</ThemeConsumer>
</>
);
}
}
export default FAQContentRender;