UNPKG

@focus-reactive/graphql-content-layer

Version:

[![npm version](https://badge.fury.io/js/%40focus-reactive%2Fgraphql-content-layer.svg)](https://badge.fury.io/js/%40focus-reactive%2Fgraphql-content-layer) # GitNation GraphQL Content Layer

99 lines (89 loc) 1.82 kB
const { markdownToHtml } = require('./markdown'); const { contentTypeMap } = require('./utils'); const queryPages = /* GraphQL */ ` query($conferenceTitle: ConferenceTitle, $eventYear: EventYear) { conf: conferenceBrand(where: { title: $conferenceTitle }) { id year: conferenceEvents(where: { year: $eventYear }) { id diversity { id title description maxTickets sponsoredTickets applyButtonText applyButtonLink showApplyButton sponsorButtonText sponsorButtonLink showSponsorButton sponsors { id title site avatar { url } } } } } } `; const fetchData = async (client, { tagColors, ...vars }) => { const data = await client.request(queryPages, vars).then(res => res.conf.year[0].diversity); if (!data) { return {}; } let { maxTickets, sponsoredTickets } = data; if (sponsoredTickets < 0) { sponsoredTickets = 0; } if (maxTickets <= 0) { maxTickets = 1; } if (sponsoredTickets > maxTickets) { maxTickets = sponsoredTickets; } const diversity = { ...data, description: await markdownToHtml(data.description), sponsors: data.sponsors.map(({ title, avatar: { url }, id, site }) => ({ id, title, site, avatar: url, contentType: contentTypeMap.Sponsor })), progress: Math.round(100 * sponsoredTickets / maxTickets), contentType: contentTypeMap.Diversity }; return { diversity }; }; module.exports = { fetchData, queryPages, getData: data => data.conf.year[0].diversity, story: 'diversity' };