#38: Enhance new repertory release available notification - partial
This commit is contained in:
@@ -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 (
|
||||
<div>
|
||||
<h2>{'[' + Constants.RELEASE_TYPES[release.Release] + '] ' + release.Display }</h2>
|
||||
<h2>{title}</h2>
|
||||
<table cellSpacing={0} cellPadding={0} width="97%">
|
||||
<tbody>
|
||||
<tr style={{height: '4px'}}/>
|
||||
<tr>
|
||||
<td width="50%">
|
||||
<Button buttonStyles={{width: '100%'}}>Changes</Button>
|
||||
<Button buttonStyles={{width: '100%'}} clicked={displayChanges}>Changes</Button>
|
||||
</td>
|
||||
<td>
|
||||
<div style={{width: 'var(--default_spacing)'}}/>
|
||||
@@ -25,4 +48,4 @@ export default ({release, lastItem}) => {
|
||||
</table>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
});
|
||||
|
||||
46
src/utils.js
46
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;
|
||||
|
||||
Reference in New Issue
Block a user