diff --git a/src/lib/components/publications/TableOfContents.svelte b/src/lib/components/publications/TableOfContents.svelte index c0ad3ef..3e21823 100644 --- a/src/lib/components/publications/TableOfContents.svelte +++ b/src/lib/components/publications/TableOfContents.svelte @@ -32,17 +32,13 @@ return newEntries; }); - function getEntryExpanded(address: string) { - return toc.getEntry(address)?.expanded; - } - function setEntryExpanded(address: string, expanded: boolean = false) { const entry = toc.getEntry(address); if (!entry) { return; } - entry.expanded = expanded; + toc.expandedMap.set(address, expanded); entry.resolveChildren(); } @@ -57,9 +53,10 @@ {#each entries as entry} {@const address = entry.address} + {@const expanded = toc.expandedMap.get(address) ?? false} getEntryExpanded(address), + () => expanded, (open) => setEntryExpanded(address, open) } > @@ -82,8 +79,8 @@ {#each entries as entry} {@const address = entry.address} + {@const expanded = toc.expandedMap.get(address) ?? false} {#if entry.children.length > 0} - {@const expanded = getEntryExpanded(address)} {@const childDepth = depth + 1} handleEntryClick(address, !getEntryExpanded(address))} + onclick={() => handleEntryClick(address, !expanded)} /> {/if} {/each} diff --git a/src/lib/components/publications/table_of_contents.svelte.ts b/src/lib/components/publications/table_of_contents.svelte.ts index 371085c..a566f52 100644 --- a/src/lib/components/publications/table_of_contents.svelte.ts +++ b/src/lib/components/publications/table_of_contents.svelte.ts @@ -10,7 +10,6 @@ export interface TocEntry { children: TocEntry[]; parent?: TocEntry; depth: number; - expanded: boolean; childrenResolved: boolean; resolveChildren: () => Promise; } @@ -24,7 +23,8 @@ export interface TocEntry { */ export class TableOfContents { public addressMap: SvelteMap = new SvelteMap(); - + public expandedMap: SvelteMap = new SvelteMap(); + #root: TocEntry | null = null; #publicationTree: SveltePublicationTree; #pagePathname: string; @@ -92,11 +92,11 @@ export class TableOfContents { href, depth, children: [], - expanded: false, childrenResolved: true, resolveChildren: () => Promise.resolve(), }; parentEntry.children.push(tocEntry); + this.expandedMap.set(tocEntry.address, false); this.buildTocFromDocument(header, tocEntry, depth + 1); } @@ -213,10 +213,10 @@ export class TableOfContents { href: `${this.#pagePathname}#${address}`, children: [], depth, - expanded: false, childrenResolved: false, resolveChildren: resolver, }; + this.expandedMap.set(address, false); return entry; }