import React, {Component} from 'react'; import Link from '../base/Link'; import Modal from '../base/Modal'; import ModalBody from '../base/ModalBody'; import ModalHeader from '../base/ModalHeader'; import ModalFooter from '../base/ModalFooter'; import {getAppVersion, CHANGELOG_URL, CHANGELOG_PAGE} from '../../../common/constants'; class ChangelogModal extends Component { state = {changelog: null}; show () { this.modal.show(); } toggle () { this.modal.toggle(); } async componentDidMount () { let changelog; try { const response = await fetch(`${CHANGELOG_URL}?bust=${Date.now()}`); changelog = await response.json(); } catch (e) { console.warn('Failed to fetch changelog', e); return; } this.setState({changelog}); } render () { const {changelog} = this.state; let html; if (!changelog) { html = [
]; } else { html = []; const startVersion = getAppVersion(); let startIndex = changelog.findIndex(c => c.version === startVersion); if (startIndex < 0) { startIndex = 0; } changelog.slice(startIndex).map((change, i) => { html = [ ...html,

v{change.version} Changes

]; if (change.summary) { if (!Array.isArray(change.summary)) { html = [ ...html,

{change.summary}

] } else { html = [ ...html,

{change.summary[0]}

, ...change.summary.slice(1).map( (text, j) =>

{text}

) ] } } if (change.link) { html = [ ...html, Read More ] } if (change.major && change.major.length) { html = [ ...html,

Major

, ]; } if (change.fixes && change.fixes.length) { html = [ ...html,

Bug Fixes

, ]; } if (change.minor && change.minor.length) { html = [ ...html,

Minor

, ]; } html = [ ...html,
] }); } return ( this.modal = m} {...this.props}> Insomnia Changelog {html} Visit Full Changelog ); } } ChangelogModal.propTypes = {}; export default ChangelogModal;