mirror of
https://github.com/penpot/penpot.git
synced 2025-12-11 22:14:05 +01:00
✨ Use sm/coercer on app.render entry point
This commit is contained in:
@@ -299,6 +299,13 @@
|
|||||||
::explain explain}))))
|
::explain explain}))))
|
||||||
value))))
|
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
|
(defn check
|
||||||
"A helper intended to be used on assertions for validate/check the
|
"A helper intended to be used on assertions for validate/check the
|
||||||
schema over provided data. Raises an assertion exception.
|
schema over provided data. Raises an assertion exception.
|
||||||
|
|||||||
@@ -125,47 +125,40 @@
|
|||||||
[:embed {:optional true} :boolean]
|
[:embed {:optional true} :boolean]
|
||||||
[:skip-children {:optional true} :boolean]
|
[:skip-children {:optional true} :boolean]
|
||||||
[:object-id
|
[:object-id
|
||||||
[:or
|
[:or [::sm/set ::sm/uuid] ::sm/uuid]]])
|
||||||
::sm/uuid
|
|
||||||
::sm/coll-of-uuid]]])
|
|
||||||
|
|
||||||
(def ^:private render-objects-decoder
|
(def ^:private coerce-render-objects-params
|
||||||
(sm/lazy-decoder schema:render-objects
|
(sm/coercer schema:render-objects))
|
||||||
sm/string-transformer))
|
|
||||||
|
|
||||||
(def ^:private render-objects-validator
|
|
||||||
(sm/lazy-validator schema:render-objects))
|
|
||||||
|
|
||||||
(defn- render-objects
|
(defn- render-objects
|
||||||
[params]
|
[params]
|
||||||
(let [{:keys [file-id page-id embed share-id object-id skip-children] :as params} (render-objects-decoder params)]
|
(try
|
||||||
(if-not (render-objects-validator params)
|
(let [{:keys [file-id page-id embed share-id object-id skip-children] :as params}
|
||||||
(do
|
(coerce-render-objects-params params)]
|
||||||
(js/console.error "invalid arguments")
|
(st/emit! (fetch-objects-bundle :file-id file-id :page-id page-id :share-id share-id :object-id object-id))
|
||||||
(sm/pretty-explain schema:render-objects params)
|
(if (uuid? object-id)
|
||||||
nil)
|
(mf/html
|
||||||
|
[:& object-svg
|
||||||
|
{:file-id file-id
|
||||||
|
:page-id page-id
|
||||||
|
:share-id share-id
|
||||||
|
:object-id object-id
|
||||||
|
:embed embed
|
||||||
|
:skip-children skip-children}])
|
||||||
|
|
||||||
(do
|
(mf/html
|
||||||
(st/emit! (fetch-objects-bundle :file-id file-id :page-id page-id :share-id share-id :object-id object-id))
|
[:& objects-svg
|
||||||
|
{:file-id file-id
|
||||||
(if (uuid? object-id)
|
:page-id page-id
|
||||||
(mf/html
|
:share-id share-id
|
||||||
[:& object-svg
|
:object-ids (into #{} object-id)
|
||||||
{:file-id file-id
|
:embed embed
|
||||||
:page-id page-id
|
:skip-children skip-children}])))
|
||||||
:share-id share-id
|
(catch :default cause
|
||||||
:object-id object-id
|
(when-let [explain (-> cause ex-data ::sm/explain)]
|
||||||
:embed embed
|
(js/console.log "Unexpected error")
|
||||||
:skip-children skip-children}])
|
(js/console.log (sm/humanize-explain explain)))
|
||||||
|
(mf/html [:span "Unexpected error:" (ex-message cause)]))))
|
||||||
(mf/html
|
|
||||||
[:& objects-svg
|
|
||||||
{:file-id file-id
|
|
||||||
:page-id page-id
|
|
||||||
:share-id share-id
|
|
||||||
:object-ids (into #{} object-id)
|
|
||||||
:embed embed
|
|
||||||
:skip-children skip-children}]))))))
|
|
||||||
|
|
||||||
;; ---- COMPONENTS SPRITE
|
;; ---- COMPONENTS SPRITE
|
||||||
|
|
||||||
@@ -242,39 +235,37 @@
|
|||||||
[:embed {:optional true} :boolean]
|
[:embed {:optional true} :boolean]
|
||||||
[:component-id {:optional true} ::sm/uuid]])
|
[:component-id {:optional true} ::sm/uuid]])
|
||||||
|
|
||||||
(def ^:private render-components-decoder
|
(def ^:private coerce-render-components-params
|
||||||
(sm/lazy-decoder schema:render-components
|
(sm/coercer schema:render-components))
|
||||||
sm/string-transformer))
|
|
||||||
|
|
||||||
(def ^:private render-components-validator
|
|
||||||
(sm/lazy-validator schema:render-components))
|
|
||||||
|
|
||||||
(defn render-components
|
(defn render-components
|
||||||
[params]
|
[params]
|
||||||
(let [{:keys [file-id component-id embed] :as params} (render-components-decoder params)]
|
(try
|
||||||
(if-not (render-components-validator params)
|
(let [{:keys [file-id component-id embed] :as params}
|
||||||
(do
|
(coerce-render-components-params params)]
|
||||||
(js/console.error "invalid arguments")
|
|
||||||
(sm/pretty-explain schema:render-components params)
|
|
||||||
nil)
|
|
||||||
|
|
||||||
(do
|
(st/emit! (ptk/reify ::initialize-render-components
|
||||||
(st/emit! (ptk/reify ::initialize-render-components
|
ptk/WatchEvent
|
||||||
ptk/WatchEvent
|
(watch [_ _ stream]
|
||||||
(watch [_ _ stream]
|
(rx/merge
|
||||||
(rx/merge
|
(rx/of (fetch-team :file-id file-id))
|
||||||
(rx/of (fetch-team :file-id file-id))
|
|
||||||
|
|
||||||
(->> stream
|
(->> stream
|
||||||
(rx/filter (ptk/type? ::team-fetched))
|
(rx/filter (ptk/type? ::team-fetched))
|
||||||
(rx/observe-on :async)
|
(rx/observe-on :async)
|
||||||
(rx/map (constantly params))
|
(rx/map (constantly params))
|
||||||
(rx/map fetch-components-bundle))))))
|
(rx/map fetch-components-bundle))))))
|
||||||
|
|
||||||
(mf/html
|
(mf/html
|
||||||
[:& components-svg
|
[:& components-svg
|
||||||
{:component-id component-id
|
{: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
|
;; SETUP
|
||||||
|
|||||||
Reference in New Issue
Block a user