datastar/site/static/code_snippets/how_tos/load_more.clojuresnippet

31 lines
944 B
Plaintext

(require
'[starfederation.datastar.clojure.api :as d*]
'[starfederation.datastar.clojure.adapter.http-kit :refer [->sse-response on-open]]
'[some.hiccup.library :refer [html]]
'[some.json.library :refer [read-json-str write-json-str]]))
(def max-offset 5)
(defn handler [ring-request]
(->sse-response ring-request
{on-open
(fn [sse]
(let [d*-signals (-> ring-request d*/get-signals read-json-str)
offset (get d*-signals "offset")
limit 1
new-offset (+ offset limit)]
(d*/merge-fragment! sse
(html [:div "Item " new-offset])
{d*/selector "#list"
d*/merge-mode d*/mm-append})
(if (< new-offset max-offset)
(d*/merge-signals! sse (write-json-str {"offset" new-offset}))
(d*/remove-fragment! sse "#load-more"))
(d*/close-sse! sse)))}))