Skip to content

Commit

Permalink
Merge pull request brave#12720 from NejcZdovc/feature/brave#12673-mon…
Browse files Browse the repository at this point in the history
…thly

Adds ability to change monthly amount via server
  • Loading branch information
bsclifton authored Jan 19, 2018
2 parents 5f7756f + 3b665d0 commit 5e0c26d
Show file tree
Hide file tree
Showing 9 changed files with 228 additions and 57 deletions.
23 changes: 16 additions & 7 deletions app/browser/api/ledger.js
Original file line number Diff line number Diff line change
Expand Up @@ -1558,14 +1558,14 @@ const getPaymentInfo = (state) => {
return state
}

const lockInContributionAmount = (balance) => {
const lockInContributionAmount = (state, balance) => {
// Lock in contribution amount if amount hasn't been chosen and balance is non-zero
// (ex: they receive a grant or fund the wallet)
// Amount is only set when user explicitly picks a contribution amount
if (balance > 0) {
const value = getSetting(settings.PAYMENTS_CONTRIBUTION_AMOUNT, undefined, false)
if (value === null) {
const defaultFromConfig = getSetting(settings.PAYMENTS_CONTRIBUTION_AMOUNT)
const defaultFromConfig = ledgerState.getContributionAmount(state)
appActions.changeSetting(settings.PAYMENTS_CONTRIBUTION_AMOUNT, defaultFromConfig)
}
}
Expand All @@ -1582,11 +1582,19 @@ const onWalletProperties = (state, body) => {
state = ledgerState.setInfoProp(state, 'addresses', addresses)
}

// Update default contribution amount
let monthly = parseFloat(body.getIn(['parameters', 'adFree', 'fee', 'BAT'])) || 0
if (monthly < 0 || isNaN(monthly)) {
monthly = 0
}

state = ledgerState.setInfoProp(state, 'contributionAmount', monthly)

// Balance
const balance = parseFloat(body.get('balance'))
if (balance >= 0) {
state = ledgerState.setInfoProp(state, 'balance', balance)
lockInContributionAmount(balance)
lockInContributionAmount(state, balance)
}

// Rates
Expand Down Expand Up @@ -1635,6 +1643,7 @@ const onWalletProperties = (state, body) => {
if (clientOptions.verboseP) {
console.log('\nWalletProperties refreshes payment info')
}

state = module.exports.generatePaymentData(state)

return state
Expand Down Expand Up @@ -1760,7 +1769,7 @@ const onCallback = (state, result, delayTime) => {

if (client && result.getIn(['properties', 'wallet'])) {
if (!ledgerState.getInfoProp(state, 'created')) {
module.exports.setPaymentInfo(getSetting(settings.PAYMENTS_CONTRIBUTION_AMOUNT))
module.exports.setPaymentInfo(ledgerState.getContributionAmount(state))
}

state = getStateInfo(state, regularResults) // TODO optimize if possible
Expand Down Expand Up @@ -1891,8 +1900,8 @@ const initialize = (state, paymentsEnabled) => {
}
}

const getContributionAmount = () => {
let amount = parseFloat(getSetting(settings.PAYMENTS_CONTRIBUTION_AMOUNT))
const getContributionAmount = (state) => {
let amount = ledgerState.getContributionAmount(state)

// if amount is 15, or 20... the amount wasn't updated when changing
// from BTC to BAT (see https://github.com/brave/browser-laptop/issues/11719)
Expand Down Expand Up @@ -1977,7 +1986,7 @@ const onInitRead = (state, parsedData) => {
state = ledgerState.setInfoProp(state, 'address', client.getWalletAddress())
}

const contributionAmount = getContributionAmount()
const contributionAmount = getContributionAmount(state)
module.exports.setPaymentInfo(contributionAmount)
module.exports.getBalance(state)

Expand Down
2 changes: 1 addition & 1 deletion app/browser/api/ledgerNotifications.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ const nextAddFundsTime = 3 * ledgerUtil.milliseconds.day
const sufficientBalanceToReconcile = (state) => {
const balance = Number(ledgerState.getInfoProp(state, 'balance') || 0)
const unconfirmed = Number(ledgerState.getInfoProp(state, 'unconfirmed') || 0)
const budget = parseInt(getSetting(settings.PAYMENTS_CONTRIBUTION_AMOUNT), 10) || 25
const budget = ledgerState.getContributionAmount(state)
return balance + unconfirmed >= budget
}
const hasFunds = (state) => {
Expand Down
2 changes: 1 addition & 1 deletion app/common/lib/ledgerUtil.js
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ const walletStatus = (ledgerData) => {
const transactions = ledgerData.get('transactions')
const pendingFunds = Number(ledgerData.get('unconfirmed') || 0)
const balance = Number(ledgerData.get('balance') || 0)
const minBalance = parseInt(getSetting(settings.PAYMENTS_CONTRIBUTION_AMOUNT), 10) || 25
const minBalance = ledgerState.getContributionAmount(null, ledgerData.get('contributionAmount'))

if (pendingFunds + balance < minBalance) {
status.id = 'insufficientFundsStatus'
Expand Down
27 changes: 27 additions & 0 deletions app/common/state/ledgerState.js
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,33 @@ const ledgerState = {
return state.setIn(['ledger', 'info', 'walletQR', currency], image)
},

/**
* Functions returns default monthly amount
* If user did not select it from the drop down we use defaults
*
* @param {any} state - app state
* @param {float} amount - custom amount, when we are using partial state
* @param {object} settingsCollection - settings object (used in about pages)
*/
getContributionAmount: (state, amount, settingsCollection) => {
const value = getSetting(settings.PAYMENTS_CONTRIBUTION_AMOUNT, settingsCollection, false)

if (value === null) {
amount = parseFloat(amount)

if (state != null) {
state = validateState(state)
amount = ledgerState.getInfoProp(state, 'contributionAmount')
}

if (amount > 0) {
return amount
}
}

return parseFloat(getSetting(settings.PAYMENTS_CONTRIBUTION_AMOUNT, settingsCollection) || 5)
},

/**
* OTHERS
*/
Expand Down
7 changes: 5 additions & 2 deletions app/renderer/components/preferences/payment/enabledContent.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,12 @@ const Immutable = require('immutable')
const {batToCurrencyString, formatCurrentBalance, formattedDateFromTimestamp, walletStatus} = require('../../../../common/lib/ledgerUtil')
const {l10nErrorText} = require('../../../../common/lib/httpUtil')
const {changeSetting} = require('../../../lib/settingsUtil')
const getSetting = require('../../../../../js/settings').getSetting
const settings = require('../../../../../js/constants/settings')
const locale = require('../../../../../js/l10n')

// State
const ledgerState = require('../../../../common/state/ledgerState')

// components
const ImmutableComponent = require('../../immutableComponent')
const BrowserButton = require('../../common/browserButton')
Expand Down Expand Up @@ -266,6 +268,7 @@ class EnabledContent extends ImmutableComponent {
render () {
const ledgerData = this.props.ledgerData
const walletStatusText = walletStatus(ledgerData)
const contributionAmount = ledgerState.getContributionAmount(null, ledgerData.get('contributionAmount'), this.props.settings)
const inTransition = ledgerData.getIn(['migration', 'btc2BatTransitionPending']) === true

return <section className={css(styles.enabledContent)}>
Expand Down Expand Up @@ -305,7 +308,7 @@ class EnabledContent extends ImmutableComponent {
<FormDropdown
data-isPanel
data-test-id='fundsSelectBox'
value={getSetting(settings.PAYMENTS_CONTRIBUTION_AMOUNT, this.props.settings)}
value={contributionAmount}
onChange={changeSetting.bind(null, this.props.onChangeSetting, settings.PAYMENTS_CONTRIBUTION_AMOUNT)}>
{
[5.0, 7.5, 10.0, 17.5, 25.0, 50.0, 75.0, 100.0].map((amount) => {
Expand Down
5 changes: 4 additions & 1 deletion app/renderer/components/preferences/paymentsTab.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ const {LedgerRecoveryContent, LedgerRecoveryFooter} = require('./payment/ledgerR
// Actions
const appActions = require('../../../../js/actions/appActions')

// State
const ledgerState = require('../../../common/state/ledgerState')

// Style
const globalStyles = require('../styles/global')
const {paymentStylesVariables} = require('../styles/payment')
Expand Down Expand Up @@ -79,7 +82,7 @@ class PaymentsTab extends ImmutableComponent {
const walletQR = ledgerData.get('walletQR') || Immutable.List()
const wizardData = ledgerData.get('wizardData') || Immutable.Map()
const funds = formatCurrentBalance(ledgerData)
const budget = getSetting(settings.PAYMENTS_CONTRIBUTION_AMOUNT, this.props.settings)
const budget = ledgerState.getContributionAmount(null, ledgerData.get('contributionAmount'), this.props.settings)
const minAmount = batToCurrencyString(budget, ledgerData)

return <AddFundsDialog
Expand Down
3 changes: 2 additions & 1 deletion docs/state.md
Original file line number Diff line number Diff line change
Expand Up @@ -201,8 +201,9 @@ AppStore
},
setting: string
},
contributionAmount: number,
converted: string,
created, bolean, // wallet is created
created, boolean, // wallet is created
creating: boolean, // wallet is being created
currentRate: number,
hasBitcoinHandler: boolean, // brave browser has a `bitcoin:` URI handler
Expand Down
Loading

0 comments on commit 5e0c26d

Please sign in to comment.