2018-05-15 15:06:15 +00:00
|
|
|
/**
|
|
|
|
* External dependencies
|
|
|
|
*/
|
2018-08-20 21:24:17 +00:00
|
|
|
import { __ } from '@wordpress/i18n';
|
|
|
|
import { applyFilters } from '@wordpress/hooks';
|
2019-07-05 08:15:49 +00:00
|
|
|
import { Component } from '@wordpress/element';
|
2019-02-01 09:55:19 +00:00
|
|
|
import { compose } from '@wordpress/compose';
|
2018-06-14 20:15:11 +00:00
|
|
|
import PropTypes from 'prop-types';
|
2018-08-20 21:24:17 +00:00
|
|
|
import { find } from 'lodash';
|
2018-05-15 15:06:15 +00:00
|
|
|
|
2018-11-15 18:16:23 +00:00
|
|
|
/**
|
|
|
|
* WooCommerce dependencies
|
|
|
|
*/
|
|
|
|
import { useFilters } from '@woocommerce/components';
|
2019-02-26 10:06:37 +00:00
|
|
|
import { getQuery, getSearchWords } from '@woocommerce/navigation';
|
2019-09-23 21:47:08 +00:00
|
|
|
import { getSetting } from '@woocommerce/wc-admin-settings';
|
2018-11-15 18:16:23 +00:00
|
|
|
|
2018-05-15 15:06:15 +00:00
|
|
|
/**
|
|
|
|
* Internal dependencies
|
|
|
|
*/
|
Add loading indicators, error state, and EmptyContent to the revenue report. (#347, woocommerce/woocommerce-admin#348)
* Add loading indiciators for the revenue report.
* Improve accessibility, and fix up some documentation comments.
* Fix top border on mobile
* Add EmptyContent Component and revenue error/empty states. (https://github.com/woocommerce/woocommerce-admin/pull/348)
* Add EmptyContent Component and revenue error/empty states.
* Move relative image handling to ImageAsset, combine secondary and primary action rendering, add some missing isRequired proptypes, add empty error handling.
* Handle PR Feedback: Clean up button css, set a default for illustration, fix deprecation typo, some code cleanup.
2018-09-05 16:45:49 +00:00
|
|
|
import './style.scss';
|
2018-08-20 21:24:17 +00:00
|
|
|
import OrdersReport from './orders';
|
2018-07-12 01:43:33 +00:00
|
|
|
import ProductsReport from './products';
|
2018-08-20 21:24:17 +00:00
|
|
|
import RevenueReport from './revenue';
|
2018-11-16 13:33:58 +00:00
|
|
|
import CategoriesReport from './categories';
|
2018-09-17 02:26:34 +00:00
|
|
|
import CouponsReport from './coupons';
|
2018-11-14 21:04:59 +00:00
|
|
|
import TaxesReport from './taxes';
|
2018-12-17 20:50:45 +00:00
|
|
|
import DownloadsReport from './downloads';
|
2018-12-14 23:58:08 +00:00
|
|
|
import StockReport from './stock';
|
2018-12-06 22:21:46 +00:00
|
|
|
import CustomersReport from './customers';
|
2019-02-26 09:28:50 +00:00
|
|
|
import ReportError from 'analytics/components/report-error';
|
2019-02-01 09:55:19 +00:00
|
|
|
import { searchItemsByString } from 'wc-api/items/utils';
|
|
|
|
import withSelect from 'wc-api/with-select';
|
2020-04-02 21:54:38 +00:00
|
|
|
import {
|
|
|
|
CurrencyContext,
|
|
|
|
getFilteredCurrencyInstance,
|
|
|
|
} from 'lib/currency-context';
|
2018-08-20 21:24:17 +00:00
|
|
|
|
2019-07-05 08:15:49 +00:00
|
|
|
export const REPORTS_FILTER = 'woocommerce_admin_reports_list';
|
2019-09-23 21:47:08 +00:00
|
|
|
const manageStock = getSetting( 'manageStock', 'no' );
|
2018-08-20 21:24:17 +00:00
|
|
|
|
2019-07-05 08:15:49 +00:00
|
|
|
export const getReports = () => {
|
2019-02-12 20:02:02 +00:00
|
|
|
const reports = [
|
2018-08-20 21:24:17 +00:00
|
|
|
{
|
|
|
|
report: 'revenue',
|
2019-03-13 17:14:02 +00:00
|
|
|
title: __( 'Revenue', 'woocommerce-admin' ),
|
2018-08-20 21:24:17 +00:00
|
|
|
component: RevenueReport,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
report: 'products',
|
2019-03-13 17:14:02 +00:00
|
|
|
title: __( 'Products', 'woocommerce-admin' ),
|
2018-08-20 21:24:17 +00:00
|
|
|
component: ProductsReport,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
report: 'orders',
|
2019-03-13 17:14:02 +00:00
|
|
|
title: __( 'Orders', 'woocommerce-admin' ),
|
2018-08-20 21:24:17 +00:00
|
|
|
component: OrdersReport,
|
|
|
|
},
|
2018-11-16 13:33:58 +00:00
|
|
|
{
|
|
|
|
report: 'categories',
|
2019-03-13 17:14:02 +00:00
|
|
|
title: __( 'Categories', 'woocommerce-admin' ),
|
2018-11-16 13:33:58 +00:00
|
|
|
component: CategoriesReport,
|
|
|
|
},
|
2018-09-17 02:26:34 +00:00
|
|
|
{
|
|
|
|
report: 'coupons',
|
2019-03-13 17:14:02 +00:00
|
|
|
title: __( 'Coupons', 'woocommerce-admin' ),
|
2018-09-17 02:26:34 +00:00
|
|
|
component: CouponsReport,
|
|
|
|
},
|
2018-11-14 21:04:59 +00:00
|
|
|
{
|
|
|
|
report: 'taxes',
|
2019-03-13 17:14:02 +00:00
|
|
|
title: __( 'Taxes', 'woocommerce-admin' ),
|
2018-11-14 21:04:59 +00:00
|
|
|
component: TaxesReport,
|
|
|
|
},
|
2018-12-17 20:50:45 +00:00
|
|
|
{
|
|
|
|
report: 'downloads',
|
2019-03-13 17:14:02 +00:00
|
|
|
title: __( 'Downloads', 'woocommerce-admin' ),
|
2018-12-17 20:50:45 +00:00
|
|
|
component: DownloadsReport,
|
|
|
|
},
|
2020-02-14 02:23:21 +00:00
|
|
|
manageStock === 'yes'
|
2019-03-21 05:42:07 +00:00
|
|
|
? {
|
|
|
|
report: 'stock',
|
|
|
|
title: __( 'Stock', 'woocommerce-admin' ),
|
|
|
|
component: StockReport,
|
2020-02-14 02:23:21 +00:00
|
|
|
}
|
2019-03-21 05:42:07 +00:00
|
|
|
: null,
|
2018-12-06 22:21:46 +00:00
|
|
|
{
|
|
|
|
report: 'customers',
|
2019-03-13 17:14:02 +00:00
|
|
|
title: __( 'Customers', 'woocommerce-admin' ),
|
2018-12-06 22:21:46 +00:00
|
|
|
component: CustomersReport,
|
|
|
|
},
|
2018-12-19 11:18:43 +00:00
|
|
|
{
|
|
|
|
report: 'downloads',
|
2019-03-13 17:14:02 +00:00
|
|
|
title: __( 'Downloads', 'woocommerce-admin' ),
|
2018-12-19 11:18:43 +00:00
|
|
|
component: DownloadsReport,
|
|
|
|
},
|
2019-03-21 05:42:07 +00:00
|
|
|
].filter( Boolean );
|
2018-08-20 21:24:17 +00:00
|
|
|
|
2019-02-12 20:02:02 +00:00
|
|
|
return applyFilters( REPORTS_FILTER, reports );
|
2018-08-20 21:24:17 +00:00
|
|
|
};
|
2018-05-15 15:06:15 +00:00
|
|
|
|
2020-03-02 22:22:32 +00:00
|
|
|
/**
|
|
|
|
* The Customers Report will not have the `report` param supplied by the router/
|
|
|
|
* because it no longer exists under the path `/analytics/:report`. Use `props.path`/
|
|
|
|
* instead to determine if the Customers Report is being rendered.
|
|
|
|
*
|
Merge final `version/1.0` branch with `master` (https://github.com/woocommerce/woocommerce-admin/pull/3848)
* Try: Moving Customers to main Woo Menu (https://github.com/woocommerce/woocommerce-admin/pull/3632)
* Only add onboarding settings on wc-admin pages when task list should be shown. (https://github.com/woocommerce/woocommerce-admin/pull/3722)
* Use cron for unsnoozing admin notes (https://github.com/woocommerce/woocommerce-admin/pull/3662)
* Use wp-cron for admin note snoozing.
* Remove "unsnooze" scheduled action.
* Use correct version.
* Avoid using deprecated method for unscheduling actions.
* Onboarding: Fix toggle tracking events (https://github.com/woocommerce/woocommerce-admin/pull/3645)
* Fix errant wcadmin prefix on event name
* Track the onboarding toggle on the option in case enable_onboarding isn't used
* Move toggle actions to separate function
* Move onboarding actions
* Move onboarding filters
* Move help tab updates to add_toggle_actions
* Only run onboarding actions when enabled
* Onboarding: Add tracks events when profiler steps are completed (https://github.com/woocommerce/woocommerce-admin/pull/3726)
* Add tracks for store profiler step completion
* Record event when profiler is completed
* Ensure continue setup loads the onboarding profiler (https://github.com/woocommerce/woocommerce-admin/pull/3646)
* 'All that include' option removed when input field is empty (https://github.com/woocommerce/woocommerce-admin/pull/3700)
* 'All that include' option removed when input field is empty
Added a control to check that when the input field 'Search by customer name' is empty, the 'All that include' option is not appearing.
* Const name improved
The constant name hasValues was changed to optionsHaveValues (more descriptive)
* Fix select text alignment (https://github.com/woocommerce/woocommerce-admin/pull/3723)
* Stock panel indicator - cache and use lookup tables. (https://github.com/woocommerce/woocommerce-admin/pull/3729)
* Stock panel indicator - cache and use lookup tables.
* Revise query, clear transient on product update.
* Fix error, ht Josh.
* Checklist: Remove sideloaded images to reduce build size, take 2 (https://github.com/woocommerce/woocommerce-admin/pull/3731)
* Remove homepage template images.
* Use other-small on all industries, adjust text color.
* Remove background dim and opacity set to 0
* Fix/3631 (https://github.com/woocommerce/woocommerce-admin/pull/3730)
* Added CBD as an industry type
CBD was added as an industry type in API
* Industries options modified
Modified the industries options. Now we are able to choose if we will use an input or not in the option.
* API control changed for industries.
API control changed for industries. Now it accepts the data type we need.
* Added input in Industries list for the option "Other"
Added an input for the option "Other" in the industries list
* Added suggested changes in review comments.
* Added data preparation for recordEvent
* Changed variable to snake_case
The variable "industriesWithDetail" was changed to "industries_with_detail" (snake_case)
* Onboarding: Create homepage without redirect (https://github.com/woocommerce/woocommerce-admin/pull/3727)
* Add link to edit homepage instead of redirect
* Add busy state to homepage creation button
* Publish homepage on create via API
* Update homepage notice to show on first post update
* Update homepage creation notice per design
* Record event on customize homepage
* Set homepage to frontpage on creation
* Add deactivation note for feature plugin (https://github.com/woocommerce/woocommerce-admin/pull/3687)
* Add version deactivation note
* Add the note to deactivate if the version is older than the current WC version
* Deactivate wc admin feature plugin on action click
* Add notes version hooks
* change the Package class namespace to exclude from standalone autoloader
* add use statement for FeaturePlugin
* add note explaining namespace
* use wc-admin-deactivate-plugin note name
* Rename file and class to WC_Admin_Notes_Deactivate_Plugin
Co-authored-by: Ron Rennick <ron@ronandandrea.com>
Co-authored-by: Paul Sealock <psealock@gmail.com>
* Add Travis tests on GH for release branch (https://github.com/woocommerce/woocommerce-admin/pull/3751)
* Add Travis tests on GH for release branch
* fix linter errors
* ActivityPanels.php -> use public static functions
* Remove free text Search option when no query exists (https://github.com/woocommerce/woocommerce-admin/pull/3755)
* Revert changes in woocommerce/woocommerce-admin#3700
* Don't add free text search if no query exists
* Add tests for Search without query
* Add test for showing free text search option
* Fix image sideloading for store industries. (https://github.com/woocommerce/woocommerce-admin/pull/3743)
* Fix image sideloading for store industries.
Data format changed in https://github.com/woocommerce/woocommerce-admin/pull/3730
* Fix industry image sideload in cases where the count is less than requested.
* Be backwards compatible with the old industry data format.
* Added event props to identify stores with WCS and Jetpack installed (https://github.com/woocommerce/woocommerce-admin/pull/3750)
* Added event props to identify stores with WCS and Jetpack installed
Also, added Jeckpack connected status
* Improved variable name
* Simplified method
Simplified method. "intersection" check was removed
* Tests errors repeared
The method "clear_low_out_of_stock_count_transient" now is static.
* OBW: fix sideloading image test error (https://github.com/woocommerce/woocommerce-admin/pull/3762)
* Release 0.26.0 changes (https://github.com/woocommerce/woocommerce-admin/pull/3753)
* add deactivation hook to Package.php (https://github.com/woocommerce/woocommerce-admin/pull/3770)
* Add active version functions (https://github.com/woocommerce/woocommerce-admin/pull/3772)
* add active version functions to Package.php
Co-authored-by: Joshua T Flowers <joshuatf@gmail.com>
* 0.26.1 changes (https://github.com/woocommerce/woocommerce-admin/pull/3773)
* Customers Report: fix missing report param in search (https://github.com/woocommerce/woocommerce-admin/pull/3778)
* Product titles include encoded entities (https://github.com/woocommerce/woocommerce-admin/pull/3765)
* Stripped HTML from product titles and decoded before displaying them
Stripped html from product titles and entities are decoded before displaying them
* Stripped HTML from product titles and decoded in Stock report
Stripped html from product titles and entities are decoded before displaying them. Now in Stock report
* Added support for HTML tags and encoded entities on product titles
Added support for HTML tags and encoded entities on filtered product list, dropdown menus and tag names.
Also, strip_tags() function was replaced with wp_strip_all_tags() instead.
* strip_tags() function was replaced with wp_strip_all_tags() instead.
* Added control for a variable
Added control for "item->data" before applying wp_strip_all_tags method.
* pre-commit changes
* Test text corrected
* Enable taxes on automatic tax setup (https://github.com/woocommerce/woocommerce-admin/pull/3795)
* Update Country Labeling to Match Core (https://github.com/woocommerce/woocommerce-admin/pull/3790)
* Updated country labeling
Country labeling on Customer Report was updated
* Updated country labeling in other files
* remove .jitm-card notice padding (https://github.com/woocommerce/woocommerce-admin/pull/3814)
* OBW Connect: Fix requesting state (https://github.com/woocommerce/woocommerce-admin/pull/3786)
* OBW Connect: Fix requesting state
* pass down setIsPending
* setIspending propType
* defaultProps
* test
* Revert "test"
This reverts commit e921092b19401931cc1aec8ee84fa53c53b67f36.
* better comparison for redirect
* Fixes Taxes Report search bug and adds initial documentation. (https://github.com/woocommerce/woocommerce-admin/pull/3816)
* Initial Taxes Report documentation.
* Fix taxes endpoint search parameter.
* OBW: Fix retry plugin install button disappearing (https://github.com/woocommerce/woocommerce-admin/pull/3787)
* OBW: Fix retry plugin install btn disappearing
* try suggestion
* Revert "try suggestion"
This reverts commit 5b9386957a501ac3e729e5f16b0ee71c9d792859.
* Fix special character escaping in search. (https://github.com/woocommerce/woocommerce-admin/pull/3826)
* Properly prepare/escape special characters in Product search.
* Properly prepare/escape special characters in Coupon search.
* Properly prepare/escape special characters in Tax code search.
* Fix tracking on migrated options (https://github.com/woocommerce/woocommerce-admin/pull/3828)
* Don't track onboarding toggle if migrating options
* Prevent WC_Tracks from recording event post types not yet registered
* Activity Panels: Remove W Panel (https://github.com/woocommerce/woocommerce-admin/pull/3827)
* Remove W Notif Panel.
* Add back in trapping logic, and hide on non-embed pages.
* add npm run test:zip command (https://github.com/woocommerce/woocommerce-admin/pull/3823)
* add npm run test:zip command
* 1.0.0 release changes🎉 (https://github.com/woocommerce/woocommerce-admin/pull/3831)
* 1.0.0 release changes🎉
* changelog
* 0.26.1 changelog
* Add Report Extension Example: Add default props to ReportFilters (https://github.com/woocommerce/woocommerce-admin/pull/3830)
* ReportFilters component: Add sane defaults
* styles
* add required column
* add left join to sku ordering (https://github.com/woocommerce/woocommerce-admin/pull/3845)
* Deal with lint errors, and improperly merged files
* regenerate package-lock.json
* attempting to resolve package lock conflict.
Co-authored-by: Jeff Stieler <jeff.m.stieler@gmail.com>
Co-authored-by: Joshua T Flowers <joshuatf@gmail.com>
Co-authored-by: Ron Rennick <ron@ronandandrea.com>
Co-authored-by: Fernando <ultimoround@gmail.com>
Co-authored-by: edmundcwm <edmundcwm@gmail.com>
Co-authored-by: Paul Sealock <psealock@gmail.com>
2020-03-10 02:47:39 +00:00
|
|
|
* @param {Object} params -url parameters
|
2020-03-02 22:22:32 +00:00
|
|
|
* @return {string} - report parameter
|
|
|
|
*/
|
|
|
|
const getReportParam = ( { params, path } ) => {
|
|
|
|
return params.report || path.replace( /^\/+/, '' );
|
|
|
|
};
|
|
|
|
|
2018-06-14 20:15:11 +00:00
|
|
|
class Report extends Component {
|
2018-08-20 21:24:17 +00:00
|
|
|
constructor() {
|
|
|
|
super( ...arguments );
|
|
|
|
|
|
|
|
this.state = {
|
|
|
|
hasError: false,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
componentDidCatch( error ) {
|
|
|
|
this.setState( {
|
|
|
|
hasError: true,
|
|
|
|
} );
|
|
|
|
/* eslint-disable no-console */
|
|
|
|
console.warn( error );
|
|
|
|
/* eslint-enable no-console */
|
|
|
|
}
|
|
|
|
|
2018-05-15 15:06:15 +00:00
|
|
|
render() {
|
2018-08-20 21:24:17 +00:00
|
|
|
if ( this.state.hasError ) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2020-03-02 22:22:32 +00:00
|
|
|
const { isError } = this.props;
|
2019-02-26 09:28:50 +00:00
|
|
|
|
|
|
|
if ( isError ) {
|
|
|
|
return <ReportError isError />;
|
|
|
|
}
|
|
|
|
|
2020-03-02 22:22:32 +00:00
|
|
|
const reportParam = getReportParam( this.props );
|
2020-02-20 11:59:02 +00:00
|
|
|
|
|
|
|
const report = find( getReports(), { report: reportParam } );
|
2018-08-20 21:24:17 +00:00
|
|
|
if ( ! report ) {
|
|
|
|
return null;
|
2018-06-14 20:15:11 +00:00
|
|
|
}
|
2018-08-20 21:24:17 +00:00
|
|
|
const Container = report.component;
|
2020-04-02 21:54:38 +00:00
|
|
|
return (
|
|
|
|
<CurrencyContext.Provider
|
|
|
|
value={ getFilteredCurrencyInstance( getQuery() ) }
|
|
|
|
>
|
|
|
|
<Container { ...this.props } />
|
|
|
|
</CurrencyContext.Provider>
|
|
|
|
);
|
2018-05-15 15:06:15 +00:00
|
|
|
}
|
|
|
|
}
|
2018-06-14 20:15:11 +00:00
|
|
|
|
|
|
|
Report.propTypes = {
|
|
|
|
params: PropTypes.object.isRequired,
|
|
|
|
};
|
|
|
|
|
2019-02-01 09:55:19 +00:00
|
|
|
export default compose(
|
|
|
|
useFilters( REPORTS_FILTER ),
|
|
|
|
withSelect( ( select, props ) => {
|
2019-02-26 10:06:37 +00:00
|
|
|
const query = getQuery();
|
|
|
|
const { search } = query;
|
2019-02-01 09:55:19 +00:00
|
|
|
|
|
|
|
if ( ! search ) {
|
|
|
|
return {};
|
|
|
|
}
|
|
|
|
|
2020-03-02 22:22:32 +00:00
|
|
|
const report = getReportParam( props );
|
2019-02-26 10:06:37 +00:00
|
|
|
const searchWords = getSearchWords( query );
|
2019-03-07 02:57:22 +00:00
|
|
|
// Single Category view in Categories Report uses the products endpoint, so search must also.
|
|
|
|
const mappedReport =
|
2020-02-14 02:23:21 +00:00
|
|
|
report === 'categories' && query.filter === 'single_category'
|
|
|
|
? 'products'
|
|
|
|
: report;
|
|
|
|
const itemsResult = searchItemsByString(
|
|
|
|
select,
|
|
|
|
mappedReport,
|
|
|
|
searchWords
|
|
|
|
);
|
2019-02-26 09:28:50 +00:00
|
|
|
const { isError, isRequesting, items } = itemsResult;
|
2019-02-01 09:55:19 +00:00
|
|
|
const ids = Object.keys( items );
|
|
|
|
if ( ! ids.length ) {
|
2019-02-20 09:21:05 +00:00
|
|
|
return {
|
2019-02-26 09:28:50 +00:00
|
|
|
isError,
|
|
|
|
isRequesting,
|
2019-02-20 09:21:05 +00:00
|
|
|
};
|
2019-02-01 09:55:19 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return {
|
2019-02-26 09:28:50 +00:00
|
|
|
isError,
|
|
|
|
isRequesting,
|
2019-02-01 09:55:19 +00:00
|
|
|
query: {
|
|
|
|
...props.query,
|
2019-03-07 02:57:22 +00:00
|
|
|
[ mappedReport ]: ids.join( ',' ),
|
2019-02-01 09:55:19 +00:00
|
|
|
},
|
|
|
|
};
|
|
|
|
} )
|
|
|
|
)( Report );
|