site: rename nav link type
This commit is contained in:
committed by
Johannes Kirschbauer
parent
bf46ea1ebb
commit
7f0e6d74e6
@@ -1,9 +1,9 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import type { NormalizedNavLink } from "./utils";
|
import type { NavLink } from "./utils";
|
||||||
let { children, data } = $props();
|
let { children, data } = $props();
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#snippet navLinkSnippet(navLink: NormalizedNavLink)}
|
{#snippet navLinkSnippet(navLink: NavLink)}
|
||||||
{#if "items" in navLink}
|
{#if "items" in navLink}
|
||||||
<li>
|
<li>
|
||||||
<details open={!navLink.collapsed}>
|
<details open={!navLink.collapsed}>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import type { NavLink } from "./utils";
|
import type { RawNavLink } from "./utils";
|
||||||
|
|
||||||
export const navLinks: NavLink[] = [
|
export const navLinks: RawNavLink[] = [
|
||||||
{
|
{
|
||||||
label: "Getting Started",
|
label: "Getting Started",
|
||||||
items: ["getting-started/add-machines"],
|
items: ["getting-started/add-machines"],
|
||||||
|
|||||||
@@ -8,61 +8,59 @@ export const articles = Object.fromEntries(
|
|||||||
).map(([key, fn]) => [key.slice("./".length, -".md".length), fn]),
|
).map(([key, fn]) => [key.slice("./".length, -".md".length), fn]),
|
||||||
);
|
);
|
||||||
|
|
||||||
export type NavLink =
|
export type RawNavLink =
|
||||||
| string
|
| string
|
||||||
| {
|
| {
|
||||||
label: string;
|
label: string;
|
||||||
items: NavLink[];
|
items: RawNavLink[];
|
||||||
collapsed?: boolean;
|
collapsed?: boolean;
|
||||||
badge?: Badge;
|
badge?: RawBadge;
|
||||||
}
|
}
|
||||||
| {
|
| {
|
||||||
label: string;
|
label: string;
|
||||||
autogenerate: { directory: string };
|
autogenerate: { directory: string };
|
||||||
collapsed?: boolean;
|
collapsed?: boolean;
|
||||||
badge?: Badge;
|
badge?: RawBadge;
|
||||||
}
|
}
|
||||||
| {
|
| {
|
||||||
label?: string;
|
label?: string;
|
||||||
slug: string;
|
slug: string;
|
||||||
badge?: Badge;
|
badge?: RawBadge;
|
||||||
}
|
}
|
||||||
| {
|
| {
|
||||||
label: string;
|
label: string;
|
||||||
link: string;
|
link: string;
|
||||||
badge?: Badge;
|
badge?: RawBadge;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type NormalizedNavLink =
|
export type NavLink =
|
||||||
| {
|
| {
|
||||||
label: string;
|
label: string;
|
||||||
items: NormalizedNavLink[];
|
items: NavLink[];
|
||||||
collapsed: boolean;
|
collapsed: boolean;
|
||||||
badge?: NormalizedBadge;
|
badge?: Badge;
|
||||||
}
|
}
|
||||||
| {
|
| {
|
||||||
label: string;
|
label: string;
|
||||||
link: string;
|
link: string;
|
||||||
badge?: NormalizedBadge;
|
badge?: Badge;
|
||||||
external: boolean;
|
external: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type Badge = string | NormalizedBadge;
|
export type RawBadge = string | Badge;
|
||||||
|
|
||||||
export type NormalizedBadge = {
|
export type Badge = {
|
||||||
text: string;
|
text: string;
|
||||||
variant: "caution" | "normal";
|
variant: "caution" | "normal";
|
||||||
};
|
};
|
||||||
|
|
||||||
export async function normalizeNavLinks(
|
export async function normalizeNavLinks(
|
||||||
navLinks: NavLink[],
|
navLinks: RawNavLink[],
|
||||||
): Promise<NormalizedNavLink[]> {
|
): Promise<NavLink[]> {
|
||||||
return await Promise.all(navLinks.map(normalizeNavLink));
|
return await Promise.all(navLinks.map(normalizeNavLink));
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function normalizeNavLink(
|
export async function normalizeNavLink(navLink: RawNavLink): Promise<NavLink> {
|
||||||
navLink: NavLink,
|
|
||||||
): Promise<NormalizedNavLink> {
|
|
||||||
if (typeof navLink === "string") {
|
if (typeof navLink === "string") {
|
||||||
const article = articles[navLink];
|
const article = articles[navLink];
|
||||||
if (!article) {
|
if (!article) {
|
||||||
@@ -122,7 +120,7 @@ export async function normalizeNavLink(
|
|||||||
}
|
}
|
||||||
if (titleMissing) throw new Error("Aborting due to errors.");
|
if (titleMissing) throw new Error("Aborting due to errors.");
|
||||||
|
|
||||||
const items: NormalizedNavLink[] = await Promise.all(
|
const items: NavLink[] = await Promise.all(
|
||||||
frontmatters
|
frontmatters
|
||||||
.sort((a, b) => {
|
.sort((a, b) => {
|
||||||
const orderA = a.frontmatter.order;
|
const orderA = a.frontmatter.order;
|
||||||
@@ -162,9 +160,7 @@ export async function normalizeNavLink(
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export function normalizeBadge(
|
export function normalizeBadge(badge: RawBadge | undefined): Badge | undefined {
|
||||||
badge: Badge | undefined,
|
|
||||||
): NormalizedBadge | undefined {
|
|
||||||
if (!badge) {
|
if (!badge) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user