@@ -259,7 +259,7 @@ export async function fetchSiteContextByIds(
259259 } ;
260260
261261 const sections = ids . siteSection
262- ? parseSiteSectionsAndGroups ( siteStructure , ids . siteSection )
262+ ? parseSiteSectionsAndGroups ( siteStructure , ids . siteSection , ids . siteSpace )
263263 : null ;
264264
265265 // Parse the current siteSpace and siteSpaces based on the site structure type.
@@ -274,7 +274,9 @@ export async function fetchSiteContextByIds(
274274 ) ;
275275 }
276276
277- return { siteSpaces, siteSpace } ;
277+ const visibleSiteSpaces = filterHiddenSiteSpaces ( siteSpaces , ids . siteSpace ) ;
278+
279+ return { siteSpaces : visibleSiteSpaces , siteSpace } ;
278280 }
279281
280282 if ( siteStructure . type === 'sections' ) {
@@ -284,6 +286,7 @@ export async function fetchSiteContextByIds(
284286 ) ;
285287
286288 const currentSection = sections . current ;
289+ // hidden siteSpaces are already filtered in parseSiteSectionsAndGroups
287290 const siteSpaces = currentSection . siteSpaces ;
288291 const siteSpace = currentSection . siteSpaces . find (
289292 ( siteSpace ) => siteSpace . id === ids . siteSpace
@@ -426,11 +429,59 @@ export function checkIsRootSiteContext(context: GitBookSiteContext): boolean {
426429 }
427430}
428431
429- function parseSiteSectionsAndGroups ( structure : SiteStructure , siteSectionId : string ) {
432+ /**
433+ * Filter out hidden site spaces from a list of site spaces.
434+ */
435+ function filterHiddenSiteSpaces ( siteSpaces : SiteSpace [ ] , currentSiteSpaceId ?: string ) : SiteSpace [ ] {
436+ return siteSpaces . filter (
437+ ( siteSpace ) => ! siteSpace . hidden || siteSpace . id === currentSiteSpaceId
438+ ) ;
439+ }
440+
441+ /**
442+ * Filter out hidden site spaces from sections and groups recursively.
443+ */
444+ function filterHiddenSiteSpacesFromSections (
445+ sections : ( SiteSection | SiteSectionGroup ) [ ] ,
446+ currentSiteSpaceId ?: string
447+ ) : ( SiteSection | SiteSectionGroup ) [ ] {
448+ return sections . map ( ( item ) => {
449+ if ( item . object === 'site-section' ) {
450+ return {
451+ ...item ,
452+ siteSpaces : filterHiddenSiteSpaces ( item . siteSpaces , currentSiteSpaceId ) ,
453+ } ;
454+ }
455+ if ( item . object === 'site-section-group' ) {
456+ return {
457+ ...item ,
458+ children : filterHiddenSiteSpacesFromSections ( item . children , currentSiteSpaceId ) ,
459+ } ;
460+ }
461+ return item ;
462+ } ) ;
463+ }
464+
465+ function parseSiteSectionsAndGroups (
466+ structure : SiteStructure ,
467+ siteSectionId : string ,
468+ currentSiteSpaceId ?: string
469+ ) {
430470 const sectionsAndGroups = getSiteStructureSections ( structure , { ignoreGroups : false } ) ;
471+ const filteredSectionsAndGroups = filterHiddenSiteSpacesFromSections (
472+ sectionsAndGroups ,
473+ currentSiteSpaceId
474+ ) ;
431475 const section = parseCurrentSection ( structure , siteSectionId ) ;
432476 assert ( section , `couldn't find section "${ siteSectionId } " in site structure` ) ;
433- return { list : sectionsAndGroups , current : section } satisfies SiteSections ;
477+ const filteredSection = {
478+ ...section ,
479+ siteSpaces : filterHiddenSiteSpaces ( section . siteSpaces , currentSiteSpaceId ) ,
480+ } ;
481+ return {
482+ list : filteredSectionsAndGroups ,
483+ current : filteredSection ,
484+ } satisfies SiteSections ;
434485}
435486
436487function parseCurrentSection ( structure : SiteStructure , siteSectionId : string ) {
0 commit comments