DataService
DataService
Used to interact with the Admin API via GraphQL queries. Internally this service uses the
Apollo Client, which means it maintains a normalized entity cache. For this reason, it is
advisable to always select the id
field of any entity, which will allow the returned data
to be effectively cached.
class DataService {
query(query: DocumentNode | TypedDocumentNode<T, V>, variables?: V, fetchPolicy: WatchQueryFetchPolicy = 'cache-and-network') => QueryResult<T, V>;
mutate(mutation: DocumentNode | TypedDocumentNode<T, V>, variables?: V, update?: MutationUpdaterFn<T>) => Observable<T>;
}
query
(query: DocumentNode | TypedDocumentNode<T, V>, variables?: V, fetchPolicy: WatchQueryFetchPolicy = 'cache-and-network') => QueryResult<T, V>
Perform a GraphQL query. Returns a QueryResult which allows further control over they type of result returned, e.g. stream of values, single value etc.
Example
const result$ = this.dataService.query(gql`
query MyQuery($id: ID!) {
product(id: $id) {
id
name
slug
}
},
{ id: 123 },
).mapSingle(data => data.product);
mutate
(mutation: DocumentNode | TypedDocumentNode<T, V>, variables?: V, update?: MutationUpdaterFn<T>) => Observable<T>
Perform a GraphQL mutation.
Example
const result$ = this.dataService.mutate(gql`
mutation MyMutation($Codegen.UpdateEntityInput!) {
updateEntity(input: $input) {
id
name
}
},
{ Codegen.updateEntityInput },
);
QueryResult
This class wraps the Apollo Angular QueryRef object and exposes some getters for convenience.
class QueryResult<T, V extends Record<string, any> = Record<string, any>> {
constructor(queryRef: QueryRef<T, V>, apollo: Apollo)
completed$ = new Subject<void>();
refetchOnChannelChange() => QueryResult<T, V>;
single$: Observable<T>
stream$: Observable<T>
ref: QueryRef<T, V>
mapSingle(mapFn: (item: T) => R) => Observable<R>;
mapStream(mapFn: (item: T) => R) => Observable<R>;
}
constructor
(queryRef: QueryRef<T, V>, apollo: Apollo) => QueryResult
completed$
refetchOnChannelChange
() => QueryResult<T, V>
Re-fetch this query whenever the active Channel changes.
single$
Observable<T>
Returns an Observable which emits a single result and then completes.
stream$
Observable<T>
Returns an Observable which emits until unsubscribed.
ref
QueryRef<T, V>
mapSingle
(mapFn: (item: T) => R) => Observable<R>
Returns a single-result Observable after applying the map function.
mapStream
(mapFn: (item: T) => R) => Observable<R>
Returns a multiple-result Observable after applying the map function.