#38: Enhance new repertory release available notification - partial

This commit is contained in:
2020-02-21 12:33:01 -06:00
parent 0eb40e5a65
commit a70359d36b
2 changed files with 72 additions and 5 deletions

View File

@@ -1,17 +1,40 @@
import React from 'react'; import React from 'react';
import {connect} from 'react-redux';
import * as Constants from '../../../constants'; import * as Constants from '../../../constants';
import Button from '../../UI/Button/Button'; 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 ( return (
<div> <div>
<h2>{'[' + Constants.RELEASE_TYPES[release.Release] + '] ' + release.Display }</h2> <h2>{title}</h2>
<table cellSpacing={0} cellPadding={0} width="97%"> <table cellSpacing={0} cellPadding={0} width="97%">
<tbody> <tbody>
<tr style={{height: '4px'}}/> <tr style={{height: '4px'}}/>
<tr> <tr>
<td width="50%"> <td width="50%">
<Button buttonStyles={{width: '100%'}}>Changes</Button> <Button buttonStyles={{width: '100%'}} clicked={displayChanges}>Changes</Button>
</td> </td>
<td> <td>
<div style={{width: 'var(--default_spacing)'}}/> <div style={{width: 'var(--default_spacing)'}}/>
@@ -25,4 +48,4 @@ export default ({release, lastItem}) => {
</table> </table>
</div> </div>
); );
}; });

View File

@@ -1,6 +1,7 @@
import React from 'react'; import React from 'react';
import * as Constants from './constants'; import * as Constants from './constants';
import Modal from './components/UI/Modal/Modal'; import Modal from './components/UI/Modal/Modal';
import axios from 'axios';
const ipcRenderer = (!process.versions.hasOwnProperty('electron') && window && window.require) ? const ipcRenderer = (!process.versions.hasOwnProperty('electron') && window && window.require) ?
window.require('electron').ipcRenderer : window.require('electron').ipcRenderer :
@@ -16,6 +17,47 @@ export const extractFileNameFromURL = url => {
return parts[parts.length - 1]; 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 = () => { export const getIPCRenderer = () => {
return ipcRenderer; return ipcRenderer;
}; };
@@ -37,15 +79,17 @@ export const getNewReleases = (existingReleases, newReleases) => {
Display: version, Display: version,
Release: Constants.RELEASE_TYPES.indexOf(release), Release: Constants.RELEASE_TYPES.indexOf(release),
Version: newReleases[release].indexOf(version), Version: newReleases[release].indexOf(version),
VersionString: version,
}); });
}); });
}); });
} }
ret.push({ ret.push({
Display: '1.1.1', Display: '1.2.2-release',
Release: 1, Release: 1,
Version: 2, Version: 2,
VersionString: '1.2.2-release',
}); });
return ret; return ret;