tahnik/devRantron

View on GitHub
app/src/js/components/utilities/release_info.js

Summary

Maintainability
A
0 mins
Test Coverage
import React, { Component } from 'react';
import PropTypes from 'prop-types';

const { ipcRenderer, shell } = require('electron');

const showdown = require('showdown');

class ReleaseInfo extends Component {
  constructor() {
    super();
    this.state = {
      markdown: null,
    };
  }
  componentWillMount() {
    fetch('https://raw.githubusercontent.com/tahnik/devRantron/master/update.md')
      .then((res) => {
        res.text().then((latestRelease) => {
          const converter = new showdown.Converter();
          const html = converter.makeHtml(latestRelease);
          this.setState({ markdown: html });
        });
      });
  }
  static handleUpdate() {
    let plat = '';

    if (/^win/.test(process.platform)) { plat = 'windows'; }
    if (/^dar/.test(process.platform)) { plat = 'osx'; }
    if (/^lin/.test(process.platform)) { plat = 'linux'; }

    if (plat === 'windows') {
      ipcRenderer.send('updateNow', true);
    } else {
      shell.openExternal('https://devrantron.firebaseapp.com/');
    }
  }
  render() {
    const { close } = this.props;
    return (
      <div className="modal">
        <div className="release_info_container">
          <div className="release_info">
            {
              this.state.markdown === '' ?
                <div>Fetching release note</div> :
                <div dangerouslySetInnerHTML={{ __html: this.state.markdown }} />
            }
            <div className="controls" >
              <button onClick={() => ReleaseInfo.handleUpdate()}>Update</button>
              <button onClick={() => close()}>Not Now</button>
            </div>
            <div className="info" >
              <span>* On Windows: Update will be installed after you click update</span>
              <span>* On MacOS and Linux: Clicking update will take you to our website.
                You have to download the latest update from there.
              </span>
            </div>
          </div>
        </div>
      </div>
    );
  }
}

ReleaseInfo.propTypes = {
  close: PropTypes.func.isRequired,
};

export default ReleaseInfo;