From 3c0e72feb4a1cc2a945250bd18ea11252b1698a5 Mon Sep 17 00:00:00 2001 From: Kamil Kisiela Date: Sat, 4 Feb 2017 19:05:14 +0100 Subject: [PATCH 1/3] Add generic types to RxObservableQuery --- src/RxObservableQuery.ts | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/RxObservableQuery.ts b/src/RxObservableQuery.ts index 4bd329e..7af856e 100644 --- a/src/RxObservableQuery.ts +++ b/src/RxObservableQuery.ts @@ -30,7 +30,7 @@ export class RxObservableQuery extends Observable { // apollo-specific methods - public refetch(variables?: any): Promise> { + public refetch(variables?: any): Promise> { return this.getObservableQuery().refetch(variables); } @@ -42,7 +42,7 @@ export class RxObservableQuery extends Observable { return this.getObservableQuery().startPolling(p); } - public fetchMore(options: any): Promise { + public fetchMore(options: any): Promise> { return this.getObservableQuery().fetchMore(options); } @@ -54,24 +54,25 @@ export class RxObservableQuery extends Observable { return this.getObservableQuery().subscribeToMore(options); } - public result(): Promise> { + public result(): Promise> { return this.getObservableQuery().result(); } - public currentResult(): ApolloQueryResult { + // XXX Change it to ApolloCurrentResult + public currentResult(): any { return this.getObservableQuery().currentResult(); } - public get variables(): any { + public get variables(): { [key: string]: any } { return this.getObservableQuery().variables; } // XXX set ModifiableWatchQueryOptions as an interface of opts - public setOptions(opts: any): Promise> { + public setOptions(opts: any): Promise> { return this.getObservableQuery().setOptions(opts); } - public setVariables(variables: any, tryFetch: boolean = false): Promise> { + public setVariables(variables: any, tryFetch: boolean = false): Promise> { return this.getObservableQuery().setVariables(variables, tryFetch); } @@ -89,12 +90,12 @@ export class RxObservableQuery extends Observable { return obs[$$observable]().subscribe(subscriber); } - private getObservableQuery(): ObservableQuery { + private getObservableQuery(): ObservableQuery { if (this.apollo instanceof ObservableQueryRef) { const ref = this.apollo as ObservableQueryRef; return ref.getRef(); } - return this.apollo as ObservableQuery; + return this.apollo as ObservableQuery; } } From cd22f3797cc66fa2a8701674765d3bbd96a77911 Mon Sep 17 00:00:00 2001 From: Kamil Kisiela Date: Sat, 4 Feb 2017 19:06:24 +0100 Subject: [PATCH 2/3] Add it to changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ce1daa1..101b9f9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ### vNEXT - Add `result()`, `currentResult()`, `variables`, `setOptions`, `setVariables` [PR #29](https://github.com/kamilkisiela/apollo-client-rxjs/pull/29) +- Add generic types to `RxObservableQuery` [PR #30](https://github.com/kamilkisiela/apollo-client-rxjs/pull/30) ### v0.4.1 From d9a2b8b8cf8e65d8f0123f9f327a4809c542cc7d Mon Sep 17 00:00:00 2001 From: Kamil Kisiela Date: Sat, 4 Feb 2017 19:50:22 +0100 Subject: [PATCH 3/3] Fix generic types and add to tests --- src/RxObservableQuery.ts | 6 +++--- tests/RxObservableQuery.ts | 6 +++--- tests/fixtures/heroes.ts | 20 +++++++++++++++----- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/RxObservableQuery.ts b/src/RxObservableQuery.ts index 7af856e..0e93b16 100644 --- a/src/RxObservableQuery.ts +++ b/src/RxObservableQuery.ts @@ -7,10 +7,10 @@ import { ApolloQueryResult, ObservableQuery } from 'apollo-client'; import { ObservableQueryRef } from './utils/ObservableQueryRef'; -export class RxObservableQuery extends Observable { +export class RxObservableQuery extends Observable> { constructor( public apollo: ObservableQuery | ObservableQueryRef, - subscribe?: (subscriber: Subscriber) => Subscription | Function | void + subscribe?: (subscriber: Subscriber) => Subscription | Function | void, ) { super(null); @@ -19,7 +19,7 @@ export class RxObservableQuery extends Observable { } } - public lift(operator: Operator): Observable { + public lift(operator: Operator, ApolloQueryResult>): Observable> { const observable = new RxObservableQuery(this.apollo); observable.source = this; diff --git a/tests/RxObservableQuery.ts b/tests/RxObservableQuery.ts index 96bc30b..5639fe3 100644 --- a/tests/RxObservableQuery.ts +++ b/tests/RxObservableQuery.ts @@ -1,6 +1,6 @@ import { assert } from 'chai'; import { spy, stub } from 'sinon'; -import { ApolloClient, ApolloQueryResult, ObservableQuery } from 'apollo-client'; +import { ApolloClient, ObservableQuery } from 'apollo-client'; import * as heroes from './fixtures/heroes'; import { RxObservableQuery } from '../src/RxObservableQuery'; @@ -10,8 +10,8 @@ import 'rxjs/add/operator/map'; import 'rxjs/add/operator/do'; describe('RxObservableQuery', () => { - let obsQuery: ObservableQuery; - let rxObsQuery: RxObservableQuery>; + let obsQuery: ObservableQuery; + let rxObsQuery: RxObservableQuery; let client: ApolloClient; beforeEach(() => { diff --git a/tests/fixtures/heroes.ts b/tests/fixtures/heroes.ts index a4a915a..bdf17b3 100644 --- a/tests/fixtures/heroes.ts +++ b/tests/fixtures/heroes.ts @@ -1,5 +1,5 @@ import { DocumentNode } from 'graphql'; -import { ApolloClient, ApolloQueryResult, ObservableQuery } from 'apollo-client'; +import { ApolloClient, ObservableQuery } from 'apollo-client'; import { RxObservableQuery } from '../../src/RxObservableQuery'; import { RxApolloClient } from '../../src/RxApolloClient'; @@ -10,6 +10,16 @@ import mockNetworkInterface from '../mocks/mockNetworkInterface'; // data +export interface Hero { + name: string; +} + +export interface AllHeroesQueryResult { + allHeroes: { + heroes: Hero[]; + }; +} + export const query: DocumentNode = gql` query heroes { allHeroes { @@ -46,15 +56,15 @@ export const variables = { hero: 'Mr Bar' }; export interface MockedClientResult { client: ApolloClient; obsQuery: ObservableQuery; - rxObsQuery: RxObservableQuery>; + rxObsQuery: RxObservableQuery; } export function mockClient(): MockedClientResult { const networkInterface = createNetworkInterface(); const client = new ApolloClient({ networkInterface, addTypename: false }); - const obsQuery = client.watchQuery({ query }); - const rxObsQuery = new RxObservableQuery(obsQuery); + const obsQuery = client.watchQuery({ query }); + const rxObsQuery = new RxObservableQuery(obsQuery); return { client, @@ -72,7 +82,7 @@ export function mockRxClient(): MockedRxClientResult { const client = new RxApolloClient({ networkInterface, addTypename: false }); const obsQuery = client.watchQuery({ query }); - const rxObsQuery = new RxObservableQuery(obsQuery); + const rxObsQuery = new RxObservableQuery(obsQuery); return { client,