/** @format */
/**
* External dependencies
*/
import { __, _n, sprintf } from '@wordpress/i18n';
import { Button } from '@wordpress/components';
import { Fragment } from '@wordpress/element';
import { compose } from '@wordpress/compose';
import PropTypes from 'prop-types';
import { noop } from 'lodash';
import interpolateComponents from 'interpolate-components';
/**
* WooCommerce dependencies
*/
import {
EllipsisMenu,
EmptyContent,
Flag,
Link,
MenuTitle,
MenuItem,
OrderStatus,
Section,
} from '@woocommerce/components';
import { formatCurrency, getCurrencyFormatDecimal } from '@woocommerce/currency';
import { getAdminLink, getNewPath } from '@woocommerce/navigation';
/**
* Internal dependencies
*/
import { ActivityCard, ActivityCardPlaceholder } from '../activity-card';
import ActivityHeader from '../activity-header';
import ActivityOutboundLink from '../activity-outbound-link';
import { DEFAULT_ACTIONABLE_STATUSES, QUERY_DEFAULTS } from 'wc-api/constants';
import withSelect from 'wc-api/with-select';
function OrdersPanel( { orders, isRequesting, isError, orderStatuses } ) {
if ( isError ) {
if ( ! orderStatuses.length ) {
return (
);
}
const title = __(
'There was an error getting your orders. Please try again.',
'woocommerce-admin'
);
const actionLabel = __( 'Reload', 'woocommerce-admin' );
const actionCallback = () => {
// @todo Add tracking for how often an error is displayed, and the reload action is clicked.
window.location.reload();
};
return (
);
}
const menu = (
Test
);
const getCustomerString = order => {
const extended_info = order.extended_info || {};
const { first_name, last_name } = extended_info.customer || {};
if ( ! first_name && ! last_name ) {
return '';
}
const name = [ first_name, last_name ].join( ' ' );
return sprintf(
__(
/* translators: describes who placed an order, e.g. Order #123 placed by John Doe */
'placed by {{customerLink}}%(customerName)s{{/customerLink}}',
'woocommerce-admin'
),
{
customerName: name,
}
);
};
const orderCardTitle = order => {
const { extended_info, order_id } = order;
const { customer } = extended_info || {};
const customerUrl = customer.customer_id
? getNewPath( {}, '/analytics/customers', {
filter: 'single_customer',
customers: customer.customer_id,
} )
: null;
return (
{ interpolateComponents( {
mixedString: sprintf(
__(
'Order {{orderLink}}#%(orderNumber)s{{/orderLink}} %(customerString)s {{destinationFlag/}}',
'woocommerce-admin'
),
{
orderNumber: order_id,
customerString: getCustomerString( order ),
}
),
components: {
orderLink: ,
destinationFlag: customer.country ? (
) : null,
customerLink: customerUrl ? : ,
},
} ) }
);
};
const cards = [];
orders.forEach( order => {
const extended_info = order.extended_info || {};
const productsCount =
extended_info && extended_info.products ? extended_info.products.length : 0;
const total = order.gross_total;
const refundValue = order.refund_total;
const remainingTotal = getCurrencyFormatDecimal( total ) + refundValue;
cards.push(
{ sprintf(
_n( '%d product', '%d products', productsCount, 'woocommerce-admin' ),
productsCount
) }
{ refundValue ? (
{ formatCurrency( total ) } { formatCurrency( remainingTotal ) }
) : (
{ formatCurrency( total ) }
) }
}
actions={
}
>
);
} );
return (
{ isRequesting ? (
) : (
{ cards }
{ __( 'Manage all orders' ) }
) }
);
}
OrdersPanel.propTypes = {
orders: PropTypes.array.isRequired,
isError: PropTypes.bool,
isRequesting: PropTypes.bool,
};
OrdersPanel.defaultProps = {
orders: [],
isError: false,
isRequesting: false,
};
export default compose(
withSelect( ( select, props ) => {
const { getReportItems, getReportItemsError, isReportItemsRequesting } = select( 'wc-api' );
const { isEmpty } = props;
const orderStatuses =
wcSettings.wcAdminSettings.woocommerce_actionable_order_statuses ||
DEFAULT_ACTIONABLE_STATUSES;
if ( ! orderStatuses.length ) {
return { orders: [], isError: true, isRequesting: false, orderStatuses };
}
if ( isEmpty ) {
return { orders: [], isError: false, isRequesting: false, orderStatuses };
}
const ordersQuery = {
page: 1,
per_page: QUERY_DEFAULTS.pageSize,
status_is: orderStatuses,
extended_info: true,
};
const orders = getReportItems( 'orders', ordersQuery ).data;
const isError = Boolean( getReportItemsError( 'orders', ordersQuery ) );
const isRequesting = isReportItemsRequesting( 'orders', ordersQuery );
return { orders, isError, isRequesting, orderStatuses };
} )
)( OrdersPanel );