Minor improvements on section initialization.

This commit is contained in:
Andrey Antukh 2021-08-31 15:22:32 +02:00 committed by Andrés Moya
parent daeaf14032
commit 8af46ac7fc
11 changed files with 96 additions and 82 deletions

View file

@ -49,7 +49,6 @@
[potok.core :as ptk])) [potok.core :as ptk]))
;; (log/set-level! :trace) ;; (log/set-level! :trace)
;; --- Specs
(s/def ::shape-attrs ::cp/shape-attrs) (s/def ::shape-attrs ::cp/shape-attrs)
(s/def ::set-of-string (s/def ::set-of-string
@ -88,7 +87,7 @@
:snap-grid :snap-grid
:dynamic-alignment}) :dynamic-alignment})
(def layout-names (def layout-presets
{:assets {:assets
{:del #{:sitemap :layers :document-history } {:del #{:sitemap :layers :document-history }
:add #{:assets}} :add #{:assets}}
@ -122,22 +121,31 @@
:picked-color nil :picked-color nil
:picked-color-select false}) :picked-color-select false})
(declare ensure-layout) (defn ensure-layout
[lname]
(defn initialize-layout (ptk/reify ::ensure-layout
[layout-name]
(us/verify (s/nilable ::us/keyword) layout-name)
(ptk/reify ::initialize-layout
ptk/UpdateEvent ptk/UpdateEvent
(update [_ state] (update [_ state]
(update state :workspace-layout (update state :workspace-layout
(fn [layout] (fn [stored]
(or layout default-layout)))) (let [todel (get-in layout-presets [lname :del] #{})
toadd (get-in layout-presets [lname :add] #{})]
(-> stored
(set/difference todel)
(set/union toadd))))))))
(defn setup-layout
[lname]
(us/verify (s/nilable ::us/keyword) lname)
(ptk/reify ::setup-layout
ptk/UpdateEvent
(update [_ state]
(update state :workspace-layout #(or % default-layout)))
ptk/WatchEvent ptk/WatchEvent
(watch [_ _ _] (watch [_ _ _]
(if (and layout-name (contains? layout-names layout-name)) (if (and lname (contains? layout-presets lname))
(rx/of (ensure-layout layout-name)) (rx/of (ensure-layout lname))
(rx/of (ensure-layout :layers)))))) (rx/of (ensure-layout :layers))))))
(defn initialize-file (defn initialize-file
@ -225,8 +233,10 @@
ptk/WatchEvent ptk/WatchEvent
(watch [_ _ _] (watch [_ _ _]
(rx/of (dwn/finalize file-id) (rx/merge
::dwp/finalize)))) (rx/of (dwn/finalize file-id))
(->> (rx/of ::dwp/finalize)
(rx/observe-on :async))))))
(defn initialize-page (defn initialize-page
[page-id] [page-id]
@ -519,21 +529,6 @@
;; --- Toggle layout flag ;; --- Toggle layout flag
(defn ensure-layout
[layout-name]
(assert (contains? layout-names layout-name)
(str "unexpected layout name: " layout-name))
(ptk/reify ::ensure-layout
ptk/UpdateEvent
(update [_ state]
(update state :workspace-layout
(fn [stored]
(let [todel (get-in layout-names [layout-name :del] #{})
toadd (get-in layout-names [layout-name :add] #{})]
(-> stored
(set/difference todel)
(set/union toadd))))))))
(defn toggle-layout-flags (defn toggle-layout-flags
[& flags] [& flags]
(ptk/reify ::toggle-layout-flags (ptk/reify ::toggle-layout-flags

View file

@ -59,7 +59,8 @@
ptk/WatchEvent ptk/WatchEvent
(watch [_ state stream] (watch [_ state stream]
(let [wsession (get-in state [:ws file-id]) (let [wsession (get-in state [:ws file-id])
stoper (rx/filter #(= ::finalize %) stream) stoper (->> stream
(rx/filter (ptk/type? ::finalize)))
interval (* 1000 60)] interval (* 1000 60)]
(->> (rx/merge (->> (rx/merge
;; Each 60 seconds send a keepalive message for maintain ;; Each 60 seconds send a keepalive message for maintain
@ -122,11 +123,10 @@
(defn finalize (defn finalize
[file-id] [file-id]
(ptk/reify ::finalize (ptk/reify ::finalize
ptk/WatchEvent ptk/EffectEvent
(watch [_ state _] (effect [_ state _]
(when-let [ws (get-in state [:ws file-id])] (when-let [ws (get-in state [:ws file-id])]
(ws/-close ws)) (ws/-close ws)))))
(rx/of ::finalize))))
;; --- Handle: Presence ;; --- Handle: Presence

View file

@ -172,7 +172,10 @@
{:type :export {:type :export
:team-id current-team-id :team-id current-team-id
:has-libraries? (->> files (some :has-libraries?)) :has-libraries? (->> files (some :has-libraries?))
:files files})))))))] :files files})))))))
;; NOTE: this is used for detect if component is still mounted
mounted-ref (mf/use-ref true)]
(mf/use-effect (mf/use-effect
(mf/deps show?) (mf/deps show?)
@ -180,7 +183,8 @@
(when show? (when show?
(->> (rp/query! :all-projects) (->> (rp/query! :all-projects)
(rx/map group-by-team) (rx/map group-by-team)
(rx/subs #(reset! teams %)))))) (rx/subs #(when (mf/ref-val mounted-ref)
(reset! teams %)))))))
(when current-team (when current-team
(let [sub-options (conj (vec (for [project current-projects] (let [sub-options (conj (vec (for [project current-projects]

View file

@ -101,12 +101,17 @@
(reverse))] (reverse))]
(mf/use-effect (mf/use-effect
(mf/deps (:id project)) (mf/deps project)
(fn [] (fn []
(dom/set-html-title (tr "title.dashboard.files" (when project
(if (:is-default project) (let [pname (if (:is-default project)
(tr "labels.drafts") (tr "labels.drafts")
(:name project)))) (:name project))]
(dom/set-html-title (tr "title.dashboard.files" pname))))))
(mf/use-effect
(mf/deps project)
(fn []
(st/emit! (dd/fetch-files {:project-id (:id project)}) (st/emit! (dd/fetch-files {:project-id (:id project)})
(dd/clear-selected-files)))) (dd/clear-selected-files))))

View file

@ -19,7 +19,6 @@
[app.util.i18n :as i18n :refer [tr]] [app.util.i18n :as i18n :refer [tr]]
[app.util.keyboard :as kbd] [app.util.keyboard :as kbd]
[app.util.logging :as log] [app.util.logging :as log]
;; [app.util.router :as rt]
[beicon.core :as rx] [beicon.core :as rx]
[cuerdas.core :as str] [cuerdas.core :as str]
[rumext.alpha :as mf])) [rumext.alpha :as mf]))

View file

@ -23,10 +23,11 @@
(mf/use-effect (mf/use-effect
(mf/deps team) (mf/deps team)
(fn [] (fn []
(dom/set-html-title (tr "title.dashboard.shared-libraries" (when team
(if (:is-default team) (let [tname (if (:is-default team)
(tr "dashboard.your-penpot") (tr "dashboard.your-penpot")
(:name team)))))) (:name team))]
(dom/set-html-title (tr "title.dashboard.shared-libraries" tname))))))
(mf/use-effect (mf/use-effect
(st/emitf (dd/fetch-shared-files) (st/emitf (dd/fetch-shared-files)

View file

@ -163,14 +163,16 @@
(mf/use-effect (mf/use-effect
(mf/deps team) (mf/deps team)
(fn [] (fn []
(dom/set-html-title (tr "title.dashboard.projects" (when team
(if (:is-default team) (let [tname (if (:is-default team)
(tr "dashboard.your-penpot") (tr "dashboard.your-penpot")
(:name team)))))) (:name team))]
(dom/set-html-title (tr "title.dashboard.projects" tname))))))
(mf/use-effect (mf/use-effect
(st/emitf (dd/fetch-recent-files) (fn []
(dd/clear-selected-files))) (st/emit! (dd/fetch-recent-files)
(dd/clear-selected-files))))
(when (seq projects) (when (seq projects)
[:* [:*

View file

@ -17,20 +17,23 @@
(mf/defc search-page (mf/defc search-page
[{:keys [team search-term] :as props}] [{:keys [team search-term] :as props}]
(let [result (mf/deref refs/dashboard-search-result)]
(mf/use-effect (mf/use-effect
(mf/deps team) (mf/deps team)
(fn [] (fn []
(dom/set-html-title (tr "title.dashboard.search" (when team
(if (:is-default team) (let [tname (if (:is-default team)
(tr "dashboard.your-penpot") (tr "dashboard.your-penpot")
(:name team)))))) (:name team))]
(dom/set-html-title (tr "title.dashboard.search" tname))))))
(mf/use-effect (mf/use-effect
(mf/deps search-term) (mf/deps search-term)
(fn [] (fn []
(st/emit! (dd/search {:search-term search-term}) (st/emit! (dd/search {:search-term search-term})
(dd/clear-selected-files)))) (dd/clear-selected-files))))
(let [result (mf/deref refs/dashboard-search-result)]
[:* [:*
[:header.dashboard-header [:header.dashboard-header
[:div.dashboard-title [:div.dashboard-title

View file

@ -26,7 +26,6 @@
[app.util.dom :as dom] [app.util.dom :as dom]
[app.util.i18n :as i18n :refer [tr]] [app.util.i18n :as i18n :refer [tr]]
[app.util.object :as obj] [app.util.object :as obj]
[app.util.timers :as ts]
[okulary.core :as l] [okulary.core :as l]
[rumext.alpha :as mf])) [rumext.alpha :as mf]))
@ -116,27 +115,31 @@
project (mf/deref refs/workspace-project) project (mf/deref refs/workspace-project)
layout (mf/deref refs/workspace-layout)] layout (mf/deref refs/workspace-layout)]
;; Setting the layout preset by its name
(mf/use-effect (mf/use-effect
(mf/deps layout-name) (mf/deps layout-name)
#(st/emit! (dw/initialize-layout layout-name))) (fn []
(st/emit! (dw/setup-layout layout-name))))
(mf/use-effect (mf/use-effect
(mf/deps project-id file-id) (mf/deps project-id file-id)
(fn [] (fn []
(st/emit! (dw/initialize-file project-id file-id)) (st/emit! (dw/initialize-file project-id file-id))
(fn [] (fn []
;; Schedule to 100ms so we can do the update before the file is finalized (st/emit! ::dwp/force-persist
(st/emit! ::dwp/force-persist) (dw/finalize-file project-id file-id)))))
(ts/schedule 100 (st/emitf (dw/finalize-file project-id file-id))))))
(mf/use-effect
(fn []
;; Close any non-modal dialog that may be still open ;; Close any non-modal dialog that may be still open
(st/emit! dm/hide)))
(mf/use-effect (mf/use-effect
(mf/deps file) (fn [] (st/emit! dm/hide)))
#(dom/set-html-title (tr "title.workspace" (:name file))))
;; Set properly the page title
(mf/use-effect
(mf/deps (:name file))
(fn []
(when (:name file)
(dom/set-html-title (tr "title.workspace" (:name file))))))
[:& (mf/provider ctx/current-file-id) {:value (:id file)} [:& (mf/provider ctx/current-file-id) {:value (:id file)}
[:& (mf/provider ctx/current-team-id) {:value (:team-id project)} [:& (mf/provider ctx/current-team-id) {:value (:team-id project)}

View file

@ -28,7 +28,6 @@
(let [local (mf/use-state {}) (let [local (mf/use-state {})
input-ref (mf/use-ref) input-ref (mf/use-ref)
id (:id page) id (:id page)
state (mf/use-state {:menu-open false}) state (mf/use-state {:menu-open false})
delete-fn (mf/use-callback (mf/deps id) #(st/emit! (dw/delete-page id))) delete-fn (mf/use-callback (mf/deps id) #(st/emit! (dw/delete-page id)))
@ -199,8 +198,9 @@
(let [file (mf/deref refs/workspace-file) (let [file (mf/deref refs/workspace-file)
create (mf/use-callback create (mf/use-callback
(mf/deps file) (mf/deps file)
(st/emitf (dw/create-page {:file-id (:id file) (fn []
:project-id (:project-id file)}))) (st/emit! (dw/create-page {:file-id (:id file)
:project-id (:project-id file)}))))
show-pages? (mf/use-state true) show-pages? (mf/use-state true)
toggle-pages toggle-pages

View file

@ -40,11 +40,13 @@
(when (.isOpen ^js ws) (when (.isOpen ^js ws)
(.send ^js ws msg))) (.send ^js ws msg)))
(-close [_] (-close [_]
(.close ws)
(rx/end! sb) (rx/end! sb)
(ev/unlistenByKey lk1) (ev/unlistenByKey lk1)
(ev/unlistenByKey lk2) (ev/unlistenByKey lk2)
(ev/unlistenByKey lk3))))) (ev/unlistenByKey lk3)
(.close ^js ws)
(.dispose ^js ws)))))
(defn message? (defn message?
[msg] [msg]