Phase 1: Wire 16 events routes to existing sx render functions - slot, slots, ticket_types, ticket_type, calendar_entries, calendar_entry, calendar_entry/admin Phase 2: Orders checkout return (2 calls) - New orders/sx/checkout.sx with return page components - New render_checkout_return_page() in orders/sx/sx_components.py Phase 3: Blog menu items (3 calls) - New blog/sx/menu_items.sx with search result components - New render_menu_item_form() and render_page_search_results() in blog/sx/sx_components.py Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
27 lines
1.3 KiB
Plaintext
27 lines
1.3 KiB
Plaintext
;; Menu item form and page search components
|
|
|
|
(defcomp ~page-search-item (&key id title slug feature-image)
|
|
(div :class "flex items-center gap-3 p-3 hover:bg-stone-50 cursor-pointer border-b last:border-b-0"
|
|
:data-page-id id :data-page-title title :data-page-slug slug
|
|
:data-page-image (or feature-image "")
|
|
(if feature-image
|
|
(img :src feature-image :alt title :class "w-10 h-10 rounded-full object-cover flex-shrink-0")
|
|
(div :class "w-10 h-10 rounded-full bg-stone-200 flex-shrink-0"))
|
|
(div :class "flex-1 min-w-0"
|
|
(div :class "font-medium truncate" title)
|
|
(div :class "text-xs text-stone-500 truncate" slug))))
|
|
|
|
(defcomp ~page-search-results (&key items sentinel)
|
|
(div :class "border border-stone-200 rounded-md max-h-64 overflow-y-auto"
|
|
items sentinel))
|
|
|
|
(defcomp ~page-search-sentinel (&key url query next-page)
|
|
(div :sx-get url :sx-trigger "intersect once" :sx-swap "outerHTML"
|
|
:sx-vals (str "{\"q\": \"" query "\", \"page\": " next-page "}")
|
|
:class "p-3 text-center text-sm text-stone-400"
|
|
(i :class "fa fa-spinner fa-spin") " Loading more..."))
|
|
|
|
(defcomp ~page-search-empty (&key query)
|
|
(div :class "p-3 text-center text-stone-400 border border-stone-200 rounded-md"
|
|
(str "No pages found matching \"" query "\"")))
|