fix page settings section and blocks not showing in editor
All checks were successful
deploy / deploy (push) Successful in 1m16s
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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user