cozy-labs/cozy-desktop

View on GitHub
gui/markdown-viewer.js

Summary

Maintainability
A
0 mins
Test Coverage
const React = require('react')
const ReactDOM = require('react-dom')
const ReactMarkdown = require('react-markdown')
const PropTypes = require('prop-types')
const e = React.createElement

class Banner extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      closed: false
    }

    this.close = this.close.bind(this)
  }

  close() {
    this.setState({ closed: true })
  }

  render() {
    const { translate, level, title, details } = this.props
    const { closed } = this.state
    const className = closed
      ? `banner banner--${level} banner--closed`
      : `banner banner--${level}`

    return e('div', { className }, [
      e('div', { className: 'banner__main' }, [
        e(
          'span',
          { className: 'banner__main-title' },
          translate('MarkdownViewer Why do I see this?')
        ),
        e('span', { className: 'banner__error-title' }, title)
      ]),
      e('p', { className: 'banner__error-details' }, details),
      e(
        'div',
        {
          className: 'banner__close',
          onClick: this.close
        },
        '\u2715'
      )
    ])
  }
}
Banner.propTypes = {
  translate: PropTypes.func.isRequired,
  level: PropTypes.bool.isRequired,
  title: PropTypes.string.isRequired,
  details: PropTypes.string.isRequired
}

const MarkdownViewer = props => {
  const { content: source, filename } = props

  return e('div', { className: 'markdown-viewer' }, [
    e('header', { className: 'markdown-viewer__filename' }, [
      e('h1', null, filename)
    ]),
    e(ReactMarkdown, { source }, null)
  ])
}

require('electron').ipcRenderer.on(
  'load-content',
  (event, { translations, banner, content, filename }) => {
    const translate = key =>
      translations[key] || key.substr(key.indexOf(' ') + 1) // Key without prefix

    ReactDOM.render(
      e(React.Fragment, null, [
        e(Banner, { ...banner, translate }, null),
        e(MarkdownViewer, { content, filename }, null)
      ]),
      document.getElementById('container')
    )
  }
)