Skip to content
This repository was archived by the owner on Feb 23, 2024. It is now read-only.

Commit 2333280

Browse files
authored
Add a generic arg to useCollection to improve typing of results. (#10696)
Closes #5726
1 parent 5ca7fbd commit 2333280

File tree

4 files changed

+14
-11
lines changed

4 files changed

+14
-11
lines changed

assets/js/base/context/hooks/collections/use-collection.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,10 @@ export interface useCollectionOptions {
4949
isEditor?: boolean;
5050
}
5151

52-
export const useCollection = (
52+
export const useCollection = < T >(
5353
options: useCollectionOptions
5454
): {
55-
results: unknown;
55+
results: T[];
5656
isLoading: boolean;
5757
} => {
5858
const {
@@ -68,7 +68,7 @@ export const useCollection = (
6868
'the resource properties.'
6969
);
7070
}
71-
const currentResults = useRef< { results: unknown; isLoading: boolean } >( {
71+
const currentResults = useRef< { results: T[]; isLoading: boolean } >( {
7272
results: [],
7373
isLoading: true,
7474
} );
@@ -102,7 +102,7 @@ export const useCollection = (
102102
}
103103

104104
return {
105-
results: store.getCollection< T >( ...args ),
105+
results: store.getCollection< T[] >( ...args ),
106106
isLoading: ! store.hasFinishedResolution(
107107
'getCollection',
108108
args

assets/js/base/context/hooks/use-store-products.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,16 +35,17 @@ export const useStoreProducts = (
3535
namespace: '/wc/store/v1',
3636
resourceName: 'products',
3737
};
38-
const { results: products, isLoading: productsLoading } = useCollection( {
39-
...collectionOptions,
40-
query,
41-
} );
38+
const { results: products, isLoading: productsLoading } =
39+
useCollection< ProductResponseItem >( {
40+
...collectionOptions,
41+
query,
42+
} );
4243
const { value: totalProducts } = useCollectionHeader( 'x-wp-total', {
4344
...collectionOptions,
4445
query,
4546
} );
4647
return {
47-
products: products as ProductResponseItem[], // TODO: Remove this once getCollection selector and resolver is converted to TS.
48+
products,
4849
totalProducts: parseInt( totalProducts as string, 10 ),
4950
productsLoading,
5051
};

assets/js/blocks/active-filters/active-attribute-filters.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { __ } from '@wordpress/i18n';
1111
import { getSettingWithCoercion } from '@woocommerce/settings';
1212
import {
1313
AttributeObject,
14+
AttributeTerm,
1415
isAttributeQueryCollection,
1516
isAttributeTermCollection,
1617
isBoolean,
@@ -47,7 +48,7 @@ const ActiveAttributeFilters = ( {
4748
displayStyle,
4849
isLoadingCallback,
4950
}: ActiveAttributeFiltersProps ) => {
50-
const { results, isLoading } = useCollection( {
51+
const { results, isLoading } = useCollection< AttributeTerm >( {
5152
namespace: '/wc/store/v1',
5253
resourceName: 'products/attributes/terms',
5354
resourceValues: [ attributeObject.id ],

assets/js/blocks/attribute-filter/block.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { getSettingWithCoercion } from '@woocommerce/settings';
1919
import { getQueryArgs, removeQueryArgs } from '@wordpress/url';
2020
import {
2121
AttributeQuery,
22+
AttributeTerm,
2223
isAttributeQueryCollection,
2324
isBoolean,
2425
isString,
@@ -124,7 +125,7 @@ const AttributeFilterBlock = ( {
124125
useQueryStateByKey( 'attributes', [] );
125126

126127
const { results: attributeTerms, isLoading: attributeTermsLoading } =
127-
useCollection( {
128+
useCollection< AttributeTerm >( {
128129
namespace: '/wc/store/v1',
129130
resourceName: 'products/attributes/terms',
130131
resourceValues: [ attributeObject?.id || 0 ],

0 commit comments

Comments
 (0)