Minor improvement on event ordering on signup.

This commit is contained in:
Andrey Antukh 2021-05-05 23:25:42 +02:00 committed by Andrés Moya
parent 3ce4769e8d
commit 8ef49d2ec4
2 changed files with 39 additions and 30 deletions

View file

@ -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

View file

@ -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