@focus-reactive/graphql-content-layer
Version:
[](https://badge.fury.io/js/%40focus-reactive%2Fgraphql-content-layer) # GitNation GraphQL Content Layer
79 lines (72 loc) • 1.63 kB
JavaScript
const {
prepareSpeakers,
trySelectSettings
} = require('./utils');
const {
personFragment
} = require('./fragments');
const {
getCommittee
} = require('./http-utils');
const selectSettings = trySelectSettings(s => ({ ...s.speakerAvatar.dimensions,
tagColors: s.tagColors,
labelColors: s.labelColors
}), {
avatarWidth: 500,
avatarHeight: 500,
tagColors: {}
});
const queryPages =
/* GraphQL */
`
query(
$conferenceTitle: ConferenceTitle
$eventYear: EventYear
$avatarWidth: Int
$avatarHeight: Int
) {
conf: conferenceBrand(where: { title: $conferenceTitle }) {
id
year: conferenceEvents(where: { year: $eventYear }) {
id
emsEventId
useEmsData
committee {
...person
}
}
}
}
${personFragment}
`;
const fetchData = async (client, {
tagColors,
labelColors,
...vars
}) => {
const data = await client.request(queryPages, vars).then(res => ({ ...res.conf.year[0]
}));
const {
committee: cmsCommittee,
useEmsData,
emsEventId
} = data; // prioritize CMS committee
const rawCommittee = cmsCommittee && cmsCommittee.length ? cmsCommittee.map(item => ({
speaker: item
})) : useEmsData ? await getCommittee(emsEventId) : [];
const speakers = await Promise.all(prepareSpeakers(rawCommittee.map(speaker => ({ ...speaker,
decor: true
})), tagColors, labelColors));
return {
speakers: {
committee: speakers
}
};
};
module.exports = {
fetchData,
selectSettings,
queryPages,
getData: data => data.conf.year[0].committee,
story: 'Programme Committee'
};