Adopt Step 7 language features across SX codebase
112 conversions across 19 .sx files using match, let-match, and pipe operators: match (17): type/value dispatch replacing cond/if chains - lib/vm.sx: HO form dispatch (for-each/map/filter/reduce/some/every?) - lib/tree-tools.sx: node-display, node-matches?, rename, count, replace, free-symbols - lib/types.sx: narrow-type, substitute-in-type, infer-type, resolve-type - web/engine.sx: default-trigger, resolve-target, classify-trigger - web/deps.sx: scan-refs-walk, scan-io-refs-walk let-match (89): dict destructuring replacing (get d "key") patterns - shared/page-functions.sx (20), blog/admin.sx (17), pub-api.sx (13) - events/ layouts/page/tickets/entries/forms (27 total) - specs-explorer.sx (7), federation/social.sx (3), lib/ small files (3) -> pipes (6): replacing triple-chained gets in lib/vm.sx - frame-closure → closure-code → code-bytecode chains Also: lib/vm.sx accessor upgrades (get vm "sp" → vm-sp vm throughout) 2650/2650 tests pass, zero regressions. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -159,91 +159,147 @@
|
||||
:btn (~page/tw-plus))))))
|
||||
|
||||
;; Entry card (list view) from data
|
||||
(defcomp ~entries/entry-card-from-data (&key entry-href name day-href
|
||||
page-badge-href page-badge-title cal-name
|
||||
date-str start-time end-time is-page-scoped
|
||||
cost has-ticket ticket-data)
|
||||
(defcomp
|
||||
~entries/entry-card-from-data
|
||||
(&key
|
||||
entry-href
|
||||
name
|
||||
day-href
|
||||
page-badge-href
|
||||
page-badge-title
|
||||
cal-name
|
||||
date-str
|
||||
start-time
|
||||
end-time
|
||||
is-page-scoped
|
||||
cost
|
||||
has-ticket
|
||||
ticket-data)
|
||||
(~entries/entry-card
|
||||
:title (if entry-href
|
||||
:title (if
|
||||
entry-href
|
||||
(~entries/entry-title-linked :href entry-href :name name)
|
||||
(~entries/entry-title-plain :name name))
|
||||
:badges (<>
|
||||
(when page-badge-title
|
||||
(~entries/entry-page-badge :href page-badge-href :title page-badge-title))
|
||||
(when cal-name
|
||||
(~entries/entry-cal-badge :name cal-name)))
|
||||
(when
|
||||
page-badge-title
|
||||
(~entries/entry-page-badge
|
||||
:href page-badge-href
|
||||
:title page-badge-title))
|
||||
(when cal-name (~entries/entry-cal-badge :name cal-name)))
|
||||
:time-parts (<>
|
||||
(when (and day-href (not is-page-scoped))
|
||||
(when
|
||||
(and day-href (not is-page-scoped))
|
||||
(~entries/entry-time-linked :href day-href :date-str date-str))
|
||||
(when (and (not day-href) (not is-page-scoped) date-str)
|
||||
(when
|
||||
(and (not day-href) (not is-page-scoped) date-str)
|
||||
(~entries/entry-time-plain :date-str date-str))
|
||||
start-time
|
||||
(when end-time (str " \u2013 " end-time)))
|
||||
(when end-time (str " – " end-time)))
|
||||
:cost (when cost (~entries/entry-cost :cost cost))
|
||||
:widget (when has-ticket
|
||||
(~entries/entry-widget-wrapper
|
||||
:widget (~entries/tw-widget-from-data
|
||||
:entry-id (get ticket-data "entry-id")
|
||||
:price (get ticket-data "price")
|
||||
:qty (get ticket-data "qty")
|
||||
:ticket-url (get ticket-data "ticket-url")
|
||||
:csrf (get ticket-data "csrf"))))))
|
||||
:widget (when
|
||||
has-ticket
|
||||
(let-match
|
||||
{:csrf csrf :entry-id entry-id :qty qty :price price :ticket-url ticket-url}
|
||||
ticket-data
|
||||
(~entries/entry-widget-wrapper
|
||||
:widget (~entries/tw-widget-from-data
|
||||
:entry-id entry-id
|
||||
:price price
|
||||
:qty qty
|
||||
:ticket-url ticket-url
|
||||
:csrf csrf))))))
|
||||
|
||||
;; Entry card (tile view) from data
|
||||
(defcomp ~entries/entry-card-tile-from-data (&key entry-href name day-href
|
||||
page-badge-href page-badge-title cal-name
|
||||
date-str time-str
|
||||
cost has-ticket ticket-data)
|
||||
(defcomp
|
||||
~entries/entry-card-tile-from-data
|
||||
(&key
|
||||
entry-href
|
||||
name
|
||||
day-href
|
||||
page-badge-href
|
||||
page-badge-title
|
||||
cal-name
|
||||
date-str
|
||||
time-str
|
||||
cost
|
||||
has-ticket
|
||||
ticket-data)
|
||||
(~entries/entry-card-tile
|
||||
:title (if entry-href
|
||||
:title (if
|
||||
entry-href
|
||||
(~entries/entry-title-tile-linked :href entry-href :name name)
|
||||
(~entries/entry-title-tile-plain :name name))
|
||||
:badges (<>
|
||||
(when page-badge-title
|
||||
(~entries/entry-page-badge :href page-badge-href :title page-badge-title))
|
||||
(when cal-name
|
||||
(~entries/entry-cal-badge :name cal-name)))
|
||||
(when
|
||||
page-badge-title
|
||||
(~entries/entry-page-badge
|
||||
:href page-badge-href
|
||||
:title page-badge-title))
|
||||
(when cal-name (~entries/entry-cal-badge :name cal-name)))
|
||||
:time time-str
|
||||
:cost (when cost (~entries/entry-cost :cost cost))
|
||||
:widget (when has-ticket
|
||||
(~entries/entry-tile-widget-wrapper
|
||||
:widget (~entries/tw-widget-from-data
|
||||
:entry-id (get ticket-data "entry-id")
|
||||
:price (get ticket-data "price")
|
||||
:qty (get ticket-data "qty")
|
||||
:ticket-url (get ticket-data "ticket-url")
|
||||
:csrf (get ticket-data "csrf"))))))
|
||||
:widget (when
|
||||
has-ticket
|
||||
(let-match
|
||||
{:csrf csrf :entry-id entry-id :qty qty :price price :ticket-url ticket-url}
|
||||
ticket-data
|
||||
(~entries/entry-tile-widget-wrapper
|
||||
:widget (~entries/tw-widget-from-data
|
||||
:entry-id entry-id
|
||||
:price price
|
||||
:qty qty
|
||||
:ticket-url ticket-url
|
||||
:csrf csrf))))))
|
||||
|
||||
;; Entry cards list (with date separators + sentinel) from data
|
||||
(defcomp ~entries/entry-cards-from-data (&key items view page has-more next-url)
|
||||
(defcomp
|
||||
~entries/entry-cards-from-data
|
||||
(&key items view page has-more next-url)
|
||||
(<>
|
||||
(map (lambda (item)
|
||||
(if (get item "is-separator")
|
||||
(~entries/date-separator :date-str (get item "date-str"))
|
||||
(if (= view "tile")
|
||||
(~entries/entry-card-tile-from-data
|
||||
:entry-href (get item "entry-href") :name (get item "name")
|
||||
:day-href (get item "day-href")
|
||||
:page-badge-href (get item "page-badge-href")
|
||||
:page-badge-title (get item "page-badge-title")
|
||||
:cal-name (get item "cal-name")
|
||||
:date-str (get item "date-str") :time-str (get item "time-str")
|
||||
:cost (get item "cost") :has-ticket (get item "has-ticket")
|
||||
:ticket-data (get item "ticket-data"))
|
||||
(~entries/entry-card-from-data
|
||||
:entry-href (get item "entry-href") :name (get item "name")
|
||||
:day-href (get item "day-href")
|
||||
:page-badge-href (get item "page-badge-href")
|
||||
:page-badge-title (get item "page-badge-title")
|
||||
:cal-name (get item "cal-name")
|
||||
:date-str (get item "date-str")
|
||||
:start-time (get item "start-time") :end-time (get item "end-time")
|
||||
:is-page-scoped (get item "is-page-scoped")
|
||||
:cost (get item "cost") :has-ticket (get item "has-ticket")
|
||||
:ticket-data (get item "ticket-data")))))
|
||||
(map
|
||||
(lambda
|
||||
(item)
|
||||
(let-match
|
||||
{:date-str date-str :time-str time-str :has-ticket has-ticket :is-separator is-separator :ticket-data ticket-data :day-href day-href :page-badge-title page-badge-title :entry-href entry-href :start-time start-time :end-time end-time :is-page-scoped is-page-scoped :page-badge-href page-badge-href :cal-name cal-name :cost cost :name name}
|
||||
item
|
||||
(if
|
||||
is-separator
|
||||
(~entries/date-separator :date-str date-str)
|
||||
(if
|
||||
(= view "tile")
|
||||
(~entries/entry-card-tile-from-data
|
||||
:entry-href entry-href
|
||||
:name name
|
||||
:day-href day-href
|
||||
:page-badge-href page-badge-href
|
||||
:page-badge-title page-badge-title
|
||||
:cal-name cal-name
|
||||
:date-str date-str
|
||||
:time-str time-str
|
||||
:cost cost
|
||||
:has-ticket has-ticket
|
||||
:ticket-data ticket-data)
|
||||
(~entries/entry-card-from-data
|
||||
:entry-href entry-href
|
||||
:name name
|
||||
:day-href day-href
|
||||
:page-badge-href page-badge-href
|
||||
:page-badge-title page-badge-title
|
||||
:cal-name cal-name
|
||||
:date-str date-str
|
||||
:start-time start-time
|
||||
:end-time end-time
|
||||
:is-page-scoped is-page-scoped
|
||||
:cost cost
|
||||
:has-ticket has-ticket
|
||||
:ticket-data ticket-data)))))
|
||||
(or items (list)))
|
||||
(when has-more
|
||||
(~shared:misc/sentinel-simple :id (str "sentinel-" page) :next-url next-url))))
|
||||
(when
|
||||
has-more
|
||||
(~shared:misc/sentinel-simple
|
||||
:id (str "sentinel-" page)
|
||||
:next-url next-url))))
|
||||
|
||||
;; Events main panel (toggle + cards grid) from data
|
||||
(defcomp ~entries/main-panel-from-data (&key toggle items view page has-more next-url)
|
||||
|
||||
Reference in New Issue
Block a user