feat(glossaire): deduplicate entry aside relation groups
This commit is contained in:
@@ -201,6 +201,36 @@ export function uniqueGlossaryEntries(
|
|||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function slugsOfGlossaryEntries(
|
||||||
|
entries: GlossaryEntry[] = [],
|
||||||
|
): Set<string> {
|
||||||
|
const slugs = new Set<string>();
|
||||||
|
|
||||||
|
for (const entry of entries) {
|
||||||
|
const slug = slugOfGlossaryEntry(entry);
|
||||||
|
if (!slug) continue;
|
||||||
|
slugs.add(slug);
|
||||||
|
}
|
||||||
|
|
||||||
|
return slugs;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function excludeGlossaryEntries(
|
||||||
|
entries: GlossaryEntry[] = [],
|
||||||
|
excluded: Iterable<string> = [],
|
||||||
|
): 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(
|
export function resolveGlossaryEntriesInSourceOrder(
|
||||||
slugs: string[] = [],
|
slugs: string[] = [],
|
||||||
allEntries: GlossaryEntry[] = [],
|
allEntries: GlossaryEntry[] = [],
|
||||||
@@ -504,11 +534,27 @@ export function getGlossaryEntryAsideData(
|
|||||||
allEntries: GlossaryEntry[] = [],
|
allEntries: GlossaryEntry[] = [],
|
||||||
): GlossaryEntryAsideData {
|
): GlossaryEntryAsideData {
|
||||||
const currentFamily = familyOf(currentEntry);
|
const currentFamily = familyOf(currentEntry);
|
||||||
|
const currentSlug = slugOfGlossaryEntry(currentEntry);
|
||||||
|
|
||||||
const fondamentaux = getFondamentaux(allEntries);
|
const fondamentaux = getFondamentaux(allEntries);
|
||||||
const sameFamilyEntries = getEntriesOfSameFamily(currentEntry, allEntries);
|
|
||||||
const sameFamilyTitle = getSameFamilyTitle(currentEntry);
|
const sameFamilyTitle = getSameFamilyTitle(currentEntry);
|
||||||
const relationSections = getRelationSections(currentEntry, allEntries);
|
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 =
|
const showNoyau =
|
||||||
currentFamily !== "concept-fondamental" &&
|
currentFamily !== "concept-fondamental" &&
|
||||||
|
|||||||
Reference in New Issue
Block a user