From 2e4fbd577793c6c2eb899f9e5c425ba60258ecb5 Mon Sep 17 00:00:00 2001 From: giles Date: Sat, 28 Feb 2026 22:17:36 +0000 Subject: [PATCH] Remove extra cart header row from admin pages, use shared post header MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cart admin pages (admin overview, payments) now use the same header pattern as blog/market/events: root_header → post_header → admin_header. The domain name appears via app_label on the root header instead of a separate level-1 "cart" row. Co-Authored-By: Claude Opus 4.6 --- cart/sexp/sexp_components.py | 57 +++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/cart/sexp/sexp_components.py b/cart/sexp/sexp_components.py index 991dab9..823b212 100644 --- a/cart/sexp/sexp_components.py +++ b/cart/sexp/sexp_components.py @@ -13,6 +13,7 @@ from markupsafe import escape from shared.sexp.jinja_bridge import render, load_service_components from shared.sexp.helpers import ( call_url, root_header_html, post_admin_header_html, + post_header_html as _shared_post_header_html, search_desktop_html, search_mobile_html, full_page, oob_page, ) from shared.infrastructure.urls import market_product_url, cart_url @@ -25,6 +26,25 @@ load_service_components(os.path.dirname(os.path.dirname(__file__))) # Header helpers # --------------------------------------------------------------------------- +def _ensure_post_ctx(ctx: dict, page_post: Any) -> dict: + """Ensure ctx has a 'post' dict from page_post DTO (for shared post_header_html).""" + if ctx.get("post") or not page_post: + return ctx + ctx = {**ctx, "post": { + "id": getattr(page_post, "id", None), + "slug": getattr(page_post, "slug", ""), + "title": getattr(page_post, "title", ""), + "feature_image": getattr(page_post, "feature_image", None), + }} + return ctx + + +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) + return _shared_post_header_html(ctx, oob=oob) + + def _cart_header_html(ctx: dict, *, oob: bool = False) -> str: """Build the cart section header row.""" return render( @@ -727,6 +747,7 @@ def _cart_page_admin_header_html(ctx: dict, page_post: Any, *, oob: bool = False selected: str = "") -> str: """Build the page-level admin header row — delegates to shared helper.""" slug = page_post.slug if page_post else "" + ctx = _ensure_post_ctx(ctx, page_post) return post_admin_header_html(ctx, slug, oob=oob, selected=selected) @@ -772,24 +793,16 @@ def _cart_payments_main_panel_html(ctx: dict) -> str: 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) - hdr = root_header_html(ctx) - child = _page_cart_header_html(ctx, page_post) + _cart_page_admin_header_html(ctx, page_post) - hdr += render("cart-header-child-nested", - outer_html=_cart_header_html(ctx), inner_html=child) - return full_page(ctx, header_rows_html=hdr, content_html=content) + root_hdr = root_header_html(ctx) + post_hdr = _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) async def render_cart_admin_oob(ctx: dict, page_post: Any) -> str: """OOB response: cart page admin overview.""" content = _cart_admin_main_panel_html(ctx) - oobs = ( - _cart_page_admin_header_html(ctx, page_post, oob=True) - + render("cart-header-child-oob", - inner_html=_page_cart_header_html(ctx, page_post) - + _cart_page_admin_header_html(ctx, page_post)) - + _cart_header_html(ctx, oob=True) - + root_header_html(ctx, oob=True) - ) + oobs = _cart_page_admin_header_html(ctx, page_post, oob=True) return oob_page(ctx, oobs_html=oobs, content_html=content) @@ -800,26 +813,16 @@ async def render_cart_admin_oob(ctx: dict, page_post: Any) -> str: async def render_cart_payments_page(ctx: dict, page_post: Any) -> str: """Full page: payments config.""" content = _cart_payments_main_panel_html(ctx) - hdr = root_header_html(ctx) + root_hdr = root_header_html(ctx) + post_hdr = _post_header_html(ctx, page_post) admin_hdr = _cart_page_admin_header_html(ctx, page_post, selected="payments") - child = _page_cart_header_html(ctx, page_post) + admin_hdr - hdr += render("cart-header-child-nested", - outer_html=_cart_header_html(ctx), inner_html=child) - return full_page(ctx, header_rows_html=hdr, content_html=content) + return full_page(ctx, header_rows_html=root_hdr + post_hdr + admin_hdr, content_html=content) async def render_cart_payments_oob(ctx: dict, page_post: Any) -> str: """OOB response: payments config.""" content = _cart_payments_main_panel_html(ctx) - admin_hdr = _cart_page_admin_header_html(ctx, page_post, selected="payments") - oobs = ( - _cart_page_admin_header_html(ctx, page_post, oob=True, selected="payments") - + render("cart-header-child-oob", - inner_html=_page_cart_header_html(ctx, page_post) - + admin_hdr) - + _cart_header_html(ctx, oob=True) - + root_header_html(ctx, oob=True) - ) + oobs = _cart_page_admin_header_html(ctx, page_post, oob=True, selected="payments") return oob_page(ctx, oobs_html=oobs, content_html=content)