Make post header row generic: admin cog + container_nav in shared helper
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m31s
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m31s
Move admin cog generation and container_nav border wrapping from blog-specific wrapper into shared post_header_html so all services render identical post header rows. Blog, events, cart all delegate to the shared helper now. Cart admin pages fetch container_nav_html via fragments. Village Hall always links to blog. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -39,9 +39,32 @@ def _ensure_post_ctx(ctx: dict, page_post: Any) -> dict:
|
||||
return ctx
|
||||
|
||||
|
||||
def _post_header_html(ctx: dict, page_post: Any, *, oob: bool = False) -> str:
|
||||
async def _ensure_container_nav(ctx: dict) -> dict:
|
||||
"""Fetch container_nav_html if not already present (for post header row)."""
|
||||
if ctx.get("container_nav_html"):
|
||||
return ctx
|
||||
post = ctx.get("post") or {}
|
||||
post_id = post.get("id")
|
||||
slug = post.get("slug", "")
|
||||
if not post_id:
|
||||
return ctx
|
||||
from shared.infrastructure.fragments import fetch_fragments
|
||||
nav_params = {
|
||||
"container_type": "page",
|
||||
"container_id": str(post_id),
|
||||
"post_slug": slug,
|
||||
}
|
||||
events_nav, market_nav = await fetch_fragments([
|
||||
("events", "container-nav", nav_params),
|
||||
("market", "container-nav", nav_params),
|
||||
], required=False)
|
||||
return {**ctx, "container_nav_html": events_nav + market_nav}
|
||||
|
||||
|
||||
async def _post_header_html(ctx: dict, page_post: Any, *, oob: bool = False) -> str:
|
||||
"""Build post-level header row from page_post DTO, using shared helper."""
|
||||
ctx = _ensure_post_ctx(ctx, page_post)
|
||||
ctx = await _ensure_container_nav(ctx)
|
||||
return _shared_post_header_html(ctx, oob=oob)
|
||||
|
||||
|
||||
@@ -794,7 +817,7 @@ async def render_cart_admin_page(ctx: dict, page_post: Any) -> str:
|
||||
"""Full page: cart page admin overview."""
|
||||
content = _cart_admin_main_panel_html(ctx)
|
||||
root_hdr = root_header_html(ctx)
|
||||
post_hdr = _post_header_html(ctx, page_post)
|
||||
post_hdr = await _post_header_html(ctx, page_post)
|
||||
admin_hdr = _cart_page_admin_header_html(ctx, page_post)
|
||||
return full_page(ctx, header_rows_html=root_hdr + post_hdr + admin_hdr, content_html=content)
|
||||
|
||||
@@ -814,7 +837,7 @@ async def render_cart_payments_page(ctx: dict, page_post: Any) -> str:
|
||||
"""Full page: payments config."""
|
||||
content = _cart_payments_main_panel_html(ctx)
|
||||
root_hdr = root_header_html(ctx)
|
||||
post_hdr = _post_header_html(ctx, page_post)
|
||||
post_hdr = await _post_header_html(ctx, page_post)
|
||||
admin_hdr = _cart_page_admin_header_html(ctx, page_post, selected="payments")
|
||||
return full_page(ctx, header_rows_html=root_hdr + post_hdr + admin_hdr, content_html=content)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user