diff --git a/backend/src/app/rpc/queries/viewer.clj b/backend/src/app/rpc/queries/viewer.clj index 27b040a76..b98de0a38 100644 --- a/backend/src/app/rpc/queries/viewer.clj +++ b/backend/src/app/rpc/queries/viewer.clj @@ -53,8 +53,10 @@ [{:keys [pool] :as cfg} {:keys [profile-id file-id share-id] :as params}] (p/let [slink (slnk/retrieve-share-link pool file-id share-id) perms (files/get-permissions pool profile-id file-id share-id) + thumbs (files/retrieve-object-thumbnails cfg file-id) bundle (p/-> (retrieve-bundle cfg file-id) - (assoc :permissions perms))] + (assoc :permissions perms) + (assoc-in [:file :thumbnails] thumbs))] ;; When we have neither profile nor share, we just return a not ;; found response to the user. diff --git a/frontend/src/app/main/refs.cljs b/frontend/src/app/main/refs.cljs index 114ac6744..3e709aea1 100644 --- a/frontend/src/app/main/refs.cljs +++ b/frontend/src/app/main/refs.cljs @@ -360,15 +360,18 @@ ;; ---- Viewer refs -(def viewer-file - (l/derived :viewer-file st/state)) - -(def viewer-project - (l/derived :viewer-file st/state)) - (def viewer-data (l/derived :viewer st/state)) +(def viewer-file + (l/derived :file viewer-data)) + +(def viewer-thumbnails + (l/derived :thumbnails viewer-file)) + +(def viewer-project + (l/derived :project viewer-data)) + (def viewer-state (l/derived :viewer st/state)) diff --git a/frontend/src/app/main/ui/viewer.cljs b/frontend/src/app/main/ui/viewer.cljs index cb4c97e05..0fde2d198 100644 --- a/frontend/src/app/main/ui/viewer.cljs +++ b/frontend/src/app/main/ui/viewer.cljs @@ -383,7 +383,8 @@ [:& thumbnails-panel {:frames frames :show? (:show-thumbnails local false) :page page - :index index}] + :index index + :thumbnail-data (:thumbnails file)}] [:section.viewer-section {:id "viewer-section" :ref viewer-section-ref :class (if fullscreen? "fullscreen" "")} diff --git a/frontend/src/app/main/ui/viewer/thumbnails.cljs b/frontend/src/app/main/ui/viewer/thumbnails.cljs index 54fb855bc..b0b6828ba 100644 --- a/frontend/src/app/main/ui/viewer/thumbnails.cljs +++ b/frontend/src/app/main/ui/viewer/thumbnails.cljs @@ -77,23 +77,26 @@ (mf/defc thumbnail-item {::mf/wrap [mf/memo #(mf/deferred % ts/idle-then-raf)]} - [{:keys [selected? frame on-click index objects]}] + [{:keys [selected? frame on-click index objects page-id thumbnail-data]}] + (let [children-ids (cph/get-children-ids objects (:id frame)) children-bounds (gsh/selection-rect (concat [frame] (->> children-ids (keep (d/getf objects)))))] [:div.thumbnail-item {:on-click #(on-click % index)} [:div.thumbnail-preview {:class (dom/classnames :selected selected?)} - [:& render/frame-svg {:frame (assoc frame :children-bounds children-bounds) :objects objects :show-thumbnails? true}]] + [:& render/frame-svg {:frame (-> frame + (assoc :thumbnail (get thumbnail-data (dm/str page-id (:id frame))))) + :objects objects + :show-thumbnails? true}]] [:div.thumbnail-info [:span.name {:title (:name frame)} (:name frame)]]])) (mf/defc thumbnails-panel - [{:keys [frames page index show?] :as props}] + [{:keys [frames page index show? thumbnail-data] :as props}] (let [expanded? (mf/use-state false) container (mf/use-ref) objects (:objects page) - on-close #(st/emit! dv/toggle-thumbnails-panel) selected (mf/use-var false) @@ -121,6 +124,8 @@ [:& thumbnail-item {:index i :key (dm/str (:id frame) "-" i) :frame frame + :page-id (:id page) :objects objects :on-click on-item-click - :selected? (= i index)}])]])) + :selected? (= i index) + :thumbnail-data thumbnail-data}])]]))