0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-03-13 16:21:57 -05:00

♻️ More code refactor on workspace.

This commit is contained in:
Andrey Antukh 2019-07-24 11:36:09 +02:00
parent 2a8c1d5f03
commit 980d23c370
8 changed files with 81 additions and 90 deletions

View file

@ -8,6 +8,7 @@
(:require
[beicon.core :as rx]
[potok.core :as ptk]
[uxbox.config :as cfg]
[uxbox.main.store :as st]
[uxbox.main.constants :as c]
[uxbox.main.lenses :as ul]
@ -29,7 +30,7 @@
[uxbox.util.geom.point :as gpt]
[uxbox.util.time :as dt]
[uxbox.util.math :as mth]
[uxbox.util.data :refer (index-of)]))
[uxbox.util.data :refer [index-of]]))
;; --- Expose inner functions

View file

@ -117,7 +117,7 @@
:workspace/page
(let [project (uuid (get-in route [:params :path :project]))
page (uuid (get-in route [:params :path :page]))]
[:& workspace {:project project :page page}])
[:& workspace {:project project :page page :key page}])
nil
))))

View file

@ -1,4 +1,6 @@
(ns uxbox.main.ui.navigation
;; TODO: deprecated
(:require [rumext.alpha :refer-macros [html]]
[goog.events :as events]
[uxbox.util.dom :as dom]))

View file

@ -61,15 +61,16 @@
(scroll/scroll-to-point dom mouse-point scroll-position))))
(mf/def workspace
:key-fn identity
:mixins #{mf/memo
mf/reactive
:mixins #{mf/reactive
shortcuts-mixin}
:init
(fn [own {:keys [project page] :as props}]
(st/emit! (dw/initialize project page))
(assoc own ::canvas (mf/create-ref)))
(assoc own
::canvas (mf/create-ref)
::page-ref (-> (l/in [:pages page])
(l/derive st/state))))
:did-mount
(fn [own]
@ -91,8 +92,9 @@
:render
(fn [own props]
(let [flags (mf/deref refs/flags)
project-id (get props :project)
page-id (get props :page)
page (mf/deref (::page-ref own))
;; project-id (get props :project)
;; page-id (get props :page)
left-sidebar? (not (empty? (keep flags [:layers :sitemap
:document-history])))
right-sidebar? (not (empty? (keep flags [:icons :drawtools
@ -103,7 +105,9 @@
:scrolling (:viewport-positionig workspace))]
[:*
(messages-widget)
(header)
[:& header {:page page
:flags flags
:key (:id page)}]
(colorpalette)
[:main.main-content
@ -116,20 +120,20 @@
;; Rules
(when (contains? flags :rules)
(horizontal-rule))
[:& horizontal-rule])
(when (contains? flags :rules)
(vertical-rule))
[:& vertical-rule])
;; Canvas
[:section.workspace-canvas {:id "workspace-canvas"
:ref (::canvas own)}
[:& viewport {:project project-id
:page page-id
:key [project-id page-id]}]]]
[:& viewport {:page page
:flags flags
:key (:id page)}]]]
;; Aside
(when left-sidebar?
(left-sidebar {:flags flags :page-id page-id}))
[:& left-sidebar {:flags flags :page-id (:id page)}])
(when right-sidebar?
(right-sidebar {:flags flags :page-id page-id}))]])))
[:& right-sidebar {:flags flags :page-id (:id page)}])]])))

View file

@ -135,11 +135,8 @@
:mixins [mf/reactive]
:init
(fn [own {:keys [page project] :as props}]
(assoc own
::viewport (mf/create-ref)
::page-ref (-> (l/in [:pages page])
(l/derive st/state))))
(fn [own props]
(assoc own ::viewport (mf/create-ref)))
:did-mount
(fn [own]
@ -215,10 +212,8 @@
;; TODO: use an ad-hoc ref for required keys from workspace state
:render
(fn [own props]
(let [page (mf/deref (::page-ref own))
flags (mf/react refs/flags)
drawing (mf/react refs/selected-drawing-tool)
(fn [own {:keys [page flags] :as props}]
(let [drawing (mf/react refs/selected-drawing-tool)
tooltip (or (mf/react refs/selected-tooltip)
(get-shape-tooltip drawing))
zoom (or (mf/react refs/selected-zoom) 1)]

View file

@ -6,73 +6,59 @@
;; Copyright (c) 2015-2017 Juan de la Cruz <delacruzgarciajuan@gmail.com>
(ns uxbox.main.ui.workspace.header
(:require [beicon.core :as rx]
[uxbox.config :as cfg]
[potok.core :as ptk]
[uxbox.builtins.icons :as i]
[uxbox.main.store :as st]
[uxbox.main.refs :as refs]
[uxbox.main.data.workspace :as dw]
[uxbox.main.data.pages :as udp]
[uxbox.main.data.history :as udh]
[uxbox.main.data.undo :as udu]
[uxbox.main.data.lightbox :as udl]
[uxbox.main.ui.workspace.clipboard]
[uxbox.main.ui.users :refer [user]]
[uxbox.main.ui.navigation :as nav]
[uxbox.util.router :as r]
[uxbox.util.data :refer [index-of]]
[uxbox.util.geom.point :as gpt]
[uxbox.util.math :as mth]
[rumext.core :as mx :include-macros true]))
(:require
[rumext.core :as mx]
[rumext.alpha :as mf]
[uxbox.builtins.icons :as i]
[uxbox.config :as cfg]
[uxbox.main.data.history :as udh]
[uxbox.main.data.lightbox :as udl]
[uxbox.main.data.pages :as udp]
[uxbox.main.data.undo :as udu]
[uxbox.main.data.workspace :as dw]
[uxbox.main.refs :as refs]
[uxbox.main.store :as st]
[uxbox.main.ui.users :refer [user]]
[uxbox.main.ui.workspace.clipboard]
[uxbox.util.data :refer [index-of]]
[uxbox.util.geom.point :as gpt]
[uxbox.util.math :as mth]
[uxbox.util.router :as rt]))
;; --- Zoom Widget
(mx/defc zoom-widget
{:mixins [mx/reactive mx/static]}
[]
(let [zoom (mx/react refs/selected-zoom)
(mf/defc zoom-widget
{:wrap [mf/reactive*]}
[props]
(let [zoom (mf/react refs/selected-zoom)
increase #(st/emit! (dw/increase-zoom))
decrease #(st/emit! (dw/decrease-zoom))]
[:ul.options-view {}
[:li.zoom-input {}
[:ul.options-view
[:li.zoom-input
[:span.add-zoom {:on-click decrease} "-"]
[:span {} (str (mth/round (* 100 zoom)) "%")]
[:span.remove-zoom {:on-click increase} "+"]]]))
;; --- Header Component
(defn on-view-clicked
[event project page]
(let [token (:share-token project)
pages (deref refs/selected-project-pages)
index (index-of pages page)
rval (rand-int 1000000)
url (str cfg/viewurl "?v=" rval "#/preview/" token "/" index)]
(st/emit! (udp/persist-page (:id page) #(js/open url "new tab" "")))))
(mx/defc header
{:mixins [mx/static mx/reactive]}
[]
(let [project (mx/react refs/selected-project)
page (mx/react refs/selected-page)
flags (mx/react refs/flags)
toggle #(st/emit! (dw/toggle-flag %))
(mf/defc header
[{:keys [page flags] :as props}]
(let [toggle #(st/emit! (dw/toggle-flag %))
on-undo #(st/emit! (udu/undo))
on-redo #(st/emit! (udu/redo))
on-image #(udl/open! :import-image)
on-download #(udl/open! :download)]
[:header#workspace-bar.workspace-bar {}
[:div.main-icon {}
(nav/link (r/route-for :dashboard/projects) i/logo-icon)]
[:header#workspace-bar.workspace-bar
[:div.main-icon
[:a {:on-click #(st/emit! (rt/nav :dashboard/projects))} i/logo-icon]]
[:div.project-tree-btn
{:alt "Sitemap (Ctrl + Shift + M)"
:class (when (contains? flags :sitemap) "selected")
:on-click (partial toggle :sitemap)}
i/project-tree
[:span {} (:name page)]]
[:div.workspace-options {}
[:ul.options-btn {}
[:div.workspace-options
[:ul.options-btn
[:li.tooltip.tooltip-bottom
{:alt "Draw tools (Ctrl + Shift + S)"
:class (when (contains? flags :drawtools) "selected")
@ -103,7 +89,7 @@
:class (when (contains? flags :document-history) "selected")
:on-click (partial toggle :document-history)}
i/undo-history]]
[:ul.options-btn {}
[:ul.options-btn
[:li.tooltip.tooltip-bottom
{:alt "Undo (Ctrl + Z)"
:on-click on-undo}
@ -112,7 +98,7 @@
{:alt "Redo (Ctrl + Shift + Z)"
:on-click on-redo}
i/redo]]
[:ul.options-btn {}
[:ul.options-btn
[:li.tooltip.tooltip-bottom
{:alt "Download (Ctrl + E)"
:on-click on-download}
@ -121,7 +107,7 @@
{:alt "Image (Ctrl + I)"
:on-click on-image}
i/image]]
[:ul.options-btn {}
[:ul.options-btn
[:li.tooltip.tooltip-bottom
{:alt "Rules"
:class (when (contains? flags :rules) "selected")
@ -137,13 +123,14 @@
:class (when (contains? flags :grid-snap) "selected")
:on-click (partial toggle :grid-snap)}
i/grid-snap]]
;; [:li.tooltip.tooltip-bottom
;; {:alt "Align (Ctrl + A)"}
;; i/alignment]]
[:ul.options-btn {}
;; [:li.tooltip.tooltip-bottom
;; {:alt "Align (Ctrl + A)"}
;; i/alignment]]
[:ul.options-btn
[:li.tooltip.tooltip-bottom.view-mode
{:alt "View mode (Ctrl + P)"
:on-click #(on-view-clicked % project page)}
:on-click #(st/emit! (dw/->OpenView (:id page)))
}
i/play]]
(zoom-widget)]
[:& zoom-widget]]
[:& user]]))

View file

@ -6,18 +6,18 @@
;; Copyright (c) 2015-2017 Juan de la Cruz <delacruzgarciajuan@gmail.com>
(ns uxbox.main.ui.workspace.sidebar
(:require [uxbox.main.refs :as refs]
[uxbox.main.ui.workspace.sidebar.options :refer [options-toolbox]]
[uxbox.main.ui.workspace.sidebar.layers :refer [layers-toolbox]]
[uxbox.main.ui.workspace.sidebar.sitemap :refer [sitemap-toolbox]]
[uxbox.main.ui.workspace.sidebar.history :refer [history-toolbox]]
[uxbox.main.ui.workspace.sidebar.icons :refer [icons-toolbox]]
[uxbox.main.ui.workspace.sidebar.drawtools :refer [draw-toolbox]]
[rumext.core :as mx :include-macros true]))
(:require
[rumext.alpha :as mf]
[uxbox.main.ui.workspace.sidebar.drawtools :refer [draw-toolbox]]
[uxbox.main.ui.workspace.sidebar.history :refer [history-toolbox]]
[uxbox.main.ui.workspace.sidebar.icons :refer [icons-toolbox]]
[uxbox.main.ui.workspace.sidebar.layers :refer [layers-toolbox]]
[uxbox.main.ui.workspace.sidebar.options :refer [options-toolbox]]
[uxbox.main.ui.workspace.sidebar.sitemap :refer [sitemap-toolbox]]))
;; --- Left Sidebar (Component)
(mx/defc left-sidebar
(mf/defc left-sidebar
[{:keys [flags page-id] :as props}]
[:aside#settings-bar.settings-bar.settings-bar-left
[:div.settings-bar-inside
@ -30,7 +30,7 @@
;; --- Right Sidebar (Component)
(mx/defc right-sidebar
(mf/defc right-sidebar
[{:keys [flags page-id] :as props}]
[:aside#settings-bar.settings-bar
[:div.settings-bar-inside

View file

@ -102,6 +102,8 @@
(when deletable?
[:a {:on-click on-delete} i/trash])]]])))
;; TODO: refactor this to not use global refs
(mf/def sitemap-toolbox
:mixins [mf/memo mf/reactive]