What do you want?
Use latest libraries!
So let's upgrade!
But... there are issues...
Who'll fix them
Not me
Not me
Let's wait...
05.12.2018, FrontendCon
Senior Frontend Developer @Scalac
https://slides.com/ktrz/fc2018
this.apollo.watchQuery({
query: foo,
variables: { a: a$, b: b$, c: c$ },
})
.subscribe((bar) => {
console.log(bar);
});this.apollo.watchQuery({
query: foo,
variables: { a: a$, b: b$, c: c$ },
})
.valueChanges
.subscribe((bar) => {
console.log(bar);
});
this.apollo.watchQuery({
query: foo,
variables: { a: a$, b: b$, c: c$ },
})
.valueChanges
.subscribe((bar) => {
console.log(bar);
});
const variables$ = combineVariables({ a: a$, b: a$, c: c$ });
// {a: Observable, b: Observable, c: Observable} => Observable<{a,b,c}>
variables$.pipe(
switchMap(variables => {
return this.apollo.watchQuery({
query: foo,
variables: variables,
}).valueChanges;
}
)
)
.subscribe((bar) => {
console.log(bar);
});const variables$ = combineVariables({a: a$, b: a$, c: c$});
// {a: Observable, b: Observable, c: Observable} => Observable<{a,b,c}>
const queryRef = this.apollo.watchQuery({
query: foo,
fetchResults: false,
});
variables$.pipe(
tap(variables => queryRef.setVariables(variables)),
switchMap(() => queryRef.valueChanges)
)
.subscribe((bar) => {
console.log(bar);
});
this.apollo.watchQuery({
query: foo,
variables: { a: a$, b: a$, c: c$ },
})
.subscribe((bar) => {
console.log(bar);
});const variables$ = combineVariables({a: a$, b: a$, c: c$});
// {a: Observable, b: Observable, c: Observable} => Observable<{a,b,c}>
const queryRef = this.apollo.watchQuery({
query: foo,
variables: variables,
fetchResults: false,
});
variables$.pipe(
tap(variables => queryRef.setVariables(variables)),
switchMap(() => queryRef.valueChanges)
)
.subscribe((bar) => {
console.log(bar);
});this.apollo.watchQuery({
query: foo,
variables: { a: a$, b: a$, c: c$ },
})
.subscribe((bar) => {
console.log(bar);
});export function createApollo(httpLink: HttpLink): ApolloClientOptions<any> {
return {
link: from([
handleObservableVariables(),
httpLink.create({ uri })
]),
cache: new InMemoryCache(),
};
}export const handleObservableVariables = (ngZone: NgZone) =>
new RxjsLink({ onOperation: requestHandler(ngZone) });
return operation$.pipe(
switchMap(operation => {
const context = operation.getContext();const requestHandler = (zone: NgZone): OnOperation =>
(operation$: Observable<Operation>): Observable<Operation> => zone.runOutsideAngular(() => { if (checkVariables(context.variables$) {
return combineVariables(context.variables$).pipe(
switchMap(variables =>
of(prepareOperation(operation, variables)))
);
}
return of(operation);
}),
);
});well... almost
this.apollo.watchQuery({
query: foo,
context: {
variables$: { a: a$, b: a$, c: c$ },
},
fetchResults: false,
})
.subscribe((bar) => {
console.log(bar);
});this.apollo.watchQuery({
query: foo,
variables: { a: a$, b: a$, c: c$ },
})
.subscribe((bar) => {
console.log(bar);
});