Files
mono/cart/sx/handlers/cart-mini.sx
giles 278ae3e8f6 Make SxExpr a str subclass, sx_call/render functions return SxExpr
SxExpr is now a str subclass so it works everywhere a plain string
does (join, isinstance, f-strings) while serialize() still emits it
unquoted. sx_call() and all internal render functions (_render_to_sx,
async_eval_to_sx, etc.) return SxExpr, eliminating the "forgot to
wrap" bug class that caused the sx_content leak and list serialization
bugs.

- Phase 0: SxExpr(str) with .source property, __add__/__radd__
- Phase 1: sx_call returns SxExpr (drop-in, all 200+ sites unchanged)
- Phase 2: async_eval_to_sx, async_eval_slot_to_sx, _render_to_sx,
  mobile_menu_sx return SxExpr; remove isinstance(str) workaround
- Phase 3: Remove ~150 redundant SxExpr() wrappings across 45 files
- Phase 4: serialize() docstring, handler return docs, ;; returns: sx

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 21:47:00 +00:00

18 lines
620 B
Plaintext

;; Cart cart-mini fragment handler
;; returns: sx
;;
;; Renders the cart icon with badge (or logo when empty).
(defhandler cart-mini (&key user_id session_id oob)
(let ((summary (service "cart" "cart-summary"
:user-id (when user_id (parse-int user_id))
:session-id session_id))
(count (+ (or (get summary "count") 0)
(or (get summary "calendar_count") 0)
(or (get summary "ticket_count") 0))))
(~cart-mini
:cart-count count
:blog-url (app-url "blog" "")
:cart-url (app-url "cart" "")
:oob (when oob oob))))