signed support functionality #322
2 changed files with 211 additions and 209 deletions
307
dist/bundle.es.js
vendored
307
dist/bundle.es.js
vendored
File diff suppressed because it is too large
Load diff
|
@ -1,7 +1,11 @@
|
||||||
import * as ACTIONS from 'constants/action_types';
|
import * as ACTIONS from 'constants/action_types';
|
||||||
import Lbry from 'lbry';
|
import Lbry from 'lbry';
|
||||||
import { doToast } from 'redux/actions/notifications';
|
import { doToast } from 'redux/actions/notifications';
|
||||||
import { selectBalance, selectPendingSupportTransactions, selectTxoPageParams } from 'redux/selectors/wallet';
|
import {
|
||||||
|
selectBalance,
|
||||||
|
selectPendingSupportTransactions,
|
||||||
|
selectTxoPageParams,
|
||||||
|
} from 'redux/selectors/wallet';
|
||||||
import { creditsToString } from 'util/format-credits';
|
import { creditsToString } from 'util/format-credits';
|
||||||
import { selectMyClaimsRaw } from 'redux/selectors/claims';
|
import { selectMyClaimsRaw } from 'redux/selectors/claims';
|
||||||
import { doFetchChannelListMine, doFetchClaimListMine } from 'redux/actions/claims';
|
import { doFetchChannelListMine, doFetchClaimListMine } from 'redux/actions/claims';
|
||||||
|
@ -98,7 +102,7 @@ export function doFetchTxoPage() {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export function doUpdateTxoPageParams(params: TxoListParams) {
|
export function doUpdateTxoPageParams(params) {
|
||||||
return dispatch => {
|
return dispatch => {
|
||||||
dispatch({
|
dispatch({
|
||||||
type: ACTIONS.UPDATE_TXO_FETCH_PARAMS,
|
type: ACTIONS.UPDATE_TXO_FETCH_PARAMS,
|
||||||
|
@ -236,16 +240,16 @@ export function doSetDraftTransactionAddress(address) {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export function doSendTip(amount, claimId, isSupport, successCallback, errorCallback) {
|
export function doSendTip(params, isSupport, successCallback, errorCallback) {
|
||||||
return (dispatch, getState) => {
|
return (dispatch, getState) => {
|
||||||
const state = getState();
|
const state = getState();
|
||||||
const balance = selectBalance(state);
|
const balance = selectBalance(state);
|
||||||
const myClaims = selectMyClaimsRaw(state);
|
const myClaims = selectMyClaimsRaw(state);
|
||||||
|
|
||||||
const shouldSupport =
|
const shouldSupport =
|
||||||
isSupport || (myClaims ? myClaims.find(claim => claim.claim_id === claimId) : false);
|
isSupport || (myClaims ? myClaims.find(claim => claim.claim_id === params.claim_id) : false);
|
||||||
|
|
||||||
if (balance - amount <= 0) {
|
if (balance - params.amount <= 0) {
|
||||||
dispatch(
|
dispatch(
|
||||||
doToast({
|
doToast({
|
||||||
message: __('Insufficient credits'),
|
message: __('Insufficient credits'),
|
||||||
|
@ -259,8 +263,8 @@ export function doSendTip(amount, claimId, isSupport, successCallback, errorCall
|
||||||
dispatch(
|
dispatch(
|
||||||
doToast({
|
doToast({
|
||||||
message: shouldSupport
|
message: shouldSupport
|
||||||
? __('You deposited %amount% LBC as a support!', { amount })
|
? __('You deposited %amount% LBC as a support!', { amount: params.amount })
|
||||||
: __('You sent %amount% LBC as a tip, Mahalo!', { amount }),
|
: __('You sent %amount% LBC as a tip, Mahalo!', { amount: params.amount }),
|
||||||
linkText: __('History'),
|
linkText: __('History'),
|
||||||
linkTarget: __('/wallet'),
|
linkTarget: __('/wallet'),
|
||||||
})
|
})
|
||||||
|
@ -300,10 +304,10 @@ export function doSendTip(amount, claimId, isSupport, successCallback, errorCall
|
||||||
});
|
});
|
||||||
|
|
||||||
Lbry.support_create({
|
Lbry.support_create({
|
||||||
claim_id: claimId,
|
...params,
|
||||||
amount: creditsToString(amount),
|
|
||||||
tip: !shouldSupport,
|
tip: !shouldSupport,
|
||||||
blocking: true,
|
blocking: true,
|
||||||
|
amount: creditsToString(params.amount),
|
||||||
}).then(success, error);
|
}).then(success, error);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -380,7 +384,7 @@ export function doWalletLock() {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export function doSupportAbandonForClaim(claimId, claimType, keep, preview) {
|
export function doSupportAbandonForClaim(claimId, claimType, keep, preview) {
|
||||||
return dispatch => {
|
return dispatch => {
|
||||||
if (preview) {
|
if (preview) {
|
||||||
dispatch({
|
dispatch({
|
||||||
|
@ -392,27 +396,26 @@ export function doSupportAbandonForClaim(claimId, claimType, keep, preview) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const params = {claim_id: claimId};
|
const params = { claim_id: claimId };
|
||||||
if (preview) params['preview'] = true;
|
if (preview) params['preview'] = true;
|
||||||
if (keep) params['keep'] = keep;
|
if (keep) params['keep'] = keep;
|
||||||
return (
|
return Lbry.support_abandon(params)
|
||||||
Lbry.support_abandon(params)
|
.then(res => {
|
||||||
.then((res) => {
|
if (!preview) {
|
||||||
if (!preview) {
|
|
||||||
dispatch({
|
|
||||||
type: ACTIONS.ABANDON_CLAIM_SUPPORT_COMPLETED,
|
|
||||||
data: { claimId, txid: res.txid, effective: res.outputs[0].amount, type: claimType}, // add to pendingSupportTransactions,
|
|
||||||
});
|
|
||||||
dispatch(doCheckPendingTxs());
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
})
|
|
||||||
.catch(e => {
|
|
||||||
dispatch({
|
dispatch({
|
||||||
type: ACTIONS.ABANDON_CLAIM_SUPPORT_FAILED,
|
type: ACTIONS.ABANDON_CLAIM_SUPPORT_COMPLETED,
|
||||||
data: e.message,
|
data: { claimId, txid: res.txid, effective: res.outputs[0].amount, type: claimType }, // add to pendingSupportTransactions,
|
||||||
});
|
});
|
||||||
}));
|
dispatch(doCheckPendingTxs());
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
})
|
||||||
|
.catch(e => {
|
||||||
|
dispatch({
|
||||||
|
type: ACTIONS.ABANDON_CLAIM_SUPPORT_FAILED,
|
||||||
|
data: e.message,
|
||||||
|
});
|
||||||
|
});
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -469,7 +472,6 @@ export function doWalletStatus() {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export function doSetTransactionListFilter(filterOption) {
|
export function doSetTransactionListFilter(filterOption) {
|
||||||
return {
|
return {
|
||||||
type: ACTIONS.SET_TRANSACTION_LIST_FILTER,
|
type: ACTIONS.SET_TRANSACTION_LIST_FILTER,
|
||||||
|
@ -490,10 +492,7 @@ export function doUpdateBlockHeight() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calls transaction_show on txes until any pending txes are confirmed
|
// Calls transaction_show on txes until any pending txes are confirmed
|
||||||
export const doCheckPendingTxs = () => (
|
export const doCheckPendingTxs = () => (dispatch, getState) => {
|
||||||
dispatch,
|
|
||||||
getState
|
|
||||||
) => {
|
|
||||||
const state = getState();
|
const state = getState();
|
||||||
const pendingTxsById = selectPendingSupportTransactions(state); // {}
|
const pendingTxsById = selectPendingSupportTransactions(state); // {}
|
||||||
if (!Object.keys(pendingTxsById).length) {
|
if (!Object.keys(pendingTxsById).length) {
|
||||||
|
@ -508,35 +507,37 @@ export const doCheckPendingTxs = () => (
|
||||||
const types = new Set([]);
|
const types = new Set([]);
|
||||||
let changed = false;
|
let changed = false;
|
||||||
Object.entries(pendingTxs).forEach(([claim, data]) => {
|
Object.entries(pendingTxs).forEach(([claim, data]) => {
|
||||||
promises.push(Lbry.transaction_show({txid: data.txid}));
|
promises.push(Lbry.transaction_show({ txid: data.txid }));
|
||||||
types.add(data.type);
|
types.add(data.type);
|
||||||
});
|
});
|
||||||
|
|
||||||
Promise.all(promises).then(txShows => {
|
Promise.all(promises)
|
||||||
txShows.forEach(result => {
|
.then(txShows => {
|
||||||
if (result.height <= 0) {
|
txShows.forEach(result => {
|
||||||
const entries = Object.entries(pendingTxs);
|
if (result.height <= 0) {
|
||||||
const match = entries.find((entry) => entry[1].txid === result.txid);
|
const entries = Object.entries(pendingTxs);
|
||||||
newPendingTxes[match[0]] = match[1];
|
const match = entries.find(entry => entry[1].txid === result.txid);
|
||||||
} else {
|
newPendingTxes[match[0]] = match[1];
|
||||||
changed = true;
|
} else {
|
||||||
}
|
changed = true;
|
||||||
});
|
}
|
||||||
}).then(() => {
|
|
||||||
if (changed) {
|
|
||||||
dispatch({
|
|
||||||
type: ACTIONS.PENDING_SUPPORTS_UPDATED,
|
|
||||||
data: newPendingTxes,
|
|
||||||
});
|
});
|
||||||
if (types.has('channel')) {
|
})
|
||||||
dispatch(doFetchChannelListMine());
|
.then(() => {
|
||||||
|
if (changed) {
|
||||||
|
dispatch({
|
||||||
|
type: ACTIONS.PENDING_SUPPORTS_UPDATED,
|
||||||
|
data: newPendingTxes,
|
||||||
|
});
|
||||||
|
if (types.has('channel')) {
|
||||||
|
dispatch(doFetchChannelListMine());
|
||||||
|
}
|
||||||
|
if (types.has('stream')) {
|
||||||
|
dispatch(doFetchClaimListMine());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (types.has('stream')) {
|
if (Object.keys(newPendingTxes).length === 0) clearInterval(txCheckInterval);
|
||||||
dispatch(doFetchClaimListMine());
|
});
|
||||||
}
|
|
||||||
}
|
|
||||||
if (Object.keys(newPendingTxes).length === 0) clearInterval(txCheckInterval);
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!Object.keys(pendingTxsById).length) {
|
if (!Object.keys(pendingTxsById).length) {
|
||||||
clearInterval(txCheckInterval);
|
clearInterval(txCheckInterval);
|
||||||
|
|
Loading…
Reference in a new issue