Using a Data Source
Once you have created some data sources, you can use them to enrich the
data structures returned by the Cook's content retrieval queries. To do
this you use a content retrieval function called
datasource()
. If you go back to editing the section
page content retrieval query (index-page.graphql
) at
http://
cue-front-host:8101/tomorrow-online/edit
,
place your cursor immediately above the headerMenu
entry and press Ctrl-Space
, then you will see that
the displayed list includes a datasource
option.
Select it and add a name
parameter, specifying the
name of the data source you created:
datasource(name: "politicalContent")
(You don't actually need to place the data source call before the
headerMenu
entry, it just has to be a top-level entry
in the query, at the same level as resolution
,
context
, menu
and so on.)
The datasource
function returns
AtomEntry
objects that contain information about each
content item found by the data source query. One of the
AtomEntry
object's fields is
__typename
, which means that you can test the
returned content items' type using the same ... on
content-type technique used to test
the context object:
datasource(name: "politicalContent") { ... on Story { displayId fields { title } } }
Once you have determined the types of the returned content items in this way, you have access to all of their content and relations in exactly the same way as for content items retrieved directly from the Content Engine.
You can optionally prefix the datasource
function
with a descriptive field name to make the output structure easier to
navigate:
politicalContent: datasource(name: "politicalContent") { ... on Story { displayId fields { title } } }
Executing the query now will produce the same output as before, but with
an additional politicalContent
field containing the
selected information about the content items returned by the datasource:
... "politicalContent": [ { "displayId": "29", "fields": { "title": "Cameron promises 'seven-day NHS'" } }, { "displayId": "26", "fields": { "title": "'£260m cost' if line not electrified" } }, ..etc... ] ...