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.
Signature
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>;
}
Members
query
method
type:
(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
method
type:
(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.
Signature
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>;
}
Members
constructor
method
type:
(queryRef: QueryRef<T, V>, apollo: Apollo) => QueryResult
completed$
property
type:
refetchOnChannelChange
method
type:
() => QueryResult<T, V>
Re-fetch this query whenever the active Channel changes.
single$
property
type:
Observable<T>
Returns an Observable which emits a single result and then completes.
stream$
property
type:
Observable<T>
Returns an Observable which emits until unsubscribed.
ref
property
type:
QueryRef<T, V>
mapSingle
method
type:
(mapFn: (item: T) => R) => Observable<R>
Returns a single-result Observable after applying the map function.
mapStream
method
type:
(mapFn: (item: T) => R) => Observable<R>
Returns a multiple-result Observable after applying the map function.