| | import getLinkData from './get-link-data' |
| | import getApplicableVersions from '@/versions/lib/get-applicable-versions' |
| | import { getDataByLanguage } from '@/data-directory/lib/get-data' |
| | import { renderContent } from '@/content-render/index' |
| | import { executeWithFallback } from '@/languages/lib/render-with-fallback' |
| | import { Context, TrackGuide, LearningTrack, ProcessedLearningTracks } from './types' |
| |
|
| | const renderOpts = { textOnly: true } |
| |
|
| | |
| | |
| | export default async function processLearningTracks( |
| | rawLearningTracks: string[], |
| | context: Context, |
| | ): Promise<ProcessedLearningTracks> { |
| | const learningTracks: LearningTrack[] = [] |
| |
|
| | if (!context.currentProduct) { |
| | throw new Error(`Missing context.currentProduct value.`) |
| | } |
| |
|
| | for (const rawTrackName of rawLearningTracks) { |
| | |
| | const renderedTrackName = rawTrackName.includes('{') |
| | ? await executeWithFallback( |
| | context, |
| | () => renderContent(rawTrackName, context, renderOpts), |
| | () => '', |
| | ) |
| | : rawTrackName |
| | if (!renderedTrackName) continue |
| |
|
| | |
| |
|
| | if (context.currentProduct.includes('.')) { |
| | throw new Error(`currentProduct cannot contain a . (${context.currentProduct})`) |
| | } |
| | if (renderedTrackName.includes('.')) { |
| | throw new Error(`renderedTrackName cannot contain a . (${renderedTrackName})`) |
| | } |
| |
|
| | |
| | |
| | const track = getDataByLanguage( |
| | `learning-tracks.${context.currentProduct}.${renderedTrackName}`, |
| | context.currentLanguage!, |
| | ) |
| | if (!track) { |
| | throw new Error(`No learning track called '${renderedTrackName}'.`) |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | let enTrack: any |
| | if (context.currentLanguage !== 'en') { |
| | enTrack = getDataByLanguage( |
| | `learning-tracks.${context.currentProduct}.${renderedTrackName}`, |
| | 'en', |
| | ) |
| | |
| | |
| | |
| | |
| | track.guides = enTrack.guides |
| | track.versions = enTrack.versions |
| | } |
| |
|
| | |
| | if (track.versions) { |
| | const trackVersions = getApplicableVersions(track.versions) |
| |
|
| | |
| | if (!context.currentVersion || !trackVersions.includes(context.currentVersion)) { |
| | continue |
| | } |
| | } |
| |
|
| | const title = await executeWithFallback( |
| | context, |
| | () => renderContent(track.title, context, renderOpts), |
| | (enContext: any) => renderContent(enTrack.title, enContext, renderOpts), |
| | ) |
| | const description = await executeWithFallback( |
| | context, |
| | () => renderContent(track.description, context, renderOpts), |
| | (enContext: any) => renderContent(enTrack.description, enContext, renderOpts), |
| | ) |
| |
|
| | const guides = (await getLinkData(track.guides, context)) || [] |
| |
|
| | const learningTrack: LearningTrack = { |
| | trackName: renderedTrackName, |
| | trackProduct: context.currentProduct || null, |
| | title, |
| | description, |
| | |
| | |
| | guides: guides as TrackGuide[], |
| | } |
| |
|
| | |
| | if (Array.isArray(learningTrack.guides) && learningTrack.guides.length > 0) { |
| | learningTracks.push(learningTrack) |
| | } |
| | } |
| |
|
| | return { learningTracks } |
| | } |
| |
|