149 lines
3.6 KiB
JavaScript
149 lines
3.6 KiB
JavaScript
import { createSelector } from "reselect";
|
|
|
|
export const _selectState = state => state.wallet || {};
|
|
|
|
export const selectBalance = createSelector(
|
|
_selectState,
|
|
state => state.balance
|
|
);
|
|
|
|
export const selectTransactionsById = createSelector(
|
|
_selectState,
|
|
state => state.transactions
|
|
);
|
|
|
|
export const selectTransactionItems = createSelector(
|
|
selectTransactionsById,
|
|
byId => {
|
|
const items = [];
|
|
|
|
Object.keys(byId).forEach(txid => {
|
|
const tx = byId[txid];
|
|
|
|
//ignore dust/fees
|
|
if (Math.abs(tx.amount) === Math.abs(tx.fee)) {
|
|
return;
|
|
}
|
|
|
|
let append = [];
|
|
|
|
append.push(
|
|
...tx.claim_info.map(item =>
|
|
Object.assign({}, tx, item, {
|
|
type: item.claim_name[0] === "@" ? "channel" : "publish",
|
|
})
|
|
)
|
|
);
|
|
append.push(
|
|
...tx.support_info.map(item =>
|
|
Object.assign({}, tx, item, {
|
|
type: !item.is_tip ? "support" : "tip",
|
|
})
|
|
)
|
|
);
|
|
append.push(
|
|
...tx.update_info.map(item =>
|
|
Object.assign({}, tx, item, { type: "update" })
|
|
)
|
|
);
|
|
|
|
if (!append.length) {
|
|
append.push(
|
|
Object.assign({}, tx, {
|
|
type: tx.value < 0 ? "spend" : "receive",
|
|
})
|
|
);
|
|
}
|
|
|
|
items.push(
|
|
...append.map(item => {
|
|
//value on transaction, amount on outpoint
|
|
//amount is always positive, but should match sign of value
|
|
const amount = parseFloat(
|
|
item.amount ? (item.value < 0 ? -1 : 1) * item.amount : item.value
|
|
);
|
|
|
|
return {
|
|
txid: txid,
|
|
date: tx.timestamp ? new Date(parseInt(tx.timestamp) * 1000) : null,
|
|
amount: amount,
|
|
fee: amount < 0 ? -1 * tx.fee / append.length : 0,
|
|
claim_id: item.claim_id,
|
|
claim_name: item.claim_name,
|
|
type: item.type || "send",
|
|
nout: item.nout,
|
|
};
|
|
})
|
|
);
|
|
});
|
|
return items.reverse();
|
|
}
|
|
);
|
|
|
|
export const selectRecentTransactions = createSelector(
|
|
selectTransactionItems,
|
|
transactions => {
|
|
let threshold = new Date();
|
|
threshold.setDate(threshold.getDate() - 7);
|
|
return transactions.filter(transaction => {
|
|
return transaction.date > threshold;
|
|
});
|
|
}
|
|
);
|
|
|
|
export const selectHasTransactions = createSelector(
|
|
selectTransactionItems,
|
|
transactions => {
|
|
return transactions && transactions.length > 0;
|
|
}
|
|
);
|
|
|
|
export const selectIsFetchingTransactions = createSelector(
|
|
_selectState,
|
|
state => state.fetchingTransactions
|
|
);
|
|
|
|
export const selectIsSendingSupport = createSelector(
|
|
_selectState,
|
|
state => state.sendingSupport
|
|
);
|
|
|
|
export const selectReceiveAddress = createSelector(
|
|
_selectState,
|
|
state => state.receiveAddress
|
|
);
|
|
|
|
export const selectGettingNewAddress = createSelector(
|
|
_selectState,
|
|
state => state.gettingNewAddress
|
|
);
|
|
|
|
export const selectDraftTransaction = createSelector(
|
|
_selectState,
|
|
state => state.draftTransaction || {}
|
|
);
|
|
|
|
export const selectDraftTransactionAmount = createSelector(
|
|
selectDraftTransaction,
|
|
draft => draft.amount
|
|
);
|
|
|
|
export const selectDraftTransactionAddress = createSelector(
|
|
selectDraftTransaction,
|
|
draft => draft.address
|
|
);
|
|
|
|
export const selectDraftTransactionError = createSelector(
|
|
selectDraftTransaction,
|
|
draft => draft.error
|
|
);
|
|
|
|
export const selectBlocks = createSelector(_selectState, state => state.blocks);
|
|
|
|
export const makeSelectBlockDate = block => {
|
|
return createSelector(
|
|
selectBlocks,
|
|
blocks =>
|
|
blocks && blocks[block] ? new Date(blocks[block].time * 1000) : undefined
|
|
);
|
|
};
|