mirror of
https://github.com/penpot/penpot.git
synced 2025-05-13 18:46:37 +02:00
✨ Minor improvement on event ordering on signup.
This commit is contained in:
parent
3ce4769e8d
commit
8ef49d2ec4
2 changed files with 39 additions and 30 deletions
|
@ -101,23 +101,23 @@
|
||||||
[event]
|
[event]
|
||||||
(let [data (deref event)
|
(let [data (deref event)
|
||||||
mdata (meta data)
|
mdata (meta data)
|
||||||
props [:email
|
props {:signin-source (::source mdata)
|
||||||
:auth-backend
|
:email (:email data)
|
||||||
:fullname
|
:auth-backend (:auth-backend data)
|
||||||
:is-muted
|
:fullname (:fullname data)
|
||||||
:default-team-id
|
:is-muted (:is-muted data)
|
||||||
:default-project-id]]
|
:default-team-id (str (:default-team-id data))
|
||||||
|
:default-project-id (str (:default-project-id data))}]
|
||||||
{:name "signin"
|
{:name "signin"
|
||||||
:type "identify"
|
:type "identify"
|
||||||
:profile-id (:id data)
|
:profile-id (:id data)
|
||||||
:props (-> (select-keys data props)
|
:props (d/without-nils props)}))
|
||||||
(assoc :signin-source (::source mdata)))}))
|
|
||||||
|
|
||||||
(defmethod process-event :app.main.data.dashboard/project-created
|
(defmethod process-event :app.main.data.dashboard/project-created
|
||||||
[event]
|
[event]
|
||||||
(let [data (deref event)]
|
(let [data (deref event)]
|
||||||
{:type "action"
|
{:type "action"
|
||||||
:name "create-page"
|
:name "create-project"
|
||||||
:props {:id (:id data)
|
:props {:id (:id data)
|
||||||
:team-id (:team-id data)}}))
|
:team-id (:team-id data)}}))
|
||||||
|
|
||||||
|
@ -146,7 +146,7 @@
|
||||||
|
|
||||||
(defmethod process-event :app.main.data.users/logout
|
(defmethod process-event :app.main.data.users/logout
|
||||||
[event]
|
[event]
|
||||||
(event->generic-action event "logout"))
|
(event->generic-action event "signout"))
|
||||||
|
|
||||||
|
|
||||||
;; --- MAIN LOOP
|
;; --- MAIN LOOP
|
||||||
|
@ -163,21 +163,27 @@
|
||||||
|
|
||||||
(defn- persist-events
|
(defn- persist-events
|
||||||
[events]
|
[events]
|
||||||
|
(if (seq events)
|
||||||
(let [uri (u/join cf/public-uri "events")
|
(let [uri (u/join cf/public-uri "events")
|
||||||
params {:events events}]
|
params {:events events}]
|
||||||
(->> (http/send! {:uri uri
|
(->> (http/send! {:uri uri
|
||||||
:method :post
|
:method :post
|
||||||
:body (http/transit-data params)})
|
:body (http/transit-data params)})
|
||||||
(rx/mapcat rp/handle-response))))
|
(rx/mapcat rp/handle-response)))
|
||||||
|
(rx/of nil)))
|
||||||
|
|
||||||
(defmethod ptk/resolve ::persistence
|
(defmethod ptk/resolve ::persistence
|
||||||
[_ {:keys [buffer] :as params}]
|
[_ {:keys [buffer] :as params}]
|
||||||
(ptk/reify ::persistence
|
(ptk/reify ::persistence
|
||||||
ptk/EffectEvent
|
ptk/EffectEvent
|
||||||
(effect [_ state stream]
|
(effect [_ state stream]
|
||||||
(let [events (into [] (take max-chunk-size) @buffer)]
|
(let [profile-id (:profile-id state)
|
||||||
(when-not (empty? events)
|
events (into [] (take max-buffer-size) @buffer)]
|
||||||
(->> (persist-events events)
|
(prn ::persistence (count events) profile-id)
|
||||||
|
(when (seq events)
|
||||||
|
(->> events
|
||||||
|
(filterv #(= profile-id (:profile-id %)))
|
||||||
|
(persist-events)
|
||||||
(rx/subs (fn [_]
|
(rx/subs (fn [_]
|
||||||
(swap! buffer remove-from-buffer (count events))))))))))
|
(swap! buffer remove-from-buffer (count events))))))))))
|
||||||
|
|
||||||
|
@ -187,9 +193,13 @@
|
||||||
(ptk/reify ::initialize
|
(ptk/reify ::initialize
|
||||||
ptk/WatchEvent
|
ptk/WatchEvent
|
||||||
(watch [_ state stream]
|
(watch [_ state stream]
|
||||||
|
(->> (rx/merge
|
||||||
(->> (rx/from-atom buffer)
|
(->> (rx/from-atom buffer)
|
||||||
(rx/filter #(pos? (count %)))
|
(rx/filter #(pos? (count %)))
|
||||||
(rx/debounce 2000)
|
(rx/debounce 2000))
|
||||||
|
(->> stream
|
||||||
|
(rx/filter (ptk/type? :app.main.data.users/logout))
|
||||||
|
(rx/observe-on :async)))
|
||||||
(rx/map #(ptk/event ::persistence {:buffer buffer}))))
|
(rx/map #(ptk/event ::persistence {:buffer buffer}))))
|
||||||
|
|
||||||
ptk/EffectEvent
|
ptk/EffectEvent
|
||||||
|
|
|
@ -123,12 +123,7 @@
|
||||||
(rx/mapcat (fn [profile]
|
(rx/mapcat (fn [profile]
|
||||||
(if (= uuid/zero (:id profile))
|
(if (= uuid/zero (:id profile))
|
||||||
(rx/empty)
|
(rx/empty)
|
||||||
(rx/of
|
(rx/of (fetch-teams))))))))))
|
||||||
(fetch-teams)
|
|
||||||
(ptk/event ::ev/event
|
|
||||||
{::ev/type "identify"
|
|
||||||
::ev/name "page-load"}))))))))))
|
|
||||||
|
|
||||||
|
|
||||||
;; --- EVENT: login
|
;; --- EVENT: login
|
||||||
|
|
||||||
|
@ -145,11 +140,15 @@
|
||||||
{::ev/source "login"})]
|
{::ev/source "login"})]
|
||||||
(->> (rx/concat
|
(->> (rx/concat
|
||||||
(rx/of (profile-fetched profile)
|
(rx/of (profile-fetched profile)
|
||||||
(fetch-teams)
|
(fetch-teams))
|
||||||
(rt/nav' :dashboard-projects {:team-id team-id}))
|
|
||||||
|
(->> (rx/of (rt/nav' :dashboard-projects {:team-id team-id}))
|
||||||
|
(rx/delay 1000))
|
||||||
|
|
||||||
(when-not (get-in profile [:props :onboarding-viewed])
|
(when-not (get-in profile [:props :onboarding-viewed])
|
||||||
(->> (rx/of (modal/show {:type :onboarding}))
|
(->> (rx/of (modal/show {:type :onboarding}))
|
||||||
(rx/delay 1000))))
|
(rx/delay 1000))))
|
||||||
|
|
||||||
(rx/observe-on :async))))))
|
(rx/observe-on :async))))))
|
||||||
|
|
||||||
(s/def ::login-params
|
(s/def ::login-params
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue