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