diff --git a/packages/apollo-angular/CHANGELOG.md b/packages/apollo-angular/CHANGELOG.md index e0dd0ec0c..3385850c5 100644 --- a/packages/apollo-angular/CHANGELOG.md +++ b/packages/apollo-angular/CHANGELOG.md @@ -10,6 +10,7 @@ - Simpler and less error prone API for watching queries thanks to `QueryRef` - More AoT friendly - Brings back Server-Side Rendering +- Allows to type the operation variables **BREAKING CHANGES:** - [see Migation](../../Migration.md) diff --git a/packages/apollo-angular/src/Apollo.ts b/packages/apollo-angular/src/Apollo.ts index d6d1f6fbd..96cae2b10 100644 --- a/packages/apollo-angular/src/Apollo.ts +++ b/packages/apollo-angular/src/Apollo.ts @@ -11,25 +11,31 @@ import {Observable} from 'rxjs/Observable'; import {from} from 'rxjs/observable/from'; import {QueryRef} from './QueryRef'; -import {ApolloOptions} from './types'; +import {ApolloOptions, TypedVariables} from './types'; import {fromPromise, wrapWithZone} from './utils'; +export type R = Record; + export class ApolloBase { constructor(private _client?: ApolloClient) {} - public watchQuery(options: WatchQueryOptions): QueryRef { + public watchQuery( + options: WatchQueryOptions & TypedVariables, + ): QueryRef { return new QueryRef(this.client.watchQuery({...options})); } - public query( - options: WatchQueryOptions, + public query( + options: WatchQueryOptions & TypedVariables, ): Observable> { return fromPromise>(() => this.client.query({...options}), ); } - public mutate(options: MutationOptions): Observable> { + public mutate( + options: MutationOptions & TypedVariables, + ): Observable> { return fromPromise>(() => this.client.mutate({...options}), ); diff --git a/packages/apollo-angular/src/types.ts b/packages/apollo-angular/src/types.ts index eb505a7fc..ed3021a65 100644 --- a/packages/apollo-angular/src/types.ts +++ b/packages/apollo-angular/src/types.ts @@ -1,3 +1,6 @@ // XXX: 2.0.0-rc.3 // import {ApolloClientOptions} from 'apollo-client'; export type ApolloOptions = Record; +export type TypedVariables = { + variables?: T; +}; diff --git a/packages/apollo-angular/tests/Apollo.spec.ts b/packages/apollo-angular/tests/Apollo.spec.ts index 1190d1a6b..b97139e53 100644 --- a/packages/apollo-angular/tests/Apollo.spec.ts +++ b/packages/apollo-angular/tests/Apollo.spec.ts @@ -256,10 +256,21 @@ describe('Apollo', () => { const client = apollo.getClient(); - const options = {mutation: 'gql'} as any; + const options = { + mutation: gql` + mutation setFoo($foo: String!) { + setFoo(foo: $foo) { + foo + } + } + `, + variables: { + foo: 'test', + }, + }; client.mutate = jest.fn().mockReturnValue(Promise.resolve('mutation')); - const obs = apollo.mutate(options); + const obs = apollo.mutate(options); obs.subscribe({ next(r) {