/** @format */
/**
* External dependencies
*/
import { __ } from '@wordpress/i18n';
import { Component, Fragment } from '@wordpress/element';
import { get, map } from 'lodash';
import PropTypes from 'prop-types';
/**
* Internal dependencies
*/
import Card from 'components/card';
import DatePicker from 'components/date-picker';
import { formatCurrency } from 'lib/currency';
import { getAdminLink, updateQueryString } from 'lib/nav-utils';
import { getReportData } from 'lib/swagger';
import Header from 'layout/header';
import { SummaryList, SummaryNumber } from 'components/summary';
import Table from 'components/table';
import Pagination from 'components/pagination';
class RevenueReport extends Component {
constructor() {
super();
this.onPageChange = this.onPageChange.bind( this );
this.onPerPageChange = this.onPerPageChange.bind( this );
// TODO remove this when we implement real endpoints
this.state = { stats: {} };
}
onPageChange( page ) {
updateQueryString( { page } );
}
componentDidMount() {
// Swagger doesn't support returning different data based on query args
// this is more or less to show how we will manipulate data calls based on props
const statsQueryArgs = {
interval: 'week',
after: '2018-04-22',
before: '2018-05-06',
};
getReportData( 'revenue/stats', statsQueryArgs ).then( response => {
if ( ! response.ok ) {
return;
}
response.json().then( data => {
this.setState( { stats: data } );
} );
} );
}
onPerPageChange( perPage ) {
updateQueryString( { per_page: perPage } );
}
getRowsContent( data ) {
return map( data, row => {
const {
coupons,
gross_revenue,
net_revenue,
orders_count,
refunds,
shipping,
taxes,
} = row.subtotals;
// @TODO How to create this per-report? Can use `w`, `year`, `m` to build time-specific order links
// we need to know which kind of report this is, and parse the `label` to get this row's date
const orderLink = (
{ orders_count }
);
return [
row.start_date,
orderLink,
formatCurrency( gross_revenue ),
formatCurrency( refunds ),
formatCurrency( coupons ),
formatCurrency( taxes ),
formatCurrency( shipping ),
formatCurrency( net_revenue ),
];
} );
}
render() {
const { path, query } = this.props;
const summaryStats = get( this.state.stats, 'totals', {} );
const intervalStats = get( this.state.stats, 'intervals', [] );
const rows = this.getRowsContent( intervalStats ) || [];
const headers = [
__( 'Date', 'wc-admin' ),
__( 'Orders', 'wc-admin' ),
__( 'Gross Revenue', 'wc-admin' ),
__( 'Refunds', 'wc-admin' ),
__( 'Coupons', 'wc-admin' ),
__( 'Taxes', 'wc-admin' ),
__( 'Shipping', 'wc-admin' ),
__( 'Net Revenue', 'wc-admin' ),
];
return (
Graph here
{ /* @todo Switch a placeholder view if we don't have rows */ }
);
}
}
RevenueReport.propTypes = {
params: PropTypes.object.isRequired,
path: PropTypes.string.isRequired,
query: PropTypes.object.isRequired,
};
export default RevenueReport;