Move market composition from Python to .sx defcomps (Phase 3)
Python sxc/pages/ functions no longer build nested sx_call chains or reference leaf component names. Instead they extract data (URLs, prices, CSRF, cart state) and call a single top-level composition defcomp with pure data values. The .sx defcomps handle all component-to-component wiring, iteration (map), and conditional rendering. New .sx composition defcomps: - headers.sx: ~market-header-from-data, ~market-desktop-nav-from-data, ~market-product-header-from-data, ~market-product-admin-header-from-data - prices.sx: ~market-prices-header-from-data, ~market-card-price-from-data - navigation.sx: ~market-mobile-nav-from-data - cards.sx: ~market-product-cards-content, ~market-card-from-data, ~market-cards-content, ~market-landing-from-data - detail.sx: ~market-product-detail-from-data, ~market-detail-gallery-from-data, ~market-detail-info-from-data - meta.sx: ~market-product-meta-from-data - filters.sx: ~market-desktop-filter-from-data, ~market-mobile-chips-from-data, ~market-mobile-filter-content-from-data, plus 6 sub-composition defcomps Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -32,3 +32,36 @@
|
||||
|
||||
(defcomp ~market-prices-row (&key inner)
|
||||
(div :class "flex flex-row items-center justify-between md:gap-2 md:px-2" inner))
|
||||
|
||||
|
||||
;; ---------------------------------------------------------------------------
|
||||
;; Composition: prices header + cart button from data
|
||||
;; ---------------------------------------------------------------------------
|
||||
|
||||
(defcomp ~market-prices-header-from-data (&key cart-id cart-action csrf quantity cart-href
|
||||
sp-val sp-str rp-val rp-str rrp-str)
|
||||
(~market-prices-row :inner
|
||||
(<>
|
||||
(if quantity
|
||||
(~market-cart-add-quantity :cart-id cart-id :action cart-action :csrf csrf
|
||||
:minus-val (str (- quantity 1)) :plus-val (str (+ quantity 1))
|
||||
:quantity (str quantity) :cart-href cart-href)
|
||||
(~market-cart-add-empty :cart-id cart-id :action cart-action :csrf csrf))
|
||||
(when sp-val
|
||||
(<> (~market-header-price-special-label)
|
||||
(~market-header-price-special :price sp-str)
|
||||
(when rp-val (~market-header-price-strike :price rp-str))))
|
||||
(when (and (not sp-val) rp-val)
|
||||
(<> (~market-header-price-regular-label)
|
||||
(~market-header-price-regular :price rp-str)))
|
||||
(when rrp-str (~market-header-rrp :rrp rrp-str)))))
|
||||
|
||||
;; Card price line from data (used in product cards)
|
||||
(defcomp ~market-card-price-from-data (&key sp-val sp-str rp-val rp-str)
|
||||
(~market-price-line :inner
|
||||
(<>
|
||||
(when sp-val
|
||||
(<> (~market-price-special :price sp-str)
|
||||
(when rp-val (~market-price-regular-strike :price rp-str))))
|
||||
(when (and (not sp-val) rp-val)
|
||||
(~market-price-regular :price rp-str)))))
|
||||
|
||||
Reference in New Issue
Block a user