diff --git a/src/lib/glossary.ts b/src/lib/glossary.ts index d5f901c..31932be 100644 --- a/src/lib/glossary.ts +++ b/src/lib/glossary.ts @@ -201,6 +201,36 @@ export function uniqueGlossaryEntries( return out; } +export function slugsOfGlossaryEntries( + entries: GlossaryEntry[] = [], + ): Set { + const slugs = new Set(); + + for (const entry of entries) { + const slug = slugOfGlossaryEntry(entry); + if (!slug) continue; + slugs.add(slug); + } + + return slugs; + } + + export function excludeGlossaryEntries( + entries: GlossaryEntry[] = [], + excluded: Iterable = [], + ): GlossaryEntry[] { + const excludedSlugs = new Set( + Array.from(excluded) + .map((value) => normalizeGlossarySlug(value)) + .filter(Boolean), + ); + + return entries.filter((entry) => { + const slug = slugOfGlossaryEntry(entry); + return Boolean(slug) && !excludedSlugs.has(slug); + }); + } + export function resolveGlossaryEntriesInSourceOrder( slugs: string[] = [], allEntries: GlossaryEntry[] = [], @@ -504,11 +534,27 @@ export function getGlossaryEntryAsideData( allEntries: GlossaryEntry[] = [], ): GlossaryEntryAsideData { const currentFamily = familyOf(currentEntry); + const currentSlug = slugOfGlossaryEntry(currentEntry); + const fondamentaux = getFondamentaux(allEntries); - const sameFamilyEntries = getEntriesOfSameFamily(currentEntry, allEntries); const sameFamilyTitle = getSameFamilyTitle(currentEntry); const relationSections = getRelationSections(currentEntry, allEntries); - const contextualTheory = getContextualTheory(currentEntry, allEntries); + + const relationEntries = uniqueGlossaryEntries( + relationSections.flatMap((section) => section.items), + ); + const relationSlugs = slugsOfGlossaryEntries(relationEntries); + + const contextualTheory = excludeGlossaryEntries( + getContextualTheory(currentEntry, allEntries), + new Set([currentSlug, ...relationSlugs]), + ).slice(0, 6); + const contextualTheorySlugs = slugsOfGlossaryEntries(contextualTheory); + + const sameFamilyEntries = excludeGlossaryEntries( + getEntriesOfSameFamily(currentEntry, allEntries), + new Set([currentSlug, ...relationSlugs, ...contextualTheorySlugs]), + ).slice(0, 8); const showNoyau = currentFamily !== "concept-fondamental" &&