Skip to content

Commit 390298d

Browse files
committed
Wagtail menus
1 parent 6f6acbe commit 390298d

File tree

8 files changed

+131
-10
lines changed

8 files changed

+131
-10
lines changed

backend/api/cms/menu/__init__.py

Whitespace-only changes.

backend/api/cms/menu/queries/__init__.py

Whitespace-only changes.
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
from api.cms.utils import get_site_by_host
2+
from api.context import Context
3+
import strawberry
4+
5+
from wagtailmenus.models import MainMenu, FlatMenu
6+
from api.cms.menu.types import CMSMenu
7+
8+
9+
@strawberry.field
10+
def cms_menu(
11+
info: strawberry.Info[Context],
12+
hostname: str,
13+
handle: str,
14+
) -> CMSMenu | None:
15+
site = get_site_by_host(hostname)
16+
17+
if not site:
18+
return None
19+
20+
if handle == "main":
21+
menu = MainMenu.get_for_site(site)
22+
else:
23+
menu = FlatMenu.get_for_site(site=site, handle=handle)
24+
25+
if not menu:
26+
return None
27+
28+
return CMSMenu.from_model(menu)

backend/api/cms/menu/types.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from typing import Self
2+
from strawberry import ID
3+
import strawberry
4+
from wagtailmenus.models import MainMenu, FlatMenu
5+
6+
7+
@strawberry.type
8+
class CMSMenuItem:
9+
id: ID
10+
title: str
11+
12+
@classmethod
13+
def from_model(cls, item) -> Self:
14+
return cls(
15+
id=item.id,
16+
title=item.title,
17+
)
18+
19+
20+
@strawberry.type
21+
class CMSMenu:
22+
id: ID
23+
title: str
24+
items: list[CMSMenuItem]
25+
26+
@classmethod
27+
def from_model(cls, menu: MainMenu | FlatMenu) -> Self:
28+
title = menu.title if isinstance(menu, FlatMenu) else "Main"
29+
30+
return cls(
31+
id=menu.id,
32+
title=title,
33+
items=[CMSMenuItem.from_model(item) for item in menu.items],
34+
)

backend/api/cms/schema.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
from api.cms.page.queries.cms_pages import cms_pages
66
from api.cms.news.queries.news_articles import news_articles
77
from api.cms.news.queries.news_article import news_article
8+
from api.cms.menu.queries.cms_menu import cms_menu
89

910
CMSQuery = create_type(
10-
"CMSQuery", fields=[cms_page, cms_pages, news_articles, news_article, page_preview]
11+
"CMSQuery",
12+
fields=[cms_page, cms_pages, news_articles, news_article, page_preview, cms_menu],
1113
)

backend/pycon/settings/base.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
"modelcluster",
7676
"taggit",
7777
"wagtail_headless_preview",
78+
"wagtailmenus",
7879
# --
7980
"schedule.apps.ScheduleConfig",
8081
"custom_admin",
@@ -180,6 +181,7 @@
180181
"django.contrib.auth.context_processors.auth",
181182
"django.contrib.messages.context_processors.messages",
182183
"custom_admin.context_processors.admin_settings",
184+
"wagtailmenus.context_processors.wagtailmenus",
183185
],
184186
"builtins": [
185187
"custom_admin.templatetags.to_json_for_prop",

backend/pyproject.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ dependencies = [
8282
"stripe==10.5.0",
8383
"djangorestframework==3.15.2",
8484
"l18n<2022.0,>=2021.3",
85-
"wagtail==6.2.2",
85+
"wagtail==7.0.1",
8686
"wagtail-localize==1.10",
8787
"celery==5.4.0",
8888
"wagtail-headless-preview==0.8.0",
@@ -104,6 +104,7 @@ dependencies = [
104104
"weasyprint>=63.1",
105105
"opencv-python-headless>=4.10.0.84",
106106
"psycopg[c]>=3.2.3",
107+
"wagtailmenus>=4.0.2",
107108
]
108109
name = "backend"
109110
version = "0.1.0"

backend/uv.lock

Lines changed: 62 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)