Compare commits

...

1 Commits

Author SHA1 Message Date
giles
65c4989d08 Replace account widgets with fragment composition (Phase 5)
Account nav links and page panels (tickets, bookings) now fetched
as HTML fragments from events app instead of using widget registry.
All three widget registration functions are now no-ops.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 13:56:29 +00:00
4 changed files with 13 additions and 60 deletions

View File

@@ -0,0 +1 @@
{{ page_fragment_html | safe }}

View File

@@ -2,16 +2,6 @@
{% call links.link(account_url('/newsletters/'), hx_select_search, select_colours, True, aclass=styles.nav_button) %} {% call links.link(account_url('/newsletters/'), hx_select_search, select_colours, True, aclass=styles.nav_button) %}
newsletters newsletters
{% endcall %} {% endcall %}
{% for link in account_nav_links %} {% if account_nav_html %}
{% if link.external %} {{ account_nav_html | safe }}
<div class="relative nav-group"> {% endif %}
<a href="{{ link.href_fn() }}" class="{{styles.nav_button}}" data-hx-disable>
{{ link.label }}
</a>
</div>
{% else %}
{% call links.link(link.href_fn(), hx_select_search, select_colours, True, aclass=styles.nav_button) %}
{{ link.label }}
{% endcall %}
{% endif %}
{% endfor %}

View File

@@ -1,43 +1,10 @@
"""Calendar-domain widgets: account pages (tickets & bookings). """Calendar-domain widgets.
Container nav and card widgets have been replaced by fragments All calendar widgets have been replaced by fragments
(events app serves them at /internal/fragments/). (events app serves them at /internal/fragments/).
""" """
from __future__ import annotations from __future__ import annotations
from shared.contracts.widgets import AccountPageWidget
from shared.services.widget_registry import widgets
from shared.services.registry import services
# -- account pages: tickets & bookings ---------------------------------------
async def _tickets_context(session, *, user_id, **kw):
tickets = await services.calendar.user_tickets(session, user_id=user_id)
return {"tickets": tickets}
async def _bookings_context(session, *, user_id, **kw):
bookings = await services.calendar.user_bookings(session, user_id=user_id)
return {"bookings": bookings}
# -- registration entry point ------------------------------------------------
def register_calendar_widgets() -> None: def register_calendar_widgets() -> None:
widgets.add_account_page(AccountPageWidget( pass
domain="calendar",
slug="tickets",
label="tickets",
order=20,
context_fn=_tickets_context,
template="_types/auth/_tickets_panel.html",
))
widgets.add_account_page(AccountPageWidget(
domain="calendar",
slug="bookings",
label="bookings",
order=30,
context_fn=_bookings_context,
template="_types/auth/_bookings_panel.html",
))

View File

@@ -1,15 +1,10 @@
"""Cart-domain widgets: orders link on account page.""" """Cart-domain widgets.
from __future__ import annotations
from shared.contracts.widgets import AccountNavLink Account nav link has been replaced by fragments
from shared.services.widget_registry import widgets (cart app serves account-nav-item at /internal/fragments/).
from shared.infrastructure.urls import cart_url """
from __future__ import annotations
def register_cart_widgets() -> None: def register_cart_widgets() -> None:
widgets.add_account_link(AccountNavLink( pass
label="orders",
order=100,
href_fn=lambda: cart_url("/orders/"),
external=True,
))