Use sm/coercer on app.render entry point

This commit is contained in:
Andrey Antukh
2025-11-26 13:04:28 +01:00
parent 2f1b99fa53
commit adaf8be56d
2 changed files with 61 additions and 63 deletions

View File

@@ -299,6 +299,13 @@
::explain explain}))))
value))))
(defn coercer
[schema & {:as opts}]
(let [decode-fn (decoder schema json-transformer)
check-fn (check-fn schema opts)]
(fn [data]
(-> data decode-fn check-fn))))
(defn check
"A helper intended to be used on assertions for validate/check the
schema over provided data. Raises an assertion exception.

View File

@@ -125,29 +125,17 @@
[:embed {:optional true} :boolean]
[:skip-children {:optional true} :boolean]
[:object-id
[:or
::sm/uuid
::sm/coll-of-uuid]]])
[:or [::sm/set ::sm/uuid] ::sm/uuid]]])
(def ^:private render-objects-decoder
(sm/lazy-decoder schema:render-objects
sm/string-transformer))
(def ^:private render-objects-validator
(sm/lazy-validator schema:render-objects))
(def ^:private coerce-render-objects-params
(sm/coercer schema:render-objects))
(defn- render-objects
[params]
(let [{:keys [file-id page-id embed share-id object-id skip-children] :as params} (render-objects-decoder params)]
(if-not (render-objects-validator params)
(do
(js/console.error "invalid arguments")
(sm/pretty-explain schema:render-objects params)
nil)
(do
(try
(let [{:keys [file-id page-id embed share-id object-id skip-children] :as params}
(coerce-render-objects-params params)]
(st/emit! (fetch-objects-bundle :file-id file-id :page-id page-id :share-id share-id :object-id object-id))
(if (uuid? object-id)
(mf/html
[:& object-svg
@@ -165,7 +153,12 @@
:share-id share-id
:object-ids (into #{} object-id)
:embed embed
:skip-children skip-children}]))))))
:skip-children skip-children}])))
(catch :default cause
(when-let [explain (-> cause ex-data ::sm/explain)]
(js/console.log "Unexpected error")
(js/console.log (sm/humanize-explain explain)))
(mf/html [:span "Unexpected error:" (ex-message cause)]))))
;; ---- COMPONENTS SPRITE
@@ -242,23 +235,15 @@
[:embed {:optional true} :boolean]
[:component-id {:optional true} ::sm/uuid]])
(def ^:private render-components-decoder
(sm/lazy-decoder schema:render-components
sm/string-transformer))
(def ^:private render-components-validator
(sm/lazy-validator schema:render-components))
(def ^:private coerce-render-components-params
(sm/coercer schema:render-components))
(defn render-components
[params]
(let [{:keys [file-id component-id embed] :as params} (render-components-decoder params)]
(if-not (render-components-validator params)
(do
(js/console.error "invalid arguments")
(sm/pretty-explain schema:render-components params)
nil)
(try
(let [{:keys [file-id component-id embed] :as params}
(coerce-render-components-params params)]
(do
(st/emit! (ptk/reify ::initialize-render-components
ptk/WatchEvent
(watch [_ _ stream]
@@ -274,7 +259,13 @@
(mf/html
[:& components-svg
{:component-id component-id
:embed embed}])))))
:embed embed}]))
(catch :default cause
(when-let [explain (-> cause ex-data ::sm/explain)]
(js/console.log "Unexpected error")
(js/console.log (sm/humanize-explain explain)))
(mf/html [:span "Unexpected error:" (ex-message cause)]))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; SETUP