Skip to content

Commit

Permalink
fix create new address and sort results in table
Browse files Browse the repository at this point in the history
  • Loading branch information
schnogz committed Jun 1, 2018
1 parent 1bf1d66 commit 7a25f04
Show file tree
Hide file tree
Showing 6 changed files with 17 additions and 12 deletions.
Expand Up @@ -6,7 +6,7 @@
"components.alerts.addresserroradd": "Error adding address.",
"components.alerts.address_does_not_exist_error": "This address already exists in your wallet.",
"components.alerts.address_format_not_supported_error": "This address format is not supported.",
"components.alerts.address_label_maximum_error": "You cannot label more than 15 unused addresses in a row; please send some bitcoins to at least one of them.",
"components.alerts.address_label_maximum_error": "You cannot have more than 15 unused addresses. Please send some Bitcoin to at least one of them.",
"components.alerts.address_label_update_success": "Address label updated.",
"components.alerts.authorization_required_info": "Authorization required. Please check your mailbox.",
"components.alerts.autologout_update_error": "Failed to update auto logout",
Expand Down
Expand Up @@ -39,7 +39,7 @@ const selectMessage = (message, data = undefined) => {
case C.ADDRESS_ADD_ERROR: return <FormattedMessage id='components.alerts.addresserroradd' defaultMessage='Error adding address.' />
case C.ADDRESS_DOES_NOT_EXIST_ERROR: return <FormattedMessage id='components.alerts.address_does_not_exist_error' defaultMessage='This address already exists in your wallet.' />
case C.ADDRESS_FORMAT_NOT_SUPPORTED_ERROR: return <FormattedMessage id='components.alerts.address_format_not_supported_error' defaultMessage='This address format is not supported.' />
case C.ADDRESS_LABEL_MAXIMUM_ERROR: return <FormattedMessage id='components.alerts.address_label_maximum_error' defaultMessage='You cannot label more than 15 unused addresses in a row; please send some bitcoins to at least one of them.' />
case C.ADDRESS_LABEL_MAXIMUM_ERROR: return <FormattedMessage id='components.alerts.address_label_maximum_error' defaultMessage='You cannot have more than 15 unused addresses. Please send some Bitcoin to at least one of them.' />
case C.ADDRESS_LABEL_UPDATE_SUCCESS: return <FormattedMessage id='components.alerts.address_label_update_success' defaultMessage='Address label updated.' />
case C.AUTHORIZATION_REQUIRED_INFO: return <FormattedMessage id='components.alerts.authorization_required_info' defaultMessage='Authorization required. Please check your mailbox.' />
case C.AUTOLOGOUT_UPDATE_ERROR: return <FormattedMessage id='components.alerts.autologout_update_error' defaultMessage='Failed to update auto logout' />
Expand Down
Expand Up @@ -4,7 +4,7 @@ import * as AT from './actionTypes'
export const generateNextReceiveAddress = (walletIndex) => ({ type: AT.GENERATE_NEXT_RECEIVE_ADDRESS, payload: { walletIndex } })
export const generateNextReceiveAddressError = (walletIndex, message) => ({ type: AT.GENERATE_NEXT_RECEIVE_ADDRESS_ERROR, payload: { walletIndex, message } })
export const generateNextReceiveAddressLoading = (walletIndex) => ({ type: AT.GENERATE_NEXT_RECEIVE_ADDRESS_LOADING, payload: { walletIndex } })
export const generateNextReceiveAddressSuccess = (walletIndex) => ({ type: AT.GENERATE_NEXT_RECEIVE_ADDRESS_SUCCESS, payload: { walletIndex } })
export const generateNextReceiveAddressSuccess = (walletIndex, newAddress) => ({ type: AT.GENERATE_NEXT_RECEIVE_ADDRESS_SUCCESS, payload: { walletIndex, newAddress } })

export const fetchUnusedAddresses = (walletIndex) => ({ type: AT.FETCH_UNUSED_ADDRESSES, payload: { walletIndex } })
export const fetchUnusedAddressesError = (walletIndex, message) => ({ type: AT.FETCH_UNUSED_ADDRESSES_ERROR, payload: { walletIndex, message } })
Expand Down
@@ -1,5 +1,5 @@
import { call, put, select } from 'redux-saga/effects'
import { filter, findIndex, forEach, pluck, propEq } from 'ramda'
import { ascend, filter, findIndex, forEach, pluck, prop, propEq, sort, sortBy } from 'ramda'

import * as A from './actions'
import * as actions from '../../actions'
Expand Down Expand Up @@ -28,9 +28,16 @@ export default ({ api }) => {

const generateNextReceiveAddress = function * (action) {
const { walletIndex } = action.payload
debugger
try {
yield put(A.generateNextReceiveAddressLoading(walletIndex))
const wallet = yield select(selectors.core.wallet.getWallet)
const account = Types.Wallet.selectHDAccounts(wallet).get(walletIndex)
const labels = Types.HDAccount.selectAddressLabels(account).reverse().toArray()
const receiveIndex = yield select(selectors.core.data.bitcoin.getReceiveIndex(account.xpub))
const lastLabeledIndex = labels.reduce((acc, l) => Math.max(acc, l.index), 0)
yield put(actions.core.wallet.setHdAddressLabel(account.index, Math.max(receiveIndex.data, lastLabeledIndex + 1), 'New Address'))
yield put(A.fetchUnusedAddresses(walletIndex))
yield put(A.generateNextReceiveAddressSuccess(walletIndex))
} catch (e) {
yield put(A.generateNextReceiveAddressError(walletIndex, e))
yield put(actions.logs.logErrorMessage(logLocation, 'generateNextReceiveAddress', e))
Expand All @@ -55,11 +62,11 @@ export default ({ api }) => {
forEach((labeledAddr) => {
let idx = findIndex(propEq('address', labeledAddr.address))(unusedAddresses)
if (idx !== -1) {
unusedAddresses[idx].derivationIndex = labeledAddr.index
unusedAddresses[idx].label = labeledAddr.label
}
}, labeledAddrs)

yield put(A.fetchUnusedAddressesSuccess(walletIndex, unusedAddresses))
yield put(A.fetchUnusedAddressesSuccess(walletIndex, sort((a, b) => { return a.derivationIndex - b.derivationIndex }, unusedAddresses)))
} catch (e) {
yield put(A.fetchUnusedAddressesError(walletIndex, e))
yield put(actions.logs.logErrorMessage(logLocation, 'fetchUnusedAddresses', e))
Expand Down
Expand Up @@ -23,11 +23,10 @@ class UnusedAddressesContainer extends React.PureComponent {
const onShowXPub = () => modalsActions.showModal('ShowXPub', { xpub: account.xpub })
const onMakeDefault = () => coreActions.setDefaultAccountIdx(account.index)
const onGenerateNextAddress = () => {
if (length(unusedAddresses) >= 15) {
if (length(this.props.unusedAddresses.getOrElse([])) >= 15) {
this.props.alertActions.displayError(C.ADDRESS_LABEL_MAXIMUM_ERROR)
} else {
this.props.componentActions.generateNextReceiveAddress(this.props.walletIndex)
//coreActions.setHdAddressLabel(account.index, i + 1, 'New Address')
}
}
const onSetArchived = () => {
Expand Down Expand Up @@ -56,7 +55,6 @@ const mapStateToProps = (state, ownProps) => {
const currentReceiveIndex = selectors.core.data.bitcoin.getReceiveIndex(account.xpub, state)
const search = formValueSelector('manageAddresses')(state, 'search')

// TODO: are you sure adding next receive address works..
return { account, isDefault, currentReceiveIndex, unusedAddresses, search }
}

Expand Down
Expand Up @@ -22,9 +22,9 @@ const MoreOptions = () => (

const UnusedAddressesTemplate = ({ account, currentReceiveIndex, unusedAddresses, isDefault, onGenerateNextAddress, onEditLabel, onDeleteLabel, onEditBtcAccountLabel, onShowXPub, onMakeDefault, onSetArchived, search }) => {
const isMatch = (addr) => !search || addr.label.toLowerCase().indexOf(search.toLowerCase()) > -1 || addr.address.toLowerCase().indexOf(search.toLowerCase()) > -1
const addresses = filter(isMatch, unusedAddresses).map((entry) => {
const addresses = filter(isMatch, unusedAddresses).map((entry, i) => {
return (
<TableRow key={entry.index}>
<TableRow key={i}>
<TableCell width='40%'>
<Link href={`https://blockchain.info/address/${entry.address}`} size='small' weight={300} target='_blank'>
{entry.address}
Expand Down

0 comments on commit 7a25f04

Please sign in to comment.