;; Account-page fragment handler ;; returns: sx ;; ;; Renders tickets or bookings panel for the account dashboard. ;; slug=tickets → ticket list; slug=bookings → booking list. (defhandler account-page (&key slug user_id) (let ((uid (parse-int (or user_id "0")))) (when (> uid 0) (cond (= slug "tickets") (let ((tickets (service "calendar" "user-tickets" :user-id uid))) (~fragments/frag-tickets-panel :items (if (empty? tickets) (~shared:misc/empty-state :message "No tickets yet." :cls "text-sm text-stone-500") (~fragments/frag-tickets-list :items (<> (map (fn (t) (~fragments/frag-ticket-item :href (app-url "events" (str "/tickets/" (get t "code") "/")) :entry-name (get t "entry_name") :date-str (format-date (get t "entry_start_at") "%d %b %Y, %H:%M") :calendar-name (when (get t "calendar_name") (span (str "\u00b7 " (get t "calendar_name")))) :type-name (when (get t "ticket_type_name") (span (str "\u00b7 " (get t "ticket_type_name")))) :badge (~shared:controls/status-pill :status (or (get t "state") "")))) tickets)))))) (= slug "bookings") (let ((bookings (service "calendar" "user-bookings" :user-id uid))) (~fragments/frag-bookings-panel :items (if (empty? bookings) (~shared:misc/empty-state :message "No bookings yet." :cls "text-sm text-stone-500") (~fragments/frag-bookings-list :items (<> (map (fn (b) (~fragments/frag-booking-item :name (get b "name") :date-str (str (format-date (get b "start_at") "%d %b %Y, %H:%M") (if (get b "end_at") (str " \u2013 " (format-date (get b "end_at") "%H:%M")) "")) :calendar-name (when (get b "calendar_name") (span (str "\u00b7 " (get b "calendar_name")))) :cost-str (when (get b "cost") (span (str "\u00b7 \u00a3" (get b "cost")))) :badge (~shared:controls/status-pill :status (or (get b "state") "")))) bookings))))))))))