Properly integrate the workspace header.

This commit is contained in:
Andrey Antukh 2019-12-18 23:48:02 +01:00
parent 34d33a2d83
commit f9f36445ec
4 changed files with 18 additions and 38 deletions

View file

@ -161,12 +161,11 @@
;; Stop possible previous watchers and re-fetch the main page ;; Stop possible previous watchers and re-fetch the main page
;; and all project related pages. ;; and all project related pages.
(rx/of ::stop-watcher (rx/of ::stop-watcher
(dp/fetch-page page-id)
(dp/fetch-file file-id) (dp/fetch-file file-id)
(dp/fetch-pages file-id)) (dp/fetch-pages file-id))
;; When main page is fetched, schedule the main initialization. ;; When main page is fetched, schedule the main initialization.
(->> (rx/zip (rx/filter (ptk/type? ::dp/page-fetched) stream) (->> (rx/zip (rx/filter (ptk/type? ::dp/pages-fetched) stream)
(rx/filter (ptk/type? ::dp/files-fetched) stream)) (rx/filter (ptk/type? ::dp/files-fetched) stream))
(rx/take 1) (rx/take 1)
(rx/do #(reset! st/loader false)) (rx/do #(reset! st/loader false))

View file

@ -34,20 +34,17 @@
(ptk/reify ::initialize (ptk/reify ::initialize
ptk/UpdateEvent ptk/UpdateEvent
(update [_ state] (update [_ state]
;; (prn "initialize-websocket$update" file-id)
(let [uri (str "ws://localhost:6060/sub/" file-id)] (let [uri (str "ws://localhost:6060/sub/" file-id)]
(assoc-in state [::ws file-id] (ws/open uri)))) (assoc-in state [::ws file-id] (ws/open uri))))
ptk/WatchEvent ptk/WatchEvent
(watch [_ state stream] (watch [_ state stream]
;; (prn "initialize-websocket$watch" file-id)
(rx/merge (rx/merge
(rx/of (fetch-users file-id)) (rx/of (fetch-users file-id))
(->> (ws/-stream (get-in state [::ws file-id])) (->> (ws/-stream (get-in state [::ws file-id]))
(rx/filter #(= :message (:type %))) (rx/filter #(= :message (:type %)))
(rx/map (comp t/decode :payload)) (rx/map (comp t/decode :payload))
(rx/filter #(s/valid? ::message %)) (rx/filter #(s/valid? ::message %))
;; (rx/tap #(js/console.log "ws-message" file-id %))
(rx/map (fn [{:keys [type] :as msg}] (rx/map (fn [{:keys [type] :as msg}]
(case type (case type
:who (handle-who msg) :who (handle-who msg)

View file

@ -11,6 +11,11 @@
[uxbox.main.constants :as c] [uxbox.main.constants :as c]
[uxbox.main.store :as st])) [uxbox.main.store :as st]))
(def profile
(-> (l/key :profile)
(l/derive st/state)))
(def workspace (def workspace
(-> (l/key :workspace-local) (-> (l/key :workspace-local)
(l/derive st/state))) (l/derive st/state)))
@ -31,6 +36,10 @@
(-> (l/key :workspace-file) (-> (l/key :workspace-file)
(l/derive st/state))) (l/derive st/state)))
(def workspace-users
(-> (l/key :workspace-users)
(l/derive st/state)))
(def workspace-data (def workspace-data
(-> (l/key :workspace-data) (-> (l/key :workspace-data)
(l/derive st/state))) (l/derive st/state)))

View file

@ -39,31 +39,7 @@
[:span {} (str (mth/round (* 100 zoom)) "%")] [:span {} (str (mth/round (* 100 zoom)) "%")]
[:span.remove-zoom {:on-click increase} "+"]]])) [:span.remove-zoom {:on-click increase} "+"]]]))
;; --- Header Component ;; --- Header Users
;; (mf/defc user
;; [props]
;; (let [open (mf/use-state false)
;; profile (mf/deref profile-ref)
;; photo (if (str/empty? (:photo profile ""))
;; "/images/avatar.jpg"
;; (:photo profile))]
;; [:div.user-zone {:on-click #(st/emit! (rt/navigate :settings/profile))
;; :on-mouse-enter #(reset! open true)
;; :on-mouse-leave #(reset! open false)}
;; [:span (:fullname profile)]
;; [:img {:src photo}]
;; (when @open
;; [:& user-menu])]))
(def profile-ref
(-> (l/key :profile)
(l/derive st/state)))
(def users-ref
(-> (l/key :workspace-users)
(l/derive st/state)))
(mf/defc user-item (mf/defc user-item
[{:keys [user self?] :as props}] [{:keys [user self?] :as props}]
@ -73,10 +49,10 @@
#(st/emit! (rt/navigate :settings/profile)))} #(st/emit! (rt/navigate :settings/profile)))}
[:img {:src "/images/avatar.jpg"}]]) [:img {:src "/images/avatar.jpg"}]])
(mf/defc users (mf/defc users-list
[props] [props]
(let [profile (mf/deref profile-ref) (let [profile (mf/deref refs/profile)
users (mf/deref users-ref)] users (mf/deref refs/workspace-users)]
[:ul.user-multi [:ul.user-multi
[:& user-item {:user profile :self? true}] [:& user-item {:user profile :self? true}]
(for [id (->> (:active users) (for [id (->> (:active users)
@ -84,6 +60,7 @@
[:& user-item {:user (get-in users [:by-id id]) [:& user-item {:user (get-in users [:by-id id])
:key id}])])) :key id}])]))
;; --- Header Component
(mf/defc header (mf/defc header
[{:keys [page layout flags] :as props}] [{:keys [page layout flags] :as props}]
@ -92,7 +69,7 @@
on-redo #(st/emit! (udu/redo)) on-redo #(st/emit! (udu/redo))
on-image #(modal/show! import-image-modal {}) on-image #(modal/show! import-image-modal {})
;;on-download #(udl/open! :download) ;;on-download #(udl/open! :download)
] file (mf/deref refs/workspace-file)]
[:header#workspace-bar.workspace-bar [:header#workspace-bar.workspace-bar
[:div.main-icon [:div.main-icon
[:a {:on-click #(st/emit! (rt/nav :dashboard-projects))} i/logo-icon]] [:a {:on-click #(st/emit! (rt/nav :dashboard-projects))} i/logo-icon]]
@ -101,11 +78,9 @@
{:alt (tr "header.sitemap") {:alt (tr "header.sitemap")
:class (when (contains? layout :sitemap) "selected") :class (when (contains? layout :sitemap) "selected")
:on-click #(st/emit! (dw/toggle-layout-flag :sitemap))} :on-click #(st/emit! (dw/toggle-layout-flag :sitemap))}
;; i/project-tree [:span (:project-name file) " / " (:name file)]]
[:span {} "Project name / File name";(:name page)
]]
[:& users] [:& users-list]
[:div.workspace-options [:div.workspace-options
[:ul.options-btn [:ul.options-btn