1
0
mirror of synced 2025-12-21 19:06:49 -05:00
Files
docs/lib/process-learning-tracks.js

51 lines
1.9 KiB
JavaScript

const renderContent = require('./render-content')
const getLinkData = require('./get-link-data')
const renderOpts = { textOnly: true, encodeEntities: true }
module.exports = async function processLearningTracks (rawLearningTracks, context) {
const learningTracks = []
let featuredTrack
for await (const rawTrackName of rawLearningTracks) {
let isFeaturedTrack = false
// Track names in frontmatter may include Liquid conditionals.
const renderedTrackName = await renderContent(rawTrackName, context, renderOpts)
if (!renderedTrackName) continue
// Find the data for the current product and track name.
const track = context.site.data['learning-tracks'][context.currentProduct][renderedTrackName]
if (!track) continue
const learningTrack = {
trackName: renderedTrackName,
title: await renderContent(track.title, context, renderOpts),
description: await renderContent(track.description, context, renderOpts),
// getLinkData respects versioning and only returns guides available in the current version;
// if no guides are available, the learningTrack.guides property will be an empty array.
guides: await getLinkData(track.guides, context)
}
// Determine if this is the featured track.
if (track.featured_track) {
// Featured track properties may include Liquid conditionals with versioning, so we need to parse to
// determine if the featured track is relevant for this version.
const parsed = await renderContent(track.featured_track, context, renderOpts)
if (parsed === 'true') {
featuredTrack = learningTrack
isFeaturedTrack = true
}
}
// Only add the track to the array of tracks if there are guides in this version
// and it's not the featured track.
if (learningTrack.guides.length && !isFeaturedTrack) {
learningTracks.push(learningTrack)
}
}
return { featuredTrack, learningTracks }
}