Add a generic arg to useCollection to improve typing of results. (https://github.com/woocommerce/woocommerce-blocks/pull/10696)
Closes woocommerce/woocommerce-blocks#5726
This commit is contained in:
parent
e20c605408
commit
a753a0f1d2
|
@ -49,10 +49,10 @@ export interface useCollectionOptions {
|
|||
isEditor?: boolean;
|
||||
}
|
||||
|
||||
export const useCollection = (
|
||||
export const useCollection = < T >(
|
||||
options: useCollectionOptions
|
||||
): {
|
||||
results: unknown;
|
||||
results: T[];
|
||||
isLoading: boolean;
|
||||
} => {
|
||||
const {
|
||||
|
@ -68,7 +68,7 @@ export const useCollection = (
|
|||
'the resource properties.'
|
||||
);
|
||||
}
|
||||
const currentResults = useRef< { results: unknown; isLoading: boolean } >( {
|
||||
const currentResults = useRef< { results: T[]; isLoading: boolean } >( {
|
||||
results: [],
|
||||
isLoading: true,
|
||||
} );
|
||||
|
@ -102,7 +102,7 @@ export const useCollection = (
|
|||
}
|
||||
|
||||
return {
|
||||
results: store.getCollection< T >( ...args ),
|
||||
results: store.getCollection< T[] >( ...args ),
|
||||
isLoading: ! store.hasFinishedResolution(
|
||||
'getCollection',
|
||||
args
|
||||
|
|
|
@ -35,7 +35,8 @@ export const useStoreProducts = (
|
|||
namespace: '/wc/store/v1',
|
||||
resourceName: 'products',
|
||||
};
|
||||
const { results: products, isLoading: productsLoading } = useCollection( {
|
||||
const { results: products, isLoading: productsLoading } =
|
||||
useCollection< ProductResponseItem >( {
|
||||
...collectionOptions,
|
||||
query,
|
||||
} );
|
||||
|
@ -44,7 +45,7 @@ export const useStoreProducts = (
|
|||
query,
|
||||
} );
|
||||
return {
|
||||
products: products as ProductResponseItem[], // TODO: Remove this once getCollection selector and resolver is converted to TS.
|
||||
products,
|
||||
totalProducts: parseInt( totalProducts as string, 10 ),
|
||||
productsLoading,
|
||||
};
|
||||
|
|
|
@ -11,6 +11,7 @@ import { __ } from '@wordpress/i18n';
|
|||
import { getSettingWithCoercion } from '@woocommerce/settings';
|
||||
import {
|
||||
AttributeObject,
|
||||
AttributeTerm,
|
||||
isAttributeQueryCollection,
|
||||
isAttributeTermCollection,
|
||||
isBoolean,
|
||||
|
@ -47,7 +48,7 @@ const ActiveAttributeFilters = ( {
|
|||
displayStyle,
|
||||
isLoadingCallback,
|
||||
}: ActiveAttributeFiltersProps ) => {
|
||||
const { results, isLoading } = useCollection( {
|
||||
const { results, isLoading } = useCollection< AttributeTerm >( {
|
||||
namespace: '/wc/store/v1',
|
||||
resourceName: 'products/attributes/terms',
|
||||
resourceValues: [ attributeObject.id ],
|
||||
|
|
|
@ -19,6 +19,7 @@ import { getSettingWithCoercion } from '@woocommerce/settings';
|
|||
import { getQueryArgs, removeQueryArgs } from '@wordpress/url';
|
||||
import {
|
||||
AttributeQuery,
|
||||
AttributeTerm,
|
||||
isAttributeQueryCollection,
|
||||
isBoolean,
|
||||
isString,
|
||||
|
@ -124,7 +125,7 @@ const AttributeFilterBlock = ( {
|
|||
useQueryStateByKey( 'attributes', [] );
|
||||
|
||||
const { results: attributeTerms, isLoading: attributeTermsLoading } =
|
||||
useCollection( {
|
||||
useCollection< AttributeTerm >( {
|
||||
namespace: '/wc/store/v1',
|
||||
resourceName: 'products/attributes/terms',
|
||||
resourceValues: [ attributeObject?.id || 0 ],
|
||||
|
|
Loading…
Reference in New Issue