Prepare menu for website
This commit is contained in:
39
astro/src/content/menu/menu.ts
Normal file
39
astro/src/content/menu/menu.ts
Normal 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;
|
||||||
|
}
|
||||||
35
astro/src/graphql/menu/getMenu.graphql
Normal file
35
astro/src/graphql/menu/getMenu.graphql
Normal 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
20
astro/src/types/menu/menu.d.ts
vendored
Normal 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;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user