Update product details report to use getItems (https://github.com/woocommerce/woocommerce-admin/pull/1488)
This commit is contained in:
parent
81fcab5709
commit
a1bbd22ca2
|
@ -129,15 +129,17 @@ ProductsReport.propTypes = {
|
||||||
export default compose(
|
export default compose(
|
||||||
withSelect( ( select, props ) => {
|
withSelect( ( select, props ) => {
|
||||||
const { query } = props;
|
const { query } = props;
|
||||||
const { getProducts, isGetProductsRequesting, getProductsError } = select( 'wc-api' );
|
const { getItems, isGetItemsRequesting, getItemsError } = select( 'wc-api' );
|
||||||
const isSingleProductView = query.products && 1 === query.products.split( ',' ).length;
|
const isSingleProductView = query.products && 1 === query.products.split( ',' ).length;
|
||||||
if ( isSingleProductView ) {
|
if ( isSingleProductView ) {
|
||||||
const includeArgs = { include: query.products };
|
const productId = parseInt( query.products );
|
||||||
|
const includeArgs = { include: productId };
|
||||||
// TODO Look at similar usage to populate tags in the Search component.
|
// TODO Look at similar usage to populate tags in the Search component.
|
||||||
const products = getProducts( includeArgs );
|
const products = getItems( 'products', includeArgs );
|
||||||
const isVariable = products[ 0 ] && 'variable' === products[ 0 ].type;
|
const isVariable =
|
||||||
const isProductsRequesting = isGetProductsRequesting( includeArgs );
|
products && products.get( productId ) && 'variable' === products.get( productId ).type;
|
||||||
const isProductsError = getProductsError( includeArgs );
|
const isProductsRequesting = isGetItemsRequesting( 'products', includeArgs );
|
||||||
|
const isProductsError = Boolean( getItemsError( 'products', includeArgs ) );
|
||||||
return {
|
return {
|
||||||
query: {
|
query: {
|
||||||
...query,
|
...query,
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
/** @format */
|
|
||||||
/**
|
|
||||||
* Internal dependencies
|
|
||||||
*/
|
|
||||||
import operations from './operations';
|
|
||||||
import selectors from './selectors';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
operations,
|
|
||||||
selectors,
|
|
||||||
};
|
|
|
@ -1,51 +0,0 @@
|
||||||
/** @format */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* External dependencies
|
|
||||||
*/
|
|
||||||
import apiFetch from '@wordpress/api-fetch';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* WooCommerce dependencies
|
|
||||||
*/
|
|
||||||
import { stringifyQuery } from '@woocommerce/navigation';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Internal dependencies
|
|
||||||
*/
|
|
||||||
import { isResourcePrefix, getResourceIdentifier, getResourceName } from '../utils';
|
|
||||||
|
|
||||||
function read( resourceNames, fetch = apiFetch ) {
|
|
||||||
const filteredNames = resourceNames.filter( name => isResourcePrefix( name, 'product-query' ) );
|
|
||||||
|
|
||||||
return filteredNames.map( async resourceName => {
|
|
||||||
const query = getResourceIdentifier( resourceName );
|
|
||||||
const url = `/wc/v3/products${ stringifyQuery( query ) }`;
|
|
||||||
|
|
||||||
try {
|
|
||||||
const products = await fetch( {
|
|
||||||
path: url,
|
|
||||||
} );
|
|
||||||
|
|
||||||
const ids = products.map( product => product.id );
|
|
||||||
const productResources = products.reduce( ( resources, product ) => {
|
|
||||||
resources[ getResourceName( 'product', product.id ) ] = { data: product };
|
|
||||||
return resources;
|
|
||||||
}, {} );
|
|
||||||
|
|
||||||
return {
|
|
||||||
[ resourceName ]: {
|
|
||||||
data: ids,
|
|
||||||
totalCount: ids.length,
|
|
||||||
},
|
|
||||||
...productResources,
|
|
||||||
};
|
|
||||||
} catch ( error ) {
|
|
||||||
return { [ resourceName ]: { error } };
|
|
||||||
}
|
|
||||||
} );
|
|
||||||
}
|
|
||||||
|
|
||||||
export default {
|
|
||||||
read,
|
|
||||||
};
|
|
|
@ -1,44 +0,0 @@
|
||||||
/** @format */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* External dependencies
|
|
||||||
*/
|
|
||||||
import { isNil } from 'lodash';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Internal dependencies
|
|
||||||
*/
|
|
||||||
import { getResourceName } from '../utils';
|
|
||||||
import { DEFAULT_REQUIREMENT } from '../constants';
|
|
||||||
|
|
||||||
const getProducts = ( getResource, requireResource ) => (
|
|
||||||
query = {},
|
|
||||||
requirement = DEFAULT_REQUIREMENT
|
|
||||||
) => {
|
|
||||||
const resourceName = getResourceName( 'product-query', query );
|
|
||||||
const ids = requireResource( requirement, resourceName ).data || [];
|
|
||||||
const products = ids.map( id => getResource( getResourceName( 'product', id ) ).data || {} );
|
|
||||||
return products;
|
|
||||||
};
|
|
||||||
|
|
||||||
const getProductsError = getResource => ( query = {} ) => {
|
|
||||||
const resourceName = getResourceName( 'product-query', query );
|
|
||||||
return getResource( resourceName ).error;
|
|
||||||
};
|
|
||||||
|
|
||||||
const isGetProductsRequesting = getResource => ( query = {} ) => {
|
|
||||||
const resourceName = getResourceName( 'product-query', query );
|
|
||||||
const { lastRequested, lastReceived } = getResource( resourceName );
|
|
||||||
|
|
||||||
if ( isNil( lastRequested ) || isNil( lastReceived ) ) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return lastRequested > lastReceived;
|
|
||||||
};
|
|
||||||
|
|
||||||
export default {
|
|
||||||
getProducts,
|
|
||||||
getProductsError,
|
|
||||||
isGetProductsRequesting,
|
|
||||||
};
|
|
|
@ -5,7 +5,6 @@
|
||||||
*/
|
*/
|
||||||
import items from './items';
|
import items from './items';
|
||||||
import notes from './notes';
|
import notes from './notes';
|
||||||
import products from './products';
|
|
||||||
import reportItems from './reports/items';
|
import reportItems from './reports/items';
|
||||||
import reportStats from './reports/stats';
|
import reportStats from './reports/stats';
|
||||||
import reviews from './reviews';
|
import reviews from './reviews';
|
||||||
|
@ -21,7 +20,6 @@ function createWcApiSpec() {
|
||||||
selectors: {
|
selectors: {
|
||||||
...items.selectors,
|
...items.selectors,
|
||||||
...notes.selectors,
|
...notes.selectors,
|
||||||
...products.selectors,
|
|
||||||
...reportItems.selectors,
|
...reportItems.selectors,
|
||||||
...reportStats.selectors,
|
...reportStats.selectors,
|
||||||
...reviews.selectors,
|
...reviews.selectors,
|
||||||
|
@ -33,7 +31,6 @@ function createWcApiSpec() {
|
||||||
return [
|
return [
|
||||||
...items.operations.read( resourceNames ),
|
...items.operations.read( resourceNames ),
|
||||||
...notes.operations.read( resourceNames ),
|
...notes.operations.read( resourceNames ),
|
||||||
...products.operations.read( resourceNames ),
|
|
||||||
...reportItems.operations.read( resourceNames ),
|
...reportItems.operations.read( resourceNames ),
|
||||||
...reportStats.operations.read( resourceNames ),
|
...reportStats.operations.read( resourceNames ),
|
||||||
...reviews.operations.read( resourceNames ),
|
...reviews.operations.read( resourceNames ),
|
||||||
|
|
Loading…
Reference in New Issue