|
4 | 4 | import { goto } from '$app/navigation'; |
5 | 5 | import Icon from '$lib/components/common/Icon.svelte'; |
6 | 6 | import Tooltip, { tooltip } from '$lib/components/common/Tooltip.svelte'; |
7 | | - import { packages, packageOrder, nav, type PackageId } from '$lib/config/packages'; |
| 7 | + import { packages, packageOrder, nav } from '$lib/config/packages'; |
8 | 8 | import type { SearchResult } from '$lib/utils/search'; |
9 | 9 | import { createDebouncedSearch } from '$lib/stores/searchHook.svelte'; |
10 | 10 | import { searchTarget } from '$lib/stores/searchNavigation'; |
11 | | - import { getPackageManifest, packageHasRoadmap, versionHasExamples } from '$lib/api/versions'; |
12 | 11 | import { SearchResult as SearchResultComponent } from '$lib/components/search'; |
| 12 | + import type { PageData } from './$types'; |
| 13 | +
|
| 14 | + let { data }: { data: PageData } = $props(); |
| 15 | + let packageFlags = $derived(data.packageFlags); |
13 | 16 |
|
14 | 17 | function navigateWithTransition(path: string) { |
15 | 18 | const doc = document as Document & { |
|
35 | 38 | } |
36 | 39 | } |
37 | 40 |
|
38 | | - // Track which packages have roadmaps / examples (latest version) |
39 | | - let roadmapFlags = $state<Record<string, boolean>>({}); |
40 | | - let examplesFlags = $state<Record<string, boolean>>({}); |
41 | | -
|
42 | 41 | onMount(() => { |
43 | 42 | window.addEventListener('keydown', handleGlobalKeydown); |
44 | 43 |
|
45 | | - // Load manifests to derive roadmap and examples availability |
46 | | - for (const pkgId of packageOrder) { |
47 | | - getPackageManifest(pkgId, fetch) |
48 | | - .then((manifest) => { |
49 | | - roadmapFlags[pkgId] = packageHasRoadmap(manifest); |
50 | | - examplesFlags[pkgId] = versionHasExamples(manifest.latestTag, manifest); |
51 | | - }) |
52 | | - .catch(() => {}); |
53 | | - } |
54 | | -
|
55 | 44 | return () => { |
56 | 45 | window.removeEventListener('keydown', handleGlobalKeydown); |
57 | 46 | }; |
|
171 | 160 | <div class="card-info-row"> |
172 | 161 | <span>{pkg.shortName}</span> |
173 | 162 | <div class="header-actions"> |
174 | | - <a href="{base}/{pkg.api}" class="icon-btn" use:tooltip={'API'}> |
175 | | - <Icon name="braces" size={14} /> |
176 | | - </a> |
| 163 | + {#if packageFlags[pkgId].hasApi} |
| 164 | + <a href="{base}/{pkg.api}" class="icon-btn" use:tooltip={'API'}> |
| 165 | + <Icon name="braces" size={14} /> |
| 166 | + </a> |
| 167 | + {/if} |
177 | 168 | <a href="{base}/{pkg.docs}" class="icon-btn" use:tooltip={'Docs'}> |
178 | 169 | <Icon name="book" size={14} /> |
179 | 170 | </a> |
|
182 | 173 | <Icon name="package" size={14} /> |
183 | 174 | </a> |
184 | 175 | {/if} |
185 | | - {#if examplesFlags[pkgId]} |
| 176 | + {#if packageFlags[pkgId].hasExamples} |
186 | 177 | <a href="{base}/{pkgId}/examples" class="icon-btn" use:tooltip={'Examples'}> |
187 | 178 | <Icon name="play" size={14} /> |
188 | 179 | </a> |
189 | 180 | {/if} |
190 | | - {#if roadmapFlags[pkgId]} |
| 181 | + {#if packageFlags[pkgId].hasRoadmap} |
191 | 182 | <a href="{base}/{pkgId}/roadmap" class="icon-btn" use:tooltip={'Roadmap'}> |
192 | 183 | <Icon name="roadmap" size={14} /> |
193 | 184 | </a> |
|
0 commit comments