@@ -246,31 +246,37 @@ const callGetManyQueries = batch((calls: GetManyCallArgs[]) => {
246246 const queryClient = calls [ 0 ] . queryClient ;
247247
248248 /**
249- * Aggregate calls by resource
249+ * Aggregate calls by resource and meta
250250 *
251- * callsByResource will look like:
251+ * callsByResourceAndMeta will look like:
252252 * {
253- * posts: [{ resource, ids, resolve, reject, dataProvider, queryClient }, ...],
253+ * 'posts|{"test":true}': [{ resource, ids, resolve, reject, dataProvider, queryClient }, ...],
254+ * 'posts|{"test":false}': [{ resource, ids, resolve, reject, dataProvider, queryClient }, ...],
254255 * tags: [{ resource, ids, resolve, reject, dataProvider, queryClient }, ...],
255256 * }
256257 */
257- const callsByResource = calls . reduce (
258+ const callsByResourceAndMeta = calls . reduce (
258259 ( acc , callArgs ) => {
259- if ( ! acc [ callArgs . resource ] ) {
260- acc [ callArgs . resource ] = [ ] ;
260+ const key = `${ callArgs . resource } |${ JSON . stringify ( callArgs . meta ) } ` ;
261+ if ( ! acc [ key ] ) {
262+ acc [ key ] = [ ] ;
261263 }
262- acc [ callArgs . resource ] . push ( callArgs ) ;
264+ acc [ key ] . push ( callArgs ) ;
263265 return acc ;
264266 } ,
265267 { } as { [ resource : string ] : GetManyCallArgs [ ] }
266268 ) ;
267269
268270 /**
269- * For each resource, aggregate ids and call dataProvider.getMany() once
271+ * For each resource/meta association , aggregate ids and call dataProvider.getMany() once
270272 */
271- Object . keys ( callsByResource ) . forEach ( resource => {
272- const callsForResource = callsByResource [ resource ] ;
273+ Object . keys ( callsByResourceAndMeta ) . forEach ( resource => {
274+ const callsForResource = callsByResourceAndMeta [ resource ] ;
273275
276+ const uniqueResource = callsForResource . reduce (
277+ ( acc , { resource } ) => resource || acc ,
278+ '' as string // Should never happen as we always have a resource in callArgs but makes TS happy
279+ ) ;
274280 /**
275281 * Extract ids from queries, aggregate and deduplicate them
276282 *
@@ -338,7 +344,7 @@ const callGetManyQueries = batch((calls: GetManyCallArgs[]) => {
338344 queryClient
339345 . fetchQuery < any [ ] , Error , any [ ] > ( {
340346 queryKey : [
341- resource ,
347+ uniqueResource ,
342348 'getMany' ,
343349 {
344350 ids : aggregatedIds . map ( id => String ( id ) ) ,
@@ -347,7 +353,7 @@ const callGetManyQueries = batch((calls: GetManyCallArgs[]) => {
347353 ] ,
348354 queryFn : queryParams =>
349355 dataProvider
350- . getMany < any > ( resource , {
356+ . getMany < any > ( uniqueResource , {
351357 ids : aggregatedIds ,
352358 meta : uniqueMeta ,
353359 signal :
@@ -377,7 +383,7 @@ const callGetManyQueries = batch((calls: GetManyCallArgs[]) => {
377383const noop = ( ) => undefined ;
378384
379385export type UseGetManyAggregateOptions <
380- RecordType extends RaRecord ,
386+ RecordType extends RaRecord = any ,
381387 ErrorType = Error ,
382388> = Omit < UseQueryOptions < RecordType [ ] , ErrorType > , 'queryKey' | 'queryFn' > & {
383389 onSuccess ?: ( data : RecordType [ ] ) => void ;
0 commit comments