0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-03-14 08:41:48 -05:00

Fetch page data from backend (for thumbnails generation).

This commit is contained in:
Andrey Antukh 2020-05-11 08:09:37 +02:00 committed by Alonso Torres
parent 6a6ead0d63
commit 1e6ed35c77
2 changed files with 42 additions and 9 deletions

View file

@ -28,11 +28,12 @@
(mf/deps file) (mf/deps file)
(fn [] (fn []
(-> (wrk/ask! {:cmd :thumbnails/generate (-> (wrk/ask! {:cmd :thumbnails/generate
:data (:data file)}) :id (first (:pages file))
})
(rx/subscribe (fn [{:keys [svg fonts]}] (rx/subscribe (fn [{:keys [svg fonts]}]
(run! fonts/ensure-loaded! fonts) (run! fonts/ensure-loaded! fonts)
(let [node (mf/ref-val container)] (when-let [node (mf/ref-val container)]
(set! (.-innerHTML node) svg))))))) (set! (.-innerHTML ^js node) svg)))))))
[:div.grid-item-th {:ref container}])) [:div.grid-item-th {:ref container}]))
;; --- Grid Item ;; --- Grid Item

View file

@ -10,15 +10,47 @@
(ns uxbox.worker.thumbnails (ns uxbox.worker.thumbnails
(:require (:require
[rumext.alpha :as mf] [rumext.alpha :as mf]
[beicon.core :as rx]
[promesa.core :as p]
[uxbox.main.fonts :as fonts] [uxbox.main.fonts :as fonts]
[uxbox.main.exports :as exports] [uxbox.main.exports :as exports]
[uxbox.worker.impl :as impl] [uxbox.worker.impl :as impl]
[uxbox.util.http-api :as http]
["react-dom/server" :as rds])) ["react-dom/server" :as rds]))
(defn- handle-response
[response]
(cond
(http/success? response)
(rx/of (:body response))
(http/client-error? response)
(rx/throw (:body response))
:else
(rx/throw {:type :unexpected
:code (:error response)})))
(defn- request-page
[id]
(p/create
(fn [resolve reject]
(->> (http/send! {:url "http://localhost:6060/api/w/query/page"
:query {:id id}
:method :get})
(rx/mapcat handle-response)
(rx/subs (fn [body]
(resolve (:data body)))
(fn [error]
(reject error)))))))
(defmethod impl/handler :thumbnails/generate (defmethod impl/handler :thumbnails/generate
[{:keys [data] :as message}] [{:keys [id] :as message}]
(let [elem (mf/element exports/page-svg #js {:data data (p/then
:width "290" (request-page id)
:height "150"})] (fn [data]
{:svg (rds/renderToStaticMarkup elem) (let [elem (mf/element exports/page-svg #js {:data data
:fonts @fonts/loaded})) :width "290"
:height "150"})]
{:svg (rds/renderToStaticMarkup elem)
:fonts @fonts/loaded}))))