mirror of
https://github.com/penpot/penpot.git
synced 2025-06-07 08:21:37 +02:00
🐛 Fix text shape impl (unexpected exception on prod build).
This commit is contained in:
parent
88763d236a
commit
3a4ef73f06
1 changed files with 39 additions and 37 deletions
|
@ -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]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue