fix page settings section and blocks not showing in editor
All checks were successful
deploy / deploy (push) Successful in 1m16s

Two bugs fixed:

1. Page Settings section wasn't appearing for system pages because
   Defaults.for_slug didn't return all required fields (type,
   meta_description, published, etc). Also changed page_renderer
   to use bracket notation for safer field access.

2. Blocks weren't loading when navigating directly to ?edit=page
   because the PageEditorHook's handle_params ran before Shop.Page
   assigned @page. Added pending page mode mechanism: hook sets a
   flag when edit mode is requested but @page is nil, then Shop.Page
   calls maybe_enter_pending_page_mode after @page is assigned.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
jamey
2026-03-29 20:30:36 +01:00
parent 9a506357eb
commit 04ce28ca29
5 changed files with 44 additions and 13 deletions

View File

@@ -81,6 +81,21 @@ defmodule BerrypodWeb.PageEditorHook do
{:cont, socket}
end
@doc """
Called by Shop.Page after @page is assigned. If edit mode was requested via
URL but couldn't be entered because @page wasn't available yet, enters it now.
"""
def maybe_enter_pending_page_mode(socket) do
if socket.assigns[:editor_pending_page_mode] && socket.assigns[:page] &&
!socket.assigns.editing do
socket
|> assign(:editor_pending_page_mode, false)
|> enter_edit_mode()
else
socket
end
end
# ── handle_params: track current path and restore editor state ────
defp handle_editor_params(params, uri, socket) do
@@ -164,7 +179,8 @@ defmodule BerrypodWeb.PageEditorHook do
if socket.assigns[:page] do
enter_edit_mode(socket)
else
socket
# Page not yet loaded - mark that we need to enter edit mode when it is
assign(socket, :editor_pending_page_mode, true)
end
end
end