From 0a939185d2eb4726f4b8201396e07df7cc93b85a Mon Sep 17 00:00:00 2001 From: Eva Date: Tue, 9 Aug 2022 09:50:41 +0200 Subject: [PATCH] :tada: Add zoom style to share link url --- frontend/src/app/main/data/viewer.cljs | 53 ++++++++++++------- frontend/src/app/main/refs.cljs | 5 ++ frontend/src/app/main/ui/viewer.cljs | 2 +- .../app/main/ui/{ => viewer}/share_link.cljs | 35 ++++++------ 4 files changed, 60 insertions(+), 35 deletions(-) rename frontend/src/app/main/ui/{ => viewer}/share_link.cljs (91%) diff --git a/frontend/src/app/main/data/viewer.cljs b/frontend/src/app/main/data/viewer.cljs index ac1934209..6583d04b8 100644 --- a/frontend/src/app/main/data/viewer.cljs +++ b/frontend/src/app/main/data/viewer.cljs @@ -42,6 +42,8 @@ (declare fetch-comment-threads) (declare fetch-bundle) (declare bundle-fetched) +(declare zoom-to-fill) +(declare zoom-to-fit) (s/def ::file-id ::us/uuid) (s/def ::index ::us/integer) @@ -145,8 +147,13 @@ (let [route (:route state) qparams (:query-params route) index (:index qparams)] - (when (nil? index) - (rx/of (go-to-frame-auto)))))))) + (rx/merge + (rx/of (case (:zoom qparams) + "fit" zoom-to-fit + "fill" zoom-to-fill + nil)) + (when (nil? index) + (rx/of (go-to-frame-auto))))))))) (defn fetch-comment-threads [{:keys [file-id page-id share-id] :as params}] @@ -196,32 +203,39 @@ ptk/UpdateEvent (update [_ state] (let [increase #(min (* % 1.3) 200)] - (update-in state [:viewer-local :zoom] (fnil increase 1)))))) + (-> state + (update-in [:viewer-local :zoom] (fnil increase 1)) + (d/dissoc-in [:viewer-local :zoom-type])))))) (def decrease-zoom (ptk/reify ::decrease-zoom ptk/UpdateEvent (update [_ state] (let [decrease #(max (/ % 1.3) 0.01)] - (update-in state [:viewer-local :zoom] (fnil decrease 1)))))) + (-> state + (update-in [:viewer-local :zoom] (fnil decrease 1)) + (d/dissoc-in [:viewer-local :zoom-type])))))) (def reset-zoom (ptk/reify ::reset-zoom ptk/UpdateEvent (update [_ state] - (assoc-in state [:viewer-local :zoom] 1)))) + (-> state + (assoc-in [:viewer-local :zoom] 1) + (d/dissoc-in [:viewer-local :zoom-type]))))) (def zoom-to-fit (ptk/reify ::zoom-to-fit ptk/UpdateEvent (update [_ state] - (let [page-id (get-in state [:route :query-params :page-id]) - frame-idx (get-in state [:route :query-params :index]) - srect (get (nth (get-in state [:viewer :pages page-id :frames]) frame-idx) :selrect) - original-size (get-in state [:viewer-local :viewport-size]) - wdiff (/ (:width original-size) (:width srect)) - hdiff (/ (:height original-size) (:height srect)) - minzoom (min wdiff hdiff)] + (let [srect (as-> (get-in state [:route :query-params :page-id]) % + (get-in state [:viewer :pages % :frames]) + (nth % (get-in state [:route :query-params :index])) + (get % :selrect)) + orig-size (get-in state [:viewer-local :viewport-size]) + wdiff (/ (:width orig-size) (:width srect)) + hdiff (/ (:height orig-size) (:height srect)) + minzoom (min wdiff hdiff)] (-> state (assoc-in [:viewer-local :zoom] minzoom) (assoc-in [:viewer-local :zoom-type] :fit)))))) @@ -230,13 +244,14 @@ (ptk/reify ::zoom-to-fill ptk/UpdateEvent (update [_ state] - (let [page-id (get-in state [:route :query-params :page-id]) - frame-idx (get-in state [:route :query-params :index]) - srect (get (nth (get-in state [:viewer :pages page-id :frames]) frame-idx) :selrect) - original-size (get-in state [:viewer-local :viewport-size]) - wdiff (/ (:width original-size) (:width srect)) - hdiff (/ (:height original-size) (:height srect)) - maxzoom (max wdiff hdiff)] + (let [srect (as-> (get-in state [:route :query-params :page-id]) % + (get-in state [:viewer :pages % :frames]) + (nth % (get-in state [:route :query-params :index])) + (get % :selrect)) + orig-size (get-in state [:viewer-local :viewport-size]) + wdiff (/ (:width orig-size) (:width srect)) + hdiff (/ (:height orig-size) (:height srect)) + maxzoom (max wdiff hdiff)] (-> state (assoc-in [:viewer-local :zoom] maxzoom) (assoc-in [:viewer-local :zoom-type] :fill)))))) diff --git a/frontend/src/app/main/refs.cljs b/frontend/src/app/main/refs.cljs index a2f40926f..24b9346e5 100644 --- a/frontend/src/app/main/refs.cljs +++ b/frontend/src/app/main/refs.cljs @@ -398,6 +398,11 @@ (dm/get-in state [:viewer-local :fullscreen?])) st/state)) +(def viewer-zoom-type + (l/derived (fn [state] + (dm/get-in state [:viewer-local :zoom-type])) + st/state)) + (def thumbnail-data (l/derived #(dm/get-in % [:workspace-file :thumbnails] {}) st/state)) diff --git a/frontend/src/app/main/ui/viewer.cljs b/frontend/src/app/main/ui/viewer.cljs index f170763e4..9cb61dd79 100644 --- a/frontend/src/app/main/ui/viewer.cljs +++ b/frontend/src/app/main/ui/viewer.cljs @@ -23,13 +23,13 @@ [app.main.ui.context :as ctx] [app.main.ui.hooks :as hooks] [app.main.ui.icons :as i] - [app.main.ui.share-link] [app.main.ui.static :as static] [app.main.ui.viewer.comments :refer [comments-layer comments-sidebar]] [app.main.ui.viewer.handoff :as handoff] [app.main.ui.viewer.header :refer [header]] [app.main.ui.viewer.interactions :as interactions] [app.main.ui.viewer.login] + [app.main.ui.viewer.share-link] [app.main.ui.viewer.thumbnails :refer [thumbnails-panel]] [app.util.dom :as dom] [app.util.i18n :as i18n :refer [tr]] diff --git a/frontend/src/app/main/ui/share_link.cljs b/frontend/src/app/main/ui/viewer/share_link.cljs similarity index 91% rename from frontend/src/app/main/ui/share_link.cljs rename to frontend/src/app/main/ui/viewer/share_link.cljs index 9b1573a40..d45129a9b 100644 --- a/frontend/src/app/main/ui/share_link.cljs +++ b/frontend/src/app/main/ui/viewer/share_link.cljs @@ -4,7 +4,7 @@ ;; ;; Copyright (c) UXBOX Labs SL -(ns app.main.ui.share-link +(ns app.main.ui.viewer.share-link (:require [app.common.data :as d] [app.common.logging :as log] @@ -37,20 +37,21 @@ ::mf/register-as :share-link} [{:keys [file page]}] (let [current-page page - slinks (mf/deref refs/share-links) - router (mf/deref refs/router) - route (mf/deref refs/route) + slinks (mf/deref refs/share-links) + router (mf/deref refs/router) + route (mf/deref refs/route) + zoom-type (mf/deref refs/viewer-zoom-type) - link (mf/use-state nil) - confirm (mf/use-state false) - open-ops (mf/use-state false) + link (mf/use-state nil) + confirm (mf/use-state false) + open-ops (mf/use-state false) - opts (mf/use-state - {:pages-mode "current" - :all-pages false - :pages #{(:id page)} - :who-comment "team" - :who-inspect "team"}) + opts (mf/use-state + {:pages-mode "current" + :all-pages false + :pages #{(:id page)} + :who-comment "team" + :who-inspect "team"}) close @@ -137,8 +138,12 @@ href (when slink (let [pparams (:path-params route) qparams (-> (:query-params route) - (assoc :share-id (:id slink)) - (assoc :index "0")) + (assoc :share-id (:id slink)) + (assoc :index "0")) + qparams (if (nil? zoom-type) + (dissoc qparams :zoom) + (assoc qparams :zoom zoom-type)) + href (rt/resolve router :viewer pparams qparams)] (assoc cf/public-uri :fragment href)))] (reset! link (some-> href str)))))