🐛 Fix text shape impl (unexpected exception on prod build).

This commit is contained in:
Andrey Antukh 2020-09-14 12:59:00 +02:00 committed by Alonso Torres
parent 88763d236a
commit 3a4ef73f06

View file

@ -111,54 +111,56 @@
(p/all))] (p/all))]
(reduce (fn [text [url data]] (str/replace text url data)) font-text url-to-data))) (reduce (fn [text [url data]] (str/replace text url data)) font-text url-to-data)))
(defn- render-text-node (mf/defc text-node
([node] (render-text-node 0 node)) [{:keys [node index] :as props}]
([index {:keys [type text children] :as node}] (let [embed-resources? (mf/use-ctx muc/embed-ctx)
(let [embed-resources? (mf/use-ctx muc/embed-ctx) embeded-fonts (mf/use-state nil)
embeded-fonts (mf/use-state nil)] {:keys [type text children]} node]
(mf/use-effect
(mf/deps node)
(fn []
(when (and embed-resources? (= type "root"))
(let [font-to-embed (get-all-fonts node)
embeded (map embed-font font-to-embed)]
(-> (p/all embeded)
(p/then (fn [result] (reset! embeded-fonts (str/join "\n" result)))))))))
(mf/html (mf/use-effect
(if (string? text) (mf/deps node)
(let [style (generate-text-styles (clj->js node))] (fn []
[:span {:style style :key index} text]) (when (and embed-resources? (= type "root"))
(let [children (map-indexed render-text-node children)] (let [font-to-embed (get-all-fonts node)
(case type embeded (map embed-font font-to-embed)]
"root" (-> (p/all embeded)
(let [style (generate-root-styles (clj->js node))] (p/then (fn [result] (reset! embeded-fonts (str/join "\n" result)))))))))
[:div.root.rich-text
{:key index
:style style
:xmlns "http://www.w3.org/1999/xhtml"}
(when (not (nil? @embeded-fonts))
[:style @embeded-fonts])
children])
"paragraph-set" (if (string? text)
(let [style #js {:display "inline-block" (let [style (generate-text-styles (clj->js node))]
:width "100%"}] [:span {:style style :key index} text])
(let [children (map-indexed (fn [index node]
(mf/element text-node {:index index :node node :key index}))
children)]
(case type
"root"
(let [style (generate-root-styles (clj->js node))]
[:div.root.rich-text
{:key index
:style style
:xmlns "http://www.w3.org/1999/xhtml"}
(when (not (nil? @embeded-fonts))
[:style @embeded-fonts])
children])
"paragraph-set"
(let [style #js {:display "inline-block"
:width "100%"}]
[:div.paragraphs {:key index :style style} children]) [:div.paragraphs {:key index :style style} children])
"paragraph" "paragraph"
(let [style (generate-paragraph-styles (clj->js node))] (let [style (generate-paragraph-styles (clj->js node))]
[:p {:key index :style style} children]) [:p {:key index :style style} children])
nil))))))) nil)))))
(mf/defc text-content (mf/defc text-content
{::mf/wrap-props false {::mf/wrap-props false
::mf/wrap [mf/memo]} ::mf/wrap [mf/memo]}
[props] [props]
(let [root (obj/get props "content")] (let [root (obj/get props "content")]
(render-text-node root))) [:& text-node {:index 0 :node root}]))
(defn- retrieve-colors (defn- retrieve-colors
[shape] [shape]