@tanstack/query-core 4.1.2 → 4.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -45,9 +45,10 @@ export interface QueryOptions<TQueryFnData = unknown, TError = unknown, TData =
45
45
  behavior?: QueryBehavior<TQueryFnData, TError, TData>;
46
46
  /**
47
47
  * Set this to `false` to disable structural sharing between query results.
48
+ * Set this to a function which accepts the old and new data and returns resolved data of the same type to implement custom structural sharing logic.
48
49
  * Defaults to `true`.
49
50
  */
50
- structuralSharing?: boolean;
51
+ structuralSharing?: boolean | ((oldData: TData | undefined, newData: TData) => TData);
51
52
  /**
52
53
  * This function can be set to automatically get the previous cursor for infinite queries.
53
54
  * The result will also be used to determine the value of `hasPreviousPage`.
@@ -274,7 +275,8 @@ export interface QueryObserverSuccessResult<TData = unknown, TError = unknown> e
274
275
  isSuccess: true;
275
276
  status: 'success';
276
277
  }
277
- export declare type QueryObserverResult<TData = unknown, TError = unknown> = QueryObserverLoadingErrorResult<TData, TError> | QueryObserverLoadingResult<TData, TError> | QueryObserverRefetchErrorResult<TData, TError> | QueryObserverSuccessResult<TData, TError>;
278
+ export declare type DefinedQueryObserverResult<TData = unknown, TError = unknown> = QueryObserverRefetchErrorResult<TData, TError> | QueryObserverSuccessResult<TData, TError>;
279
+ export declare type QueryObserverResult<TData = unknown, TError = unknown> = DefinedQueryObserverResult<TData, TError> | QueryObserverLoadingErrorResult<TData, TError> | QueryObserverLoadingResult<TData, TError>;
278
280
  export interface InfiniteQueryObserverBaseResult<TData = unknown, TError = unknown> extends QueryObserverBaseResult<InfiniteData<TData>, TError> {
279
281
  fetchNextPage: (options?: FetchNextPageOptions) => Promise<InfiniteQueryObserverResult<TData, TError>>;
280
282
  fetchPreviousPage: (options?: FetchPreviousPageOptions) => Promise<InfiniteQueryObserverResult<TData, TError>>;
@@ -347,6 +347,8 @@
347
347
  // Use prev data if an isDataEqual function is defined and returns `true`
348
348
  if (options.isDataEqual != null && options.isDataEqual(prevData, data)) {
349
349
  return prevData;
350
+ } else if (typeof options.structuralSharing === 'function') {
351
+ return options.structuralSharing(prevData, data);
350
352
  } else if (options.structuralSharing !== false) {
351
353
  // Structurally share data between prev and new data if needed
352
354
  return replaceEqualDeep(prevData, data);