From 1e6ed35c77611ca6fec367ecfe9e44bafcffd979 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Mon, 11 May 2020 08:09:37 +0200 Subject: [PATCH] :sparkles: Fetch page data from backend (for thumbnails generation). --- .../src/uxbox/main/ui/dashboard/grid.cljs | 7 +-- frontend/src/uxbox/worker/thumbnails.cljs | 44 ++++++++++++++++--- 2 files changed, 42 insertions(+), 9 deletions(-) diff --git a/frontend/src/uxbox/main/ui/dashboard/grid.cljs b/frontend/src/uxbox/main/ui/dashboard/grid.cljs index 3b0332eaa6..a1f7488028 100644 --- a/frontend/src/uxbox/main/ui/dashboard/grid.cljs +++ b/frontend/src/uxbox/main/ui/dashboard/grid.cljs @@ -28,11 +28,12 @@ (mf/deps file) (fn [] (-> (wrk/ask! {:cmd :thumbnails/generate - :data (:data file)}) + :id (first (:pages file)) + }) (rx/subscribe (fn [{:keys [svg fonts]}] (run! fonts/ensure-loaded! fonts) - (let [node (mf/ref-val container)] - (set! (.-innerHTML node) svg))))))) + (when-let [node (mf/ref-val container)] + (set! (.-innerHTML ^js node) svg))))))) [:div.grid-item-th {:ref container}])) ;; --- Grid Item diff --git a/frontend/src/uxbox/worker/thumbnails.cljs b/frontend/src/uxbox/worker/thumbnails.cljs index 253fa5d2e7..55e3ea4212 100644 --- a/frontend/src/uxbox/worker/thumbnails.cljs +++ b/frontend/src/uxbox/worker/thumbnails.cljs @@ -10,15 +10,47 @@ (ns uxbox.worker.thumbnails (:require [rumext.alpha :as mf] + [beicon.core :as rx] + [promesa.core :as p] [uxbox.main.fonts :as fonts] [uxbox.main.exports :as exports] [uxbox.worker.impl :as impl] + [uxbox.util.http-api :as http] ["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 - [{:keys [data] :as message}] - (let [elem (mf/element exports/page-svg #js {:data data - :width "290" - :height "150"})] - {:svg (rds/renderToStaticMarkup elem) - :fonts @fonts/loaded})) + [{:keys [id] :as message}] + (p/then + (request-page id) + (fn [data] + (let [elem (mf/element exports/page-svg #js {:data data + :width "290" + :height "150"})] + {:svg (rds/renderToStaticMarkup elem) + :fonts @fonts/loaded}))))