144 lines
3.4 KiB
JavaScript
144 lines
3.4 KiB
JavaScript
import {addFilter} from '@wordpress/hooks';
|
|
import * as P from "./parameters";
|
|
|
|
const namespace = "wpwham/currency-switcher-woocommerce/analytics";
|
|
|
|
const addCurrencyFilters = (filters) => {
|
|
|
|
let filterByCurrency = {
|
|
label: P.getLabel(),
|
|
staticParams: [],
|
|
param: 'currency',
|
|
showFilters: () => true,
|
|
defaultValue: P.getStoreCurrency(),
|
|
filters: [...(P.getCurrencies() || [])],
|
|
};
|
|
|
|
return [...filters, filterByCurrency];
|
|
};
|
|
|
|
P.getPages().forEach(page => {
|
|
|
|
/**
|
|
* Adds the hook to the appropriate hooks container.
|
|
*
|
|
* @param {string} hookName Name of hook to add
|
|
* @param {string} namespace The unique namespace identifying the callback in the form `vendor/plugin/function`.
|
|
* @param {Function} callback Function to call when the hook is run
|
|
* @param {?number} priority Priority of this hook (default=10)
|
|
*/
|
|
addFilter(
|
|
`woocommerce_admin_${page}_report_filters`,
|
|
namespace,
|
|
addCurrencyFilters
|
|
);
|
|
|
|
});
|
|
|
|
/**
|
|
* Add a column to a report table. Include a header and
|
|
* manipulate each row to handle the added parameter.
|
|
*
|
|
* @param {Object} reportTableData - table data.
|
|
* @return {Object} - table data.
|
|
*/
|
|
const addTableColumn = (reportTableData) => {
|
|
|
|
if (
|
|
!P.getPages().includes(reportTableData.endpoint) ||
|
|
!reportTableData.items ||
|
|
!reportTableData.items.data ||
|
|
!reportTableData.items.data.length
|
|
) {
|
|
return reportTableData;
|
|
}
|
|
|
|
const newHeaders = [
|
|
...reportTableData.headers,
|
|
{
|
|
label: P.getLabel(),
|
|
key: 'currency',
|
|
},
|
|
];
|
|
const newRows = reportTableData.rows.map((row, index) => {
|
|
const item = reportTableData.items.data[index];
|
|
const currency =
|
|
reportTableData.endpoint === 'revenue'
|
|
? item.subtotals.currency
|
|
: item.currency;
|
|
return [
|
|
...row,
|
|
{
|
|
display: currency,
|
|
value: currency,
|
|
},
|
|
];
|
|
});
|
|
|
|
reportTableData.headers = newHeaders;
|
|
reportTableData.rows = newRows;
|
|
|
|
return reportTableData;
|
|
};
|
|
|
|
addFilter(
|
|
'woocommerce_admin_report_table',
|
|
namespace,
|
|
addTableColumn
|
|
);
|
|
|
|
/**
|
|
* Add 'currency' to the list of persisted queries so that the parameter remains
|
|
* when navigating from report to report.
|
|
*
|
|
* @param {Array} params - array of report slugs.
|
|
* @return {Array} - array of report slugs including 'currency'.
|
|
*/
|
|
const persistQueries = (params) => {
|
|
params.push('currency');
|
|
return params;
|
|
};
|
|
|
|
addFilter(
|
|
'woocommerce_admin_persisted_queries',
|
|
namespace,
|
|
persistQueries
|
|
);
|
|
|
|
/**
|
|
* Change the price display format.
|
|
*
|
|
* @param {Object} config Currency configuration.
|
|
* @param {String} currency Currency code in the query.
|
|
* @returns {Object} Modified configuration.
|
|
*/
|
|
const changePriceDisplayFormat = (config, {currency}) => {
|
|
|
|
// don't change format on the overview page, since the currency is currently not filterable there
|
|
var path = new RegExp( '[\?&]' + 'path' + '=([^&#]*)' ).exec( window.location.search );
|
|
var result = ( path !== null ) ? decodeURIComponent( path[1] ) : false;
|
|
if ( result === '/analytics/overview' ) {
|
|
return config;
|
|
}
|
|
|
|
if ( currency ) {
|
|
/* idea for later:
|
|
jQuery( '#wp-admin-bar-reports_currency_select > div.ab-item' )
|
|
.attr( 'title', wpw_currency_switcher.i18n.show_reports_in + ' ' + currency )
|
|
.text( wpw_currency_switcher.i18n.reports_currency + ' ' + currency );
|
|
*/
|
|
// Currency is in the query, eq ?currency=JPY.
|
|
config['code'] = currency;
|
|
config['symbol'] = currency;
|
|
}
|
|
|
|
config['priceFormat'] = '%2$s';
|
|
|
|
return config;
|
|
};
|
|
|
|
addFilter(
|
|
'woocommerce_admin_report_currency',
|
|
namespace,
|
|
changePriceDisplayFormat
|
|
);
|