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

94 lines (81 loc) 2.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.postProcessLayer = void 0; /* eslint-disable no-param-reassign */ const dayjs = require('dayjs'); const populateTalkActivities = content => { const mainSpeakers = content.speakers.main; const { lightningTalks } = content; const talks = content.schedule.reduce((allTalks, sch) => [...allTalks, ...sch.list, ...lightningTalks], []); const updatedMainSpeakers = mainSpeakers.map(speaker => { if (!speaker.activities || !speaker.activities.talks) { return speaker; } const updatedTalks = speaker.activities.talks.map(tl => { const talkId = tl.id; if (!talkId) { return tl; } const fullTalk = talks.find(t => t.id === talkId); if (!fullTalk) { return tl; } return { ...fullTalk, ...tl }; }); const activities = { ...speaker.activities, talks: updatedTalks }; return { ...speaker, activities }; }); const updatedContent = { ...content }; updatedContent.speakers.main = updatedMainSpeakers; return updatedContent; }; const mergeTalksAndQA = content => { const { schedule } = content; schedule.forEach(sch => { sch.list.forEach(event => { const { talkKey, speaker, qaLink } = event; if (talkKey && speaker && !qaLink) { const extension = sch.list.find(ev => ev.qaLink && ev.talkKey === talkKey); if (extension) { // eslint-disable-next-line no-param-reassign event.extension = extension; } } }); }); return content; }; const postProcessLayer = content => { const processedContent = [mergeTalksAndQA, populateTalkActivities].reduce((updatedContent, processFn) => { try { return processFn(updatedContent); } catch (err) { return updatedContent; } }, content); content.schedule.forEach(data => { data.list = data.list.sort((a, b) => new Date(a.isoDate).getTime() > new Date(b.isoDate).getTime() ? 1 : -1); }); content.scheduleOffline.forEach(data => { data.list = data.list.sort((a, b) => new Date(a.isoDate).getTime() > new Date(b.isoDate).getTime() ? 1 : -1); }); return processedContent; }; exports.postProcessLayer = postProcessLayer;