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, variables?: V, fetchPolicy: WatchQueryFetchPolicy = 'cache-and-network') => QueryResult<T, V>;
  mutate(mutation: DocumentNode, variables?: V, update?: MutationUpdaterFn<T>) => Observable<T>;
}

Members

query

method
type:
(query: DocumentNode, 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, variables?: V, update?: MutationUpdaterFn<T>) => Observable<T>

Perform a GraphQL mutation.

Example

const result$ = this.dataService.mutate(gql`
  mutation MyMutation($input: UpdateEntityInput!) {
    updateEntity(input: $input) {
      id
      name
    }
  },
  { input: updateEntityInput },
);

QueryResult

This class wraps the Apollo Angular QueryRef object and exposes some getters for convenience.

Signature

class QueryResult<T, V = Record<string, any>> {
  constructor(queryRef: QueryRef<T, V>, apollo: Apollo)
  completed$ = new Subject();
  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.