🐛 Fix several corner cases that causes race conditions on workspace and dashboard loading

* 🐛 Fix several race conditions on workspace and dashboard code

It also fixes a corner case that happens when penpot workspace
is loaded in a background tab on firefox.

* 🐛 Add missing team-id prop to several file returning endpoints
This commit is contained in:
Andrey Antukh
2025-03-14 09:55:41 +01:00
committed by GitHub
parent 61800d8945
commit 05d6d2fcd4
14 changed files with 138 additions and 125 deletions

View File

@@ -38,7 +38,9 @@
(declare process-message)
(defn initialize
[]
[team-id]
(assert (uuid? team-id) "expected uuid instance for `team-id`")
(ptk/reify ::initialize
ptk/WatchEvent
(watch [_ state stream]
@@ -46,8 +48,8 @@
profile-id (:profile-id state)]
(->> (rx/merge
(rx/of (fetch-projects)
(df/fetch-fonts))
(rx/of (fetch-projects team-id)
(df/fetch-fonts team-id))
(->> stream
(rx/filter (ptk/type? ::dws/message))
(rx/map deref)
@@ -60,8 +62,8 @@
(rx/take-until stopper))))))
(defn finalize
[]
(ptk/data-event ::finalize {}))
[team-id]
(ptk/data-event ::finalize {:team-id team-id}))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Data Fetching (context aware: current team)
@@ -69,7 +71,7 @@
;; --- EVENT: fetch-projects
(defn projects-fetched
(defn- projects-fetched
[projects]
(ptk/reify ::projects-fetched
ptk/UpdateEvent
@@ -80,13 +82,12 @@
projects))))
(defn fetch-projects
[]
[team-id]
(ptk/reify ::fetch-projects
ptk/WatchEvent
(watch [_ state _]
(let [team-id (:current-team-id state)]
(->> (rp/cmd! :get-projects {:team-id team-id})
(rx/map projects-fetched))))))
(watch [_ _ _]
(->> (rp/cmd! :get-projects {:team-id team-id})
(rx/map projects-fetched)))))
;; --- EVENT: search
@@ -115,7 +116,7 @@
;; --- EVENT: recent-files
(defn recent-files-fetched
(defn- recent-files-fetched
[files]
(ptk/reify ::recent-files-fetched
ptk/UpdateEvent
@@ -126,13 +127,14 @@
(update :files d/merge files))))))
(defn fetch-recent-files
[]
(ptk/reify ::fetch-recent-files
ptk/WatchEvent
(watch [_ state _]
(let [team-id (:current-team-id state)]
(->> (rp/cmd! :get-team-recent-files {:team-id team-id})
(rx/map recent-files-fetched))))))
([] (fetch-recent-files nil))
([team-id]
(ptk/reify ::fetch-recent-files
ptk/WatchEvent
(watch [_ state _]
(when-let [team-id (or team-id (:current-team-id state))]
(->> (rp/cmd! :get-team-recent-files {:team-id team-id})
(rx/map recent-files-fetched)))))))
;; --- EVENT: fetch-template-files