diff --git a/src/components/NewReleases/NewRelease/NewRelease.js b/src/components/NewReleases/NewRelease/NewRelease.js
index a8b5de3..4aafd30 100644
--- a/src/components/NewReleases/NewRelease/NewRelease.js
+++ b/src/components/NewReleases/NewRelease/NewRelease.js
@@ -1,17 +1,40 @@
import React from 'react';
+import {connect} from 'react-redux';
import * as Constants from '../../../constants';
import Button from '../../UI/Button/Button';
+import {formatLinesForDisplay, getChangesForRepertoryVersion} from '../../../utils';
+import {
+ notifyError,
+ notifyInfo
+} from '../../../redux/actions/error_actions';
+
+const mapDispatchToProps = dispatch => {
+ return {
+ notifyError: msg => dispatch(notifyError(msg)),
+ notifyInfo: (title, msg) => dispatch(notifyInfo(title, msg)),
+ };
+};
+
+export default connect(null, mapDispatchToProps)(({release, lastItem, notifyError, notifyInfo}) => {
+ const title = '[' + Constants.RELEASE_TYPES[release.Release] + '] ' + release.Display;
+ const displayChanges = async () => {
+ try {
+ const lines = await getChangesForRepertoryVersion(release.VersionString);
+ notifyInfo(title, formatLinesForDisplay(lines));
+ } catch (e) {
+ notifyError(e);
+ }
+ };
-export default ({release, lastItem}) => {
return (
-
{'[' + Constants.RELEASE_TYPES[release.Release] + '] ' + release.Display }
+
{title}
|
-
+
|
@@ -25,4 +48,4 @@ export default ({release, lastItem}) => {
|
);
-};
+});
diff --git a/src/utils.js b/src/utils.js
index 47d29de..0c33989 100644
--- a/src/utils.js
+++ b/src/utils.js
@@ -1,6 +1,7 @@
import React from 'react';
import * as Constants from './constants';
import Modal from './components/UI/Modal/Modal';
+import axios from 'axios';
const ipcRenderer = (!process.versions.hasOwnProperty('electron') && window && window.require) ?
window.require('electron').ipcRenderer :
@@ -16,6 +17,47 @@ export const extractFileNameFromURL = url => {
return parts[parts.length - 1];
};
+export const formatLinesForDisplay = lines => {
+ let msg = '';
+ for (let i = 1; i < lines.length; i++) {
+ if (i > 1) {
+ msg += '\n';
+ }
+ msg += (lines[i].replace(/(\\#)/gm, '#') + '\n');
+ }
+ return msg;
+};
+
+export const getChangesForRepertoryVersion = version => {
+ return new Promise((resolve, reject) => {
+ const url = `https://bitbucket.org/blockstorage/repertory/raw/${version}/CHANGELOG.md`;
+ axios
+ .get(url, {
+ responseType: 'text',
+ })
+ .then(response => {
+ try {
+ let found = false;
+ let ended = false;
+ let lines = response.data
+ .replace(/(\r\n)/gm, '\n')
+ .split('\n')
+ .filter(l => {
+ return !ended && (l.length > 0) && (found
+ ? !(ended = l.startsWith('## '))
+ : (found = l.startsWith(`## ${version}`)));
+ });
+ resolve(lines);
+ } catch (e) {
+ reject(e);
+ }
+ })
+ .catch(error => {
+ reject(error);
+ });
+ });
+};
+
export const getIPCRenderer = () => {
return ipcRenderer;
};
@@ -37,15 +79,17 @@ export const getNewReleases = (existingReleases, newReleases) => {
Display: version,
Release: Constants.RELEASE_TYPES.indexOf(release),
Version: newReleases[release].indexOf(version),
+ VersionString: version,
});
});
});
}
ret.push({
- Display: '1.1.1',
+ Display: '1.2.2-release',
Release: 1,
Version: 2,
+ VersionString: '1.2.2-release',
});
return ret;