🐛 Fix shared token link creation.

This commit is contained in:
Andrey Antukh 2020-11-25 11:38:44 +01:00 committed by Hirunatan
parent 7ceb9b4009
commit f314efdfdc
2 changed files with 50 additions and 47 deletions

View file

@ -71,11 +71,14 @@
(ptk/reify ::initialize (ptk/reify ::initialize
ptk/UpdateEvent ptk/UpdateEvent
(update [_ state] (update [_ state]
(update state :viewer-local (-> state
(fn [lstate] (assoc :current-file-id file-id)
(if (nil? lstate) (assoc :current-page-id page-id)
default-local-state (update :viewer-local
lstate)))) (fn [lstate]
(if (nil? lstate)
default-local-state
lstate)))))
ptk/WatchEvent ptk/WatchEvent
(watch [_ state stream] (watch [_ state stream]
@ -98,9 +101,35 @@
:file-id file-id} :file-id file-id}
(string? token) (assoc :token token))] (string? token) (assoc :token token))]
(->> (rp/query :viewer-bundle params) (->> (rp/query :viewer-bundle params)
(rx/first)
(rx/map bundle-fetched)))))) (rx/map bundle-fetched))))))
(defn- extract-frames
[objects]
(let [root (get objects uuid/zero)]
(into [] (comp (map #(get objects %))
(filter #(= :frame (:type %))))
(reverse (:shapes root)))))
(defn bundle-fetched
[{:keys [project file page share-token token libraries users] :as bundle}]
(us/verify ::bundle bundle)
(ptk/reify ::file-fetched
ptk/UpdateEvent
(update [_ state]
(let [objects (:objects page)
frames (extract-frames objects)
users (map #(avatars/assoc-avatar % :fullname) users)]
(assoc state
:viewer-libraries (d/index-by :id libraries)
:viewer-data {:project project
:objects objects
:users (d/index-by :id users)
:file file
:page page
:frames frames
:token token
:share-token share-token})))))
(defn fetch-comment-threads (defn fetch-comment-threads
[{:keys [file-id page-id] :as params}] [{:keys [file-id page-id] :as params}]
(letfn [(fetched [data state] (letfn [(fetched [data state]
@ -135,56 +164,30 @@
(->> (rp/query :comments {:thread-id thread-id}) (->> (rp/query :comments {:thread-id thread-id})
(rx/map #(partial fetched %))))))) (rx/map #(partial fetched %)))))))
(defn- extract-frames (defn create-share-link
[objects] []
(let [root (get objects uuid/zero)]
(->> (:shapes root)
(map #(get objects %))
(filter #(= :frame (:type %)))
(reverse)
(vec))))
(defn bundle-fetched
[{:keys [project file page share-token token libraries users] :as bundle}]
(us/verify ::bundle bundle)
(ptk/reify ::file-fetched
ptk/UpdateEvent
(update [_ state]
(let [objects (:objects page)
frames (extract-frames objects)
users (map #(avatars/assoc-avatar % :fullname) users)]
(-> state
(assoc :viewer-libraries (d/index-by :id libraries)
:viewer-data {:project project
:objects objects
:users (d/index-by :id users)
:file file
:page page
:frames frames
:token token
:share-token share-token}))))))
(def create-share-link
(ptk/reify ::create-share-link (ptk/reify ::create-share-link
ptk/WatchEvent ptk/WatchEvent
(watch [_ state stream] (watch [_ state stream]
(let [file-id (get-in state [:viewer-local :file-id]) (let [file-id (:current-file-id state)
page-id (get-in state [:viewer-local :page-id])] page-id (:current-page-id state)]
(->> (rp/mutation! :create-file-share-token {:file-id file-id (->> (rp/mutation! :create-file-share-token {:file-id file-id
:page-id page-id}) :page-id page-id})
(rx/map (fn [{:keys [token]}] (rx/map (fn [{:keys [token]}]
#(assoc-in % [:viewer-data :share-token] token)))))))) #(assoc-in % [:viewer-data :share-token] token))))))))
(def delete-share-link (defn delete-share-link
[]
(ptk/reify ::delete-share-link (ptk/reify ::delete-share-link
ptk/WatchEvent ptk/WatchEvent
(watch [_ state stream] (watch [_ state stream]
(let [file-id (get-in state [:viewer-local :file-id]) (let [file-id (:current-file-id state)
page-id (get-in state [:viewer-local :page-id]) page-id (:current-page-id state)
token (get-in state [:viewer-data :share-token])] token (get-in state [:viewer-data :share-token])
(->> (rp/mutation :delete-file-share-token {:file-id file-id params {:file-id file-id
:page-id page-id :page-id page-id
:token token}) :token token}]
(->> (rp/mutation :delete-file-share-token params)
(rx/map (fn [_] #(update % :viewer-data dissoc :share-token)))))))) (rx/map (fn [_] #(update % :viewer-data dissoc :share-token))))))))
;; --- Zoom Management ;; --- Zoom Management

View file

@ -60,8 +60,8 @@
dropdown-ref (mf/use-ref) dropdown-ref (mf/use-ref)
locale (mf/deref i18n/locale) locale (mf/deref i18n/locale)
create #(st/emit! dv/create-share-link) create (st/emitf (dv/create-share-link))
delete #(st/emit! dv/delete-share-link) delete (st/emitf (dv/delete-share-link))
href (.-href js/location) href (.-href js/location)
href (subs href 0 (str/index-of href "?")) href (subs href 0 (str/index-of href "?"))