60 lines
1.4 KiB
JavaScript
60 lines
1.4 KiB
JavaScript
// @flow
|
|
import React from 'react';
|
|
import CreditAmount from 'component/common/credit-amount';
|
|
|
|
type Props = {
|
|
showFullPrice: boolean,
|
|
costInfo: ?{ includesData: boolean, cost: number },
|
|
fetchCostInfo: string => void,
|
|
uri: string,
|
|
fetching: boolean,
|
|
claim: ?{},
|
|
// below props are just passed to <CreditAmount />
|
|
badge?: boolean,
|
|
inheritStyle?: boolean,
|
|
showLBC?: boolean,
|
|
hideFree?: boolean, // hide the file price if it's free
|
|
};
|
|
|
|
class FilePrice extends React.PureComponent<Props> {
|
|
static defaultProps = {
|
|
showFullPrice: false,
|
|
};
|
|
|
|
componentDidMount() {
|
|
this.fetchCost(this.props);
|
|
}
|
|
|
|
componentDidUpdate() {
|
|
this.fetchCost(this.props);
|
|
}
|
|
|
|
fetchCost = (props: Props) => {
|
|
const { costInfo, fetchCostInfo, uri, fetching, claim } = props;
|
|
|
|
if (costInfo === undefined && !fetching && claim) {
|
|
fetchCostInfo(uri);
|
|
}
|
|
};
|
|
|
|
render() {
|
|
const { costInfo, showFullPrice, badge, inheritStyle, showLBC, hideFree } = this.props;
|
|
if (costInfo && (!costInfo.cost || (!costInfo.cost && hideFree))) {
|
|
return null;
|
|
}
|
|
|
|
return costInfo ? (
|
|
<CreditAmount
|
|
showFree
|
|
badge={badge}
|
|
inheritStyle={inheritStyle}
|
|
showLBC={showLBC}
|
|
amount={costInfo.cost}
|
|
isEstimate={!costInfo.includesData}
|
|
showFullPrice={showFullPrice}
|
|
/>
|
|
) : null;
|
|
}
|
|
}
|
|
|
|
export default FilePrice;
|