Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use more default type parameters for mutation-related types in react/types/types.ts #8573

Merged
merged 2 commits into from Aug 2, 2021

Conversation

benjamn
Copy link
Member

@benjamn benjamn commented Aug 2, 2021

Commit 3f2eee7 in #7902 added a number of new type parameters to existing types, without always providing a default.

Should alleviate #8572.

Commit 3f2eee7 added a number of new
type parameters to existing types, without always providing a default.

Should alleviate #8572.
@benjamn benjamn requested a review from brainkim August 2, 2021 14:52
@benjamn benjamn linked an issue Aug 2, 2021 that may be closed by this pull request
@benjamn benjamn added 2021-08 ⏮ compatibility backwards compatibility-related issues and PRs ⛑ TypeScript labels Aug 2, 2021
@benjamn benjamn added this to the v3.4.x patch releases milestone Aug 2, 2021
@benjamn benjamn self-assigned this Aug 2, 2021
@benjamn
Copy link
Member Author

benjamn commented Aug 2, 2021

Here's the full diff for this file (on this PR branch) from just before #7902, demonstrating defaults are provided for all new type parameters, and existing default types are preserved:

diff --git a/src/react/types/types.ts b/src/react/types/types.ts
index c91f837f3..3f957a9bd 100644
--- a/src/react/types/types.ts
+++ b/src/react/types/types.ts
@@ -6,25 +6,24 @@ import { Observable } from '../../utilities';
 import { FetchResult } from '../../link/core';
 import { ApolloError } from '../../errors';
 import {
+  ApolloCache,
   ApolloClient,
   ApolloQueryResult,
-  ErrorPolicy,
+  DefaultContext,
   FetchMoreOptions,
   FetchMoreQueryOptions,
   FetchPolicy,
-  MutationUpdaterFn,
+  MutationOptions,
   NetworkStatus,
   ObservableQuery,
   OperationVariables,
-  PureQueryOptions,
-  ReobserveQueryCallback,
-  WatchQueryFetchPolicy,
+  InternalRefetchQueriesInclude,
   WatchQueryOptions,
 } from '../../core';
 
 /* Common types */
 
-export type Context = Record<string, any>;
+export type { DefaultContext as Context } from "../../core";
 
 export type CommonOptions<TOptions> = TOptions & {
   client?: ApolloClient<object>;
@@ -36,7 +35,7 @@ export interface BaseQueryOptions<TVariables = OperationVariables>
 extends Omit<WatchQueryOptions<TVariables>, "query"> {
   ssr?: boolean;
   client?: ApolloClient<any>;
-  context?: Context;
+  context?: DefaultContext;
 }
 
 export interface QueryFunctionOptions<
@@ -102,7 +101,7 @@ export interface LazyQueryHookOptions<
 
 export interface QueryLazyOptions<TVariables> {
   variables?: TVariables;
-  context?: Context;
+  context?: DefaultContext;
 }
 
 type UnexecutedLazyFields = {
@@ -138,40 +137,31 @@ export type QueryTuple<TData, TVariables> = [
 
 export type RefetchQueriesFunction = (
   ...args: any[]
-) => Array<string | PureQueryOptions>;
+) => InternalRefetchQueriesInclude;
 
 export interface BaseMutationOptions<
   TData = any,
-  TVariables = OperationVariables
+  TVariables = OperationVariables,
+  TContext = DefaultContext,
+  TCache extends ApolloCache<any> = ApolloCache<any>
+> extends Omit<
+  MutationOptions<TData, TVariables, TContext, TCache>,
+  | "mutation"
 > {
-  variables?: TVariables;
-  optimisticResponse?: TData | ((vars: TVariables) => TData);
-  refetchQueries?: Array<string | PureQueryOptions> | RefetchQueriesFunction;
-  awaitRefetchQueries?: boolean;
-  errorPolicy?: ErrorPolicy;
-  update?: MutationUpdaterFn<TData>;
-  reobserveQuery?: ReobserveQueryCallback;
   client?: ApolloClient<object>;
   notifyOnNetworkStatusChange?: boolean;
-  context?: Context;
   onCompleted?: (data: TData) => void;
   onError?: (error: ApolloError) => void;
-  fetchPolicy?: Extract<WatchQueryFetchPolicy, 'no-cache'>;
   ignoreResults?: boolean;
 }
 
 export interface MutationFunctionOptions<
   TData = any,
-  TVariables = OperationVariables
-> {
-  variables?: TVariables;
-  optimisticResponse?: TData | ((vars: TVariables) => TData);
-  refetchQueries?: Array<string | PureQueryOptions> | RefetchQueriesFunction;
-  awaitRefetchQueries?: boolean;
-  update?: MutationUpdaterFn<TData>;
-  reobserveQuery?: ReobserveQueryCallback;
-  context?: Context;
-  fetchPolicy?: WatchQueryFetchPolicy;
+  TVariables = OperationVariables,
+  TContext = DefaultContext,
+  TCache extends ApolloCache<any> = ApolloCache<any>,
+> extends BaseMutationOptions<TData, TVariables, TContext, TCache> {
+  mutation?: DocumentNode | TypedDocumentNode<TData, TVariables>;
 }
 
 export interface MutationResult<TData = any> {
@@ -184,28 +174,41 @@ export interface MutationResult<TData = any> {
 
 export declare type MutationFunction<
   TData = any,
-  TVariables = OperationVariables
+  TVariables = OperationVariables,
+  TContext = DefaultContext,
+  TCache extends ApolloCache<any> = ApolloCache<any>,
 > = (
-  options?: MutationFunctionOptions<TData, TVariables>
+  options?: MutationFunctionOptions<TData, TVariables, TContext, TCache>
 ) => Promise<FetchResult<TData>>;
 
 export interface MutationHookOptions<
   TData = any,
-  TVariables = OperationVariables
-> extends BaseMutationOptions<TData, TVariables> {
+  TVariables = OperationVariables,
+  TContext = DefaultContext,
+  TCache extends ApolloCache<any> = ApolloCache<any>,
+> extends BaseMutationOptions<TData, TVariables, TContext, TCache> {
   mutation?: DocumentNode | TypedDocumentNode<TData, TVariables>;
 }
 
-export interface MutationDataOptions<TData = any, TVariables = OperationVariables>
-  extends BaseMutationOptions<TData, TVariables> {
+export interface MutationDataOptions<
+  TData = any,
+  TVariables = OperationVariables,
+  TContext = DefaultContext,
+  TCache extends ApolloCache<any> = ApolloCache<any>,
+> extends BaseMutationOptions<TData, TVariables, TContext, TCache> {
   mutation: DocumentNode | TypedDocumentNode<TData, TVariables>;
 }
 
-export type MutationTuple<TData, TVariables> = [
+export type MutationTuple<
+  TData,
+  TVariables,
+  TContext = DefaultContext,
+  TCache extends ApolloCache<any> = ApolloCache<any>,
+> = [
   (
-    options?: MutationFunctionOptions<TData, TVariables>
+    options?: MutationFunctionOptions<TData, TVariables, TContext, TCache>
   ) => Promise<FetchResult<TData>>,
-  MutationResult<TData>
+  MutationResult<TData>,
 ];
 
 /* Subscription types */
@@ -226,7 +229,7 @@ export interface BaseSubscriptionOptions<
     | ((options: BaseSubscriptionOptions<TData, TVariables>) => boolean);
   client?: ApolloClient<object>;
   skip?: boolean;
-  context?: Context;
+  context?: DefaultContext;
   onSubscriptionData?: (options: OnSubscriptionDataOptions<TData>) => any;
   onSubscriptionComplete?: () => void;
 }

Generated with this command:

git diff 3f2eee7e8d6a4874120b6c84707b565ebcdaa349~1.. src/react/types/types.ts

Copy link
Contributor

@brainkim brainkim left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@benjamn benjamn merged commit 4f34efa into main Aug 2, 2021
@benjamn benjamn deleted the issue-8572-default-mutation-type-params branch August 2, 2021 15:26
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Feb 15, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
⏮ compatibility backwards compatibility-related issues and PRs ⛑ TypeScript
Projects
None yet
Development

Successfully merging this pull request may close these issues.

MutationTuple now requires 4 arguments instead of 2
2 participants