UNPKG

@kiwicom/smart-faq

Version:

75 lines (61 loc) 1.94 kB
// @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;