lbry-desktop/ui/js/actions/cost_info.js
2017-08-30 16:56:14 -04:00

58 lines
1.5 KiB
JavaScript

import * as types from "constants/action_types";
import lbry from "lbry";
import lbryio from "lbryio";
import { doResolveUri } from "actions/content";
import { selectResolvingUris } from "selectors/content";
import { selectClaimsByUri } from "selectors/claims";
import { selectSettingsIsGenerous } from "selectors/settings";
export function doFetchCostInfoForUri(uri) {
return function(dispatch, getState) {
const state = getState(),
claim = selectClaimsByUri(state)[uri],
isGenerous = selectSettingsIsGenerous(state);
if (!claim) return null;
function begin() {
dispatch({
type: types.FETCH_COST_INFO_STARTED,
data: {
uri,
},
});
}
function resolve(costInfo) {
dispatch({
type: types.FETCH_COST_INFO_COMPLETED,
data: {
uri,
costInfo,
},
});
}
if (isGenerous && claim) {
let cost;
const fee = claim.value &&
claim.value.stream &&
claim.value.stream.metadata
? claim.value.stream.metadata.fee
: undefined;
if (fee === undefined) {
resolve({ cost: 0, includesData: true });
} else if (fee.currency == "LBC") {
resolve({ cost: fee.amount, includesData: true });
} else {
begin();
lbryio.getExchangeRates().then(({ lbc_usd }) => {
resolve({ cost: fee.amount / lbc_usd, includesData: true });
});
}
} else {
begin();
lbry.getCostInfo(uri).then(resolve);
}
};
}