Prepare menu for website

This commit is contained in:
itsfinniii
2026-04-19 21:58:30 +02:00
parent 6d4a62fae7
commit 915879beac
3 changed files with 94 additions and 0 deletions

View File

@@ -0,0 +1,39 @@
import { createDirectusConnection } from "@/lib/directus";
import { print } from "graphql";
import getMenuQuery from "@/graphql/menu/getMenu.graphql";
export async function getMenu(): Promise<Menu> {
const client = await createDirectusConnection();
const result = await client.query(print(getMenuQuery));
const menuRecord = result['Menu'];
let menu: Menu = {
id: menuRecord['id'],
items: []
};
menuRecord['items'].forEach((menuItem: any) => {
if (menuItem['collection'] === "Menu_Column") {
let menuColumnItem: MenuColumn = {
id: menuItem['item']['id'],
type: "Column",
title: menuItem['item']['title'],
links: []
};
menuItem['item']['links'].forEach((menuItemLink: any) => {
menuColumnItem.links.push({
id: menuItemLink['id'],
type: "Link",
text: menuItemLink['text'],
url: menuItemLink['url']
});
});
menu.items.push(menuColumnItem);
}
});
return menu;
}

View File

@@ -0,0 +1,35 @@
query getMenu {
Menu {
id,
date_created,
date_updated,
items {
id,
item {
...on Menu_Column {
__typename,
id,
date_created,
date_updated,
title,
links {
id,
date_created,
date_updated,
text,
url
}
}
...on Menu_Link {
__typename,
id,
date_created,
date_updated,
text,
url
}
}
}
}
}

20
astro/src/types/menu/menu.d.ts vendored Normal file
View File

@@ -0,0 +1,20 @@
type Menu = {
id: string;
items: MenuColumn[];
}
type MenuColumn = {
type: "Column";
id: string;
title: string;
links: MenuLink[];
}
type MenuLink = {
type: "Link";
id: string;
text: string;
url: string;
}