Skip to content

Commit 824be3d

Browse files
committed
Merge branch 'feat/immediate-placeholder-content' of github.com:fsbraun/djangocms-rest into feat/immediate-placeholder-content
2 parents 1ebc1fe + 91168d4 commit 824be3d

File tree

3 files changed

+30
-8
lines changed

3 files changed

+30
-8
lines changed

djangocms_rest/serializers/menus.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,19 @@ def get_children(self, obj: NavigationNode) -> list[dict]:
2828

2929
def to_representation(self, obj: NavigationNode) -> dict:
3030
"""Customize the base representation of the NavigationNode."""
31+
path = getattr(obj, "api_endpoint", "")
32+
api_endpoint = get_absolute_frontend_url(self.request, path) if path else ""
33+
if self.request._preview_mode:
34+
if "?" in api_endpoint:
35+
api_endpoint += "&preview=1"
36+
else:
37+
api_endpoint += "?preview=1"
3138
return {
3239
"namespace": getattr(obj, "namespace", None),
3340
"title": obj.title,
3441
"url": get_absolute_frontend_url(self.request, obj.url) or "",
35-
"api_endpoint": get_absolute_frontend_url(self.request, getattr(obj, "api_endpoint", None)) or "",
36-
"path": getattr(obj, "api_endpoint", ""),
42+
"api_endpoint": api_endpoint,
43+
"path": path,
3744
"visible": obj.visible,
3845
"selected": obj.selected or obj.attr.get("is_home", False) and getattr(self.request, "is_home", False),
3946
"attr": obj.attr,

djangocms_rest/serializers/pages.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ def get_base_representation(self, page_content: PageContent) -> dict:
4343
path = page_content.page.get_path(page_content.language)
4444
absolute_url = get_absolute_frontend_url(request, path)
4545
api_endpoint = get_absolute_frontend_url(request, page_content.page.get_api_endpoint(page_content.language))
46+
if self.is_preview:
47+
if "?" in api_endpoint:
48+
api_endpoint += "&preview=1"
49+
else:
50+
api_endpoint += "?preview=1"
4651
redirect = str(page_content.redirect or "")
4752
xframe_options = str(page_content.xframe_options or "")
4853
application_namespace = str(page_content.page.application_namespace or "")

djangocms_rest/views_base.py

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
from django.contrib.sites.shortcuts import get_current_site
44
from django.utils.functional import cached_property
5+
6+
from cms.toolbar.toolbar import CMSToolbar
7+
58
from rest_framework.generics import ListAPIView
69
from rest_framework.permissions import IsAdminUser
710
from rest_framework.views import APIView
@@ -65,12 +68,19 @@ def site(self):
6568
return site if site is not None else get_current_site(self.request)
6669

6770
def _preview_requested(self):
68-
preview_mode = "preview" in self.request.GET and self.request.GET.get("preview", "").lower() not in (
69-
"0",
70-
"false",
71-
)
72-
self.request.toolbar.preview_mode_active = preview_mode
73-
return preview_mode
71+
if not hasattr(self.request, "_preview_mode"):
72+
# Cache to not re-generate toolbar object for preview requests
73+
self.request._preview_mode = "preview" in self.request.GET and self.request.GET.get(
74+
"preview", ""
75+
).lower() not in (
76+
"0",
77+
"false",
78+
)
79+
if self.request._preview_mode:
80+
if not hasattr(self.request, "toolbar"): # Create toolbar if not present to mark preview mode
81+
self.request.toolbar = CMSToolbar(self.request)
82+
self.request.toolbar.preview_mode_active = True
83+
return self.request._preview_mode
7484

7585
@property
7686
def content_getter(self):

0 commit comments

Comments
 (0)