Browse Source

Merge branch 'redux' into login-pin

all-modes^2
petitPapillon 8 years ago
parent
commit
e87191339b
  1. 22
      react/src/actions/actionCreators.js
  2. 15
      react/src/components/dashboard/settings/settings.js
  3. 2
      react/src/components/dashboard/settings/settings.render.js
  4. 8
      react/src/components/dashboard/walletsBalance/walletsBalance.render.js
  5. 49
      react/src/components/dashboard/walletsData/walletsData.js
  6. 7
      react/src/components/dashboard/walletsData/walletsData.render.js
  7. 5
      react/src/components/main/main.js
  8. 6
      react/src/translate/en.js
  9. 66
      react/src/util/formatValue.js

22
react/src/actions/actionCreators.js

@ -194,7 +194,7 @@ export function triggerToaster(message, title, _type, autoClose = true) {
message,
title,
_type,
autoClose
autoClose,
}
}
@ -202,7 +202,7 @@ export function triggerToaster(message, title, _type, autoClose = true) {
export function dismissToaster(toastId) {
return {
type: REMOVE_TOASTER_MESSAGE,
toastId: toastId
toastId: toastId,
}
}
@ -218,7 +218,7 @@ export function dashboardCoinsState(json) {
return {
type: GET_ACTIVE_COINS,
coins: json,
activeCoins: Object.keys(json.native).length || Object.keys(json.basilisk).length || Object.keys(json.full).length ? true : false
activeCoins: Object.keys(json.native).length || Object.keys(json.basilisk).length || Object.keys(json.full).length ? true : false,
}
}
@ -292,7 +292,13 @@ export function rpcErrorHandler(json, dispatch) {
if (json &&
json.error) {
if (json.error === 'bitcoinrpc needs coin that is active') {
dispatch(triggerToaster(translate('API.NO_ACTIVE_COIN'), translate('TOASTR.SERVICE_NOTIFICATION'), 'error'));
dispatch(
triggerToaster(
translate('API.NO_ACTIVE_COIN'),
translate('TOASTR.SERVICE_NOTIFICATION'),
'error'
)
);
}
}
}
@ -303,8 +309,8 @@ export function setBasiliskMainAddress(json, coin, mode) {
for (let i = 0; i < json.result.length; i++) {
publicAddressArray.push({
'address': json.result[i],
'amount': 'N/A'
address: json.result[i],
amount: 'N/A',
});
}
@ -321,7 +327,7 @@ export function setBasiliskMainAddress(json, coin, mode) {
return {
type: ACTIVE_COIN_GET_ADDRESSES,
addresses: { 'public': [] },
addresses: { public: [] },
}
}
@ -331,7 +337,7 @@ export function getNativeTxHistoryState(json) {
json = null;
} else if (json && json.result && json.result.length) {
json = json.result;
} else if (!json || !json.result.length) {
} else if (!json || (!json.result || !json.result.length)) {
json = 'no data';
}

15
react/src/components/dashboard/settings/settings.js

@ -106,8 +106,6 @@ class Settings extends React.Component {
appConfigSchema: _appConfigSchema,
appSettings: _appSettings,
}));
console.warn(_appSettings);
} catch(e) {}
}
@ -263,14 +261,15 @@ class Settings extends React.Component {
renderUpdateStatus() {
let items = [];
let patchProgressBar = null;
const _updateLogLength = this.state.updateLog.length;
for (let i = 0; i < this.state.updateLog.length; i++) {
for (let i = 0; i < _updateLogLength; i++) {
items.push(
<div key={ `settings-update-log-${i}` }>{ this.state.updateLog[i] }</div>
);
}
if (this.state.updateLog.length) {
if (_updateLogLength) {
return (
<div style={{ minHeight: '200px' }}>
<hr />
@ -279,7 +278,7 @@ class Settings extends React.Component {
<div className={ updateProgressBar.patch > -1 ? 'progress progress-sm' : 'hide' }>
<div
className="progress-bar progress-bar-striped active progress-bar-indicating progress-bar-success font-size-80-percent"
style={{ width: updateProgressBar.patch + '%' }}>
style={{ width: `${updateProgressBar.patch}%` }}>
</div>
</div>
</div>
@ -300,7 +299,7 @@ class Settings extends React.Component {
shepherdCli(
'passthru',
this.state.cliCoin,
this.state.cliCmd
this.state.cliCmdString
)
);
}
@ -467,7 +466,7 @@ class Settings extends React.Component {
isError = true;
Store.dispatch(
triggerToaster(
'Komodo datadir path is invalid',
translate('TOASTR.KOMODO_DATADIR_INVALID'),
translate('INDEX.SETTINGS'),
'error'
)
@ -476,7 +475,7 @@ class Settings extends React.Component {
isError = true;
Store.dispatch(
triggerToaster(
'Komodo datadir path is not a directory',
translate('TOASTR.KOMODO_DATADIR_NOT_DIR'),
translate('INDEX.SETTINGS'),
'error'
)

2
react/src/components/dashboard/settings/settings.render.js

@ -605,7 +605,7 @@ export const SettingsRender = function() {
<button
type="button"
className="btn btn-primary waves-effect waves-light"
disabled={ !this.state.cliCoin || !this.state.cliCmd }
disabled={ !this.state.cliCoin || !this.state.cliCmdString }
onClick={ () => this.execCliCmd() }>{ translate('INDEX.EXECUTE') }</button>
</div>
<div className="col-sm-12 col-xs-12 text-align-left">

8
react/src/components/dashboard/walletsBalance/walletsBalance.render.js

@ -38,7 +38,7 @@ const WalletsBalanceRender = function() {
<span
className="pull-right padding-top-10 font-size-22"
title={ this.renderBalance('transparent') }>
{ Config.roundValues ? formatValue('round', this.renderBalance('transparent'), -6) : this.renderBalance('transparent') }
{ Config.roundValues ? formatValue(this.renderBalance('transparent')) : this.renderBalance('transparent') }
</span>
</div>
</div>
@ -58,7 +58,7 @@ const WalletsBalanceRender = function() {
<span
className="pull-right padding-top-10 font-size-22"
title={ this.renderBalance('private') }>
{ Config.roundValues ? formatValue('round', this.renderBalance('private'), -6) : this.renderBalance('private') }
{ Config.roundValues ? formatValue(this.renderBalance('private')) : this.renderBalance('private') }
</span>
</div>
</div>
@ -79,7 +79,7 @@ const WalletsBalanceRender = function() {
<span
className="pull-right padding-top-10 font-size-22"
title={ this.renderBalance('interest') }>
{ Config.roundValues ? formatValue('round', this.renderBalance('interest'), -6) : this.renderBalance('interest') }
{ Config.roundValues ? formatValue(this.renderBalance('interest')) : this.renderBalance('interest') }
</span>
</div>
</div>
@ -100,7 +100,7 @@ const WalletsBalanceRender = function() {
<span
className="pull-right padding-top-10 font-size-22"
title={ this.renderBalance('total') }>
{ Config.roundValues ? formatValue('round', this.renderBalance('total'), -6) : this.renderBalance('total') }
{ Config.roundValues ? formatValue(this.renderBalance('total')) : this.renderBalance('total') }
</span>
</div>
</div>

49
react/src/components/dashboard/walletsData/walletsData.js

@ -102,6 +102,31 @@ class WalletsData extends React.Component {
socket.removeAllListeners('messages');
}
// https://react-table.js.org/#/custom-sorting
tableSorting(a, b) { // ugly workaround, override default sort
if (Date.parse(a)) { // convert date to timestamp
a = Date.parse(a);
}
if (Date.parse(b)) {
b = Date.parse(b);
}
// force null and undefined to the bottom
a = (a === null || a === undefined) ? -Infinity : a;
b = (b === null || b === undefined) ? -Infinity : b;
// force any string values to lowercase
a = typeof a === 'string' ? a.toLowerCase() : a;
b = typeof b === 'string' ? b.toLowerCase() : b;
// Return either 1 or -1 to indicate a sort priority
if (a > b) {
return 1;
}
if (a < b) {
return -1;
}
// returning 0 or undefined will use any subsequent column sorting methods or the row index as a tiebreaker
return 0;
}
generateItemsListColumns() {
let columns = [];
@ -356,13 +381,11 @@ class WalletsData extends React.Component {
if (!this.state.itemsList ||
(this.state.coin && this.state.coin !== this.props.ActiveCoin.coin) ||
(JSON.stringify(this.props.ActiveCoin.txhistory) !== JSON.stringify(this.state.txhistory))) {
const sortedItemsList = this.indexTxHistory(sortByDate(this.props.ActiveCoin.txhistory, this.props.ActiveCoin.mode === 'basilisk' ? 'index' : 'confirmations'));
this.setState(Object.assign({}, this.state, {
itemsList: sortedItemsList,
filteredItemsList: this.filterTransactions(sortedItemsList, this.state.searchTerm),
itemsList: this.props.ActiveCoin.txhistory,
filteredItemsList: this.filterTransactions(this.props.ActiveCoin.txhistory, this.state.searchTerm),
txhistory: this.props.ActiveCoin.txhistory,
showPagination: this.props.ActiveCoin.txhistory && this.props.ActiveCoin.txhistory.length >= this.state.defaultPageSize
showPagination: this.props.ActiveCoin.txhistory && this.props.ActiveCoin.txhistory.length >= this.state.defaultPageSize,
}));
}
}
@ -379,7 +402,7 @@ class WalletsData extends React.Component {
}
this.setState({
itemsListColumns: this.generateItemsListColumns()
itemsListColumns: this.generateItemsListColumns(),
});
}
@ -428,7 +451,7 @@ class WalletsData extends React.Component {
onPageSizeChange(pageSize, pageIndex) {
this.setState(Object.assign({}, this.state, {
pageSize: pageSize,
showPagination: this.state.itemsList && this.state.itemsList.length >= defaultPageSize,
showPagination: this.state.itemsList && this.state.itemsList.length >= this.state.defaultPageSize,
}))
}
@ -486,7 +509,7 @@ class WalletsData extends React.Component {
}
if (_amount !== 'N/A') {
_amount = formatValue('round', _amount, -6);
_amount = formatValue(_amount);
}
items.push(
@ -523,7 +546,7 @@ class WalletsData extends React.Component {
let _amount = _addresses.public[i].amount;
if (_amount !== 'N/A') {
_amount = formatValue('round', _amount, -6);
_amount = formatValue(_amount);
}
return _amount;
@ -538,7 +561,7 @@ class WalletsData extends React.Component {
}
if (_amount !== 'N/A') {
_amount = formatValue('round', _amount, -6);
_amount = formatValue(_amount);
}
return _amount;
@ -551,13 +574,15 @@ class WalletsData extends React.Component {
}
renderSelectorCurrentLabel() {
if (this.state.currentAddress) {
const _currentAddress = this.state.currentAddress;
if (_currentAddress) {
return (
<span>
<i className={ 'icon fa-eye' + (this.state.addressType === 'public' ? '' : '-slash') }></i>&nbsp;&nbsp;
<span className="text">
[ { this.renderAddressAmount() } { this.props.ActiveCoin.coin } ]&nbsp;&nbsp;
{ this.state.currentAddress }
{ _currentAddress }
</span>
</span>
);

7
react/src/components/dashboard/walletsData/walletsData.render.js

@ -155,7 +155,7 @@ export const TxAmountRender = function(tx) {
if (Config.roundValues) {
return (
<span title={ tx.amount * _amountNegative }>{ formatValue('round', tx.amount, -6) * _amountNegative || translate('DASHBOARD.UNKNOWN') }</span>
<span title={ tx.amount * _amountNegative }>{ formatValue(tx.amount) * _amountNegative || translate('DASHBOARD.UNKNOWN') }</span>
);
}
@ -177,6 +177,11 @@ export const TxHistoryListRender = function() {
previousText={ translate('INDEX.PREVIOUS_PAGE') }
showPaginationBottom={ this.state.showPagination }
pageSize={ this.pageSize }
defaultSortMethod={ this.tableSorting }
defaultSorted={[{ // default sort
id: 'timestamp',
desc: true,
}]}
onPageSizeChange={ (pageSize, pageIndex) => this.onPageSizeChange(pageSize, pageIndex) } />
);
};

5
react/src/components/main/main.js

@ -27,14 +27,17 @@ class Main extends React.Component {
componentDidMount() {
let appVersion;
let zcashParamsExist;
let appConfig;
try {
appVersion = window.require('electron').remote.getCurrentWindow().appBasicInfo;
appConfig = window.require('electron').remote.getCurrentWindow().appConfig;
zcashParamsExist = window.require('electron').remote.getCurrentWindow().zcashParamsExist;
} catch (e) {}
if (appVersion) {
document.title = `${appVersion.name} (v${appVersion.version.replace('version=', '')}-beta)`;
const _appMode = `${appConfig.iguanaLessMode ? ' - ' + translate('INDEX.NATIVE_ONLY_MODE') : ' - ' + translate('INDEX.NORMAL_MODE')}`;
document.title = `${appVersion.name} (v${appVersion.version.replace('version=', '')}-beta)${_appMode}`;
}
if (!zcashParamsExist) {

6
react/src/translate/en.js

@ -35,7 +35,7 @@ export const _lang = {
'ADDRESS_ALREADY_REG': 'Address already registered',
'COULDNT_COPY_ADDRESS': 'Couldn\'t copy address to clipboard',
'COULDNT_CREATE_SEED': 'Couldn\'t create new wallet seed',
'WALLETDAT_MISMATCH': 'Your wallet.dat is not matching the blockchain. Please resync from the scratch.',
'WALLETDAT_MISMATCH': 'Your wallet.dat is not matching the blockchain. Please restart the wallet with -reindex param.',
'PEER_ADDED': 'Peer is added',
'ADDNODE_ALREADY_PENDING': 'Addnode connection was already pending',
'PEER_ALREADY_CONN': 'Peer was already connected',
@ -46,6 +46,8 @@ export const _lang = {
'NO_ACTIVE_COIN': 'No active coin',
},
'INDEX': {
'NATIVE_ONLY_MODE': 'Native only mode',
'NORMAL_MODE': 'Normal mode',
'T_FUNDS': 'Transparent funds',
'HASH': 'Hash',
'SYNC_IN_PROGRESS': 'Synchronization is in progress',
@ -443,6 +445,8 @@ export const _lang = {
'QR_ERR_UNKNOWN': 'Error: unknown error!',
},
'TOASTR': {
'KOMODO_DATADIR_INVALID': 'Komodo datadir path is invalid',
'KOMODO_DATADIR_NOT_DIR': 'Komodo datadir path is not a directory',
'INVALID_ADDRESS': 'Invalid @template@ address',
'RESTART_AGAMA_WITH_REINDEX_PARAM': 'Restart Agama and run Komodo with -reindex param',
'JUMBLR_DEPOSIT_ADDRESS_SET': 'Jumblr deposit address is set',

66
react/src/util/formatValue.js

@ -1,52 +1,24 @@
// ref: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Math/round#Decimal_rounding
export function formatValue(formatType, formatValue, formatExp) {
let _formatExp;
/**
* Decimal adjustment of a number.
*
* @param {String} type The type of adjustment.
* @param {Number} value The number.
* @param {Integer} exp The exponent (the 10 logarithm of the adjustment base).
* @returns {Number} The adjusted value.
*/
function decimalAdjust(type, value, exp) {
// If the exp is undefined or zero...
if (typeof exp === 'undefined' || +exp === 0) {
return Math[type](value);
}
value = +value;
exp = +exp;
// If the value is not a number or the exp is not an integer...
if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {
return NaN;
}
// If the value is negative...
if (value < 0) {
return -decimalAdjust(type, -value, exp);
}
// Shift
value = value.toString().split('e');
value = Math[type](+(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp)));
// Shift back
value = value.toString().split('e');
return +(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp));
}
// display rounding
export function formatValue(formatValue) {
const _valueToStr = formatValue.toString();
if (Math.abs(Number(formatValue)) >= 1) {
_formatExp = -3;
if (_valueToStr.indexOf('.') === -1) {
return formatValue;
} else {
_formatExp = formatExp;
}
if (_valueToStr) {
const _decimal = _valueToStr.substr(_valueToStr.indexOf('.') + 1, _valueToStr.length);
let newVal = _valueToStr.substr(0, _valueToStr.indexOf('.') + 1);
for (let i = 0; i < _decimal.length; i++) {
if (_decimal[i] === '0') {
newVal = newVal + _decimal[i];
} else {
newVal = newVal + _decimal[i];
break;
}
}
switch (formatType) {
case 'round':
return decimalAdjust('round', formatValue, _formatExp);
break;
case 'floor':
return decimalAdjust('floor', formatValue, _formatExp);
break;
case 'ceil':
return decimalAdjust('ceil', formatValue, _formatExp);
break;
return newVal;
}
}
}
Loading…
Cancel
Save