Skip to content

Commit

Permalink
PR Fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
Cellule committed Feb 5, 2025
1 parent e0cda56 commit edf8520
Show file tree
Hide file tree
Showing 14 changed files with 88 additions and 143 deletions.
17 changes: 6 additions & 11 deletions src/__tests__/ApolloClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3219,35 +3219,30 @@ describe("ApolloClient", () => {
>();

observableQuery.updateQuery(
(previousData, { complete, previousQueryResult }) => {
(previousData, { complete, previousData }) => {
expectTypeOf(previousData).toEqualTypeOf<UnmaskedQuery>();
expectTypeOf(previousData).not.toMatchTypeOf<Query>();

if (complete) {
expectTypeOf(previousQueryResult).toEqualTypeOf<UnmaskedQuery>();
expectTypeOf(previousData).toEqualTypeOf<UnmaskedQuery>();
} else {
expectTypeOf(previousQueryResult).toEqualTypeOf<
expectTypeOf(previousData).toEqualTypeOf<
DeepPartial<UnmaskedQuery> | undefined
>();
}

return undefined;
}
);

observableQuery.subscribeToMore({
document: subscription,
updateQuery(
queryData,
{ subscriptionData, complete, previousQueryResult }
) {
updateQuery(queryData, { subscriptionData, complete, previousData }) {
expectTypeOf(queryData).toEqualTypeOf<UnmaskedQuery>();
expectTypeOf(queryData).not.toMatchTypeOf<Query>();

if (complete) {
expectTypeOf(previousQueryResult).toEqualTypeOf<UnmaskedQuery>();
expectTypeOf(previousData).toEqualTypeOf<UnmaskedQuery>();
} else {
expectTypeOf(previousQueryResult).toEqualTypeOf<
expectTypeOf(previousData).toEqualTypeOf<
DeepPartial<UnmaskedQuery> | undefined
>();
}
Expand Down
17 changes: 7 additions & 10 deletions src/__tests__/dataMasking.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1891,15 +1891,15 @@ describe("client.watchQuery", () => {
}

const updateQuery: Parameters<typeof observable.updateQuery>[0] = jest.fn(
(previousResult, { complete, previousQueryResult }) => {
(previousResult, { complete, previousData }) => {
expect(complete).toBe(true);
expect(previousQueryResult).toStrictEqual(previousResult);
expect(previousData).toStrictEqual(previousResult);
// Type Guard
if (!complete) {
return undefined;
}
return {
user: { ...previousQueryResult.user, name: "User (updated)" },
user: { ...previousData.user, name: "User (updated)" },
};
}
);
Expand All @@ -1911,7 +1911,7 @@ describe("client.watchQuery", () => {
{
variables: { id: 1 },
complete: true,
previousQueryResult: {
previousData: {
user: { __typename: "User", id: 1, name: "User 1", age: 30 },
},
}
Expand Down Expand Up @@ -4847,7 +4847,7 @@ describe("observableQuery.subscribeToMore", () => {
{
complete: true,
variables: {},
previousQueryResult: {
previousData: {
recentComment: {
__typename: "Comment",
id: 1,
Expand All @@ -4865,7 +4865,6 @@ describe("observableQuery.subscribeToMore", () => {
},
},
},
subscriptionVariables: undefined,
}
);

Expand Down Expand Up @@ -4984,7 +4983,7 @@ describe("observableQuery.subscribeToMore", () => {
{
complete: true,
variables: {},
previousQueryResult: {
previousData: {
recentComment: {
__typename: "Comment",
id: 1,
Expand All @@ -5002,7 +5001,6 @@ describe("observableQuery.subscribeToMore", () => {
},
},
},
subscriptionVariables: undefined,
}
);

Expand Down Expand Up @@ -5127,7 +5125,7 @@ describe("observableQuery.subscribeToMore", () => {
{
complete: true,
variables: {},
previousQueryResult: {
previousData: {
recentComment: {
__typename: "Comment",
id: 1,
Expand All @@ -5145,7 +5143,6 @@ describe("observableQuery.subscribeToMore", () => {
},
},
},
subscriptionVariables: { id: 1 },
}
);

Expand Down
14 changes: 4 additions & 10 deletions src/__tests__/subscribeToMore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -240,23 +240,17 @@ describe("subscribeToMore", () => {
name
}
`,
updateQuery: (
prev,
{ subscriptionData, complete, previousQueryResult }
) => {
updateQuery: (prev, { subscriptionData, complete, previousData }) => {
expect(complete).toBe(true);
expect(previousQueryResult).toStrictEqual(prev);
expect(previousData).toStrictEqual(prev);
// Type Guard
if (!complete) {
return undefined;
}

expect(previousQueryResult.entry).not.toContainEqual(nextMutation);
expect(previousData.entry).not.toContainEqual(nextMutation);
return {
entry: [
...previousQueryResult.entry,
{ value: subscriptionData.data.name },
],
entry: [...previousData.entry, { value: subscriptionData.data.name }],
};
},
});
Expand Down
24 changes: 5 additions & 19 deletions src/core/ObservableQuery.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import type {
Concast,
Observer,
ObservableSubscription,
DeepPartial,
} from "../utilities/index.js";
import {
cloneDeep,
Expand Down Expand Up @@ -636,7 +635,6 @@ Did you mean to call refetch(variables) instead of refetch({ variables })?`,
this.updateQuery((previous, updateOptions) =>
updateQuery(previous, {
subscriptionData,
subscriptionVariables: options.variables,
...updateOptions,
})
);
Expand Down Expand Up @@ -732,23 +730,11 @@ Did you mean to call refetch(variables) instead of refetch({ variables })?`,
optimistic: false,
});

const variables = (this as any).variables;
let updateOptions: UpdateQueryOptions<TData, TVariables>;
if (complete && result) {
updateOptions = {
variables,
complete: true,
previousQueryResult: result,
};
} else {
updateOptions = {
variables,
complete: false,
previousQueryResult: result as DeepPartial<Unmasked<TData>>,
};
}

const newResult = mapFn(result!, updateOptions);
const newResult = mapFn(result!, {
variables: this.variables,
complete: !!complete,
previousData: result,
} as UpdateQueryOptions<TData, TVariables>);

if (newResult) {
queryManager.cache.writeQuery({
Expand Down
16 changes: 8 additions & 8 deletions src/core/__tests__/ObservableQuery.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3370,16 +3370,16 @@ describe("ObservableQuery", () => {
});

let updateQuerySpy = jest.fn();
observable.updateQuery((previous, { complete, previousQueryResult }) => {
observable.updateQuery((previous, { complete, previousData }) => {
updateQuerySpy();
expect(previous).toEqual({});
expect(complete).toBe(false);
expect(previousQueryResult).toStrictEqual(previous);
expect(previousData).toStrictEqual(previous);

if (complete) {
expectTypeOf(previousQueryResult).toEqualTypeOf<typeof dataOne>();
expectTypeOf(previousData).toEqualTypeOf<typeof dataOne>();
} else {
expectTypeOf(previousQueryResult).toEqualTypeOf<
expectTypeOf(previousData).toEqualTypeOf<
DeepPartial<typeof previous> | undefined
>();
}
Expand All @@ -3396,16 +3396,16 @@ describe("ObservableQuery", () => {
});
});

observable.updateQuery((previous, { complete, previousQueryResult }) => {
observable.updateQuery((previous, { complete, previousData }) => {
updateQuerySpy();
expect(previous).toEqual(dataOne);
expect(complete).toBe(true);
expect(previousQueryResult).toStrictEqual(previous);
expect(previousData).toStrictEqual(previous);

if (complete) {
expectTypeOf(previousQueryResult).toEqualTypeOf<typeof dataOne>();
expectTypeOf(previousData).toEqualTypeOf<typeof dataOne>();
} else {
expectTypeOf(previousQueryResult).toEqualTypeOf<
expectTypeOf(previousData).toEqualTypeOf<
DeepPartial<typeof previous> | undefined
>();
}
Expand Down
44 changes: 23 additions & 21 deletions src/core/watchQueryOptions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -164,12 +164,8 @@ export interface FetchMoreQueryOptions<TVariables, TData = any> {
context?: DefaultContext;
}

export interface UpdateQueryFn<
TData,
TVariables extends OperationVariables,
TOptions = {},
> {
(mapFn: UpdateQueryMapFn<TData, TVariables, TOptions>): void;
export interface UpdateQueryFn<TData, TVariables extends OperationVariables> {
(mapFn: UpdateQueryMapFn<TData, TVariables>): void;
}

export type UpdateQueryOptions<TData, TVariables> = {
Expand All @@ -180,45 +176,51 @@ export type UpdateQueryOptions<TData, TVariables> = {
* Indicate if the previous query result has been found fully in the cache.
*/
complete: true;
previousQueryResult: Unmasked<TData>;
previousData: Unmasked<TData>;
}
| {
/**
* Indicate if the previous query result has not been found fully in the cache.
* Might have partial or missing data.
*/
complete: false;
previousQueryResult: DeepPartial<Unmasked<TData>> | undefined;
previousData: DeepPartial<Unmasked<TData>> | undefined;
}
);

export interface UpdateQueryMapFn<
TData = any,
TVariables extends OperationVariables = OperationVariables,
TOptions = {},
> {
(
/**
* @deprecated Use `options.previousQueryResult` instead.
* @deprecated This value is not type-safe and may contain partial data. This
* argument will be removed in the next major version of Apollo Client. Use
* `options.previousData` instead for a more type-safe value.
*/
previousQueryResult: Unmasked<TData>,
options: TOptions & UpdateQueryOptions<TData, TVariables>
): Unmasked<TData> | undefined;
previousData: Unmasked<TData>,
options: UpdateQueryOptions<TData, TVariables>
): Unmasked<TData> | void;
}

export type SubscribeToMoreUpdateQueryFn<
TData = any,
TVariables extends OperationVariables = OperationVariables,
TSubscriptionVariables extends OperationVariables = TVariables,
TSubscriptionData = TData,
> = UpdateQueryMapFn<
TData,
TVariables,
{
subscriptionData: { data: Unmasked<TSubscriptionData> };
subscriptionVariables: TSubscriptionVariables | undefined;
}
>;
> = {
(
/**
* @deprecated This value is not type-safe and may contain partial data. This
* argument will be removed in the next major version of Apollo Client. Use
* `options.previousData` instead for a more type-safe value.
*/
previousData: Unmasked<TData>,
options: UpdateQueryOptions<TData, TVariables> & {
subscriptionData: { data: Unmasked<TSubscriptionData> };
}
): Unmasked<TData> | void;
};

export interface SubscribeToMoreOptions<
TData = any,
Expand Down
1 change: 0 additions & 1 deletion src/react/hoc/__tests__/queries/updateQuery.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ describe("[queries] updateQuery", () => {
try {
data!.updateQuery(() => {
done = true;
return undefined;
});
} catch (error) {
reject(error);
Expand Down
Loading

0 comments on commit edf8520

Please sign in to comment.