From cd66d4a519e71cf30a4cf3a97dff3a9b43e82e6c Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Fri, 13 Dec 2019 13:17:49 +0100 Subject: [PATCH] :construction: Show shapes options. --- frontend/src/uxbox/main/data/workspace.cljs | 39 ++++++++----------- frontend/src/uxbox/main/ui/workspace.cljs | 2 +- .../src/uxbox/main/ui/workspace/header.cljs | 30 +++++++------- .../main/ui/workspace/sidebar/drawtools.cljs | 2 +- .../main/ui/workspace/sidebar/layers.cljs | 2 +- .../main/ui/workspace/sidebar/options.cljs | 10 ++--- .../main/ui/workspace/sidebar/sitemap.cljs | 2 +- 7 files changed, 40 insertions(+), 47 deletions(-) diff --git a/frontend/src/uxbox/main/data/workspace.cljs b/frontend/src/uxbox/main/data/workspace.cljs index 1ef5161f8..1cc725105 100644 --- a/frontend/src/uxbox/main/data/workspace.cljs +++ b/frontend/src/uxbox/main/data/workspace.cljs @@ -234,6 +234,18 @@ [txt] ::todo) +(defn toggle-layout-flag + [flag] + (s/assert keyword? flag) + (ptk/reify ::toggle-layout-flag + ptk/UpdateEvent + (update [_ state] + (update state :workspace-layout + (fn [flags] + (if (contains? flags flag) + (disj flags flag) + (conj flags flag))))))) + ;; --- Workspace Ruler (defrecord ActivateRuler [] @@ -775,6 +787,10 @@ xfmt (gmt/translate prev delta)] (assoc-in state [:workspace-data :shapes-by-id id :modifier-mtx] xfmt)))] (ptk/reify ::apply-temporal-displacement-in-bulk + ;; udp/IPageOps + ;; (-ops [_] + ;; (mapv #(vec :udp/shape id :move delta) ids)) + ptk/UpdateEvent (update [_ state] (reduce process-shape state ids))))) @@ -805,29 +821,6 @@ (update [_ state] (reduce process-shape state ids))))) -(defn rehash-shape-relationship - "Checks shape overlaping with existing canvas, if one or more - overlaps, assigns the shape to the first one." - [id] - (s/assert ::us/uuid id) - (letfn [(overlaps? [canvas shape] - (let [shape1 (geom/shape->rect-shape canvas) - shape2 (geom/shape->rect-shape shape)] - (geom/overlaps? shape1 shape2)))] - (ptk/reify ::rehash-shape-relationship - ptk/UpdateEvent - (update [_ state] - (let [shape (get-in state [:workspace-data :shapes-by-id id]) - xform (comp (map #(get-in state [:workspace-data :shapes-by-id %])) - (filter #(overlaps? % shape)) - (take 1)) - canvas (->> (get-in state [:workspace-data :canvas]) - (sequence xform) - (first))] - (if canvas - (update-in state [:workspace-data :shapes-by-id id] assoc :canvas (:id canvas)) - (update-in state [:workspace-data :shapes-by-id id] assoc :canvas nil))))))) - ;; --- Start shape "edition mode" (defn start-edition-mode diff --git a/frontend/src/uxbox/main/ui/workspace.cljs b/frontend/src/uxbox/main/ui/workspace.cljs index 958c555e1..9cc31a8e9 100644 --- a/frontend/src/uxbox/main/ui/workspace.cljs +++ b/frontend/src/uxbox/main/ui/workspace.cljs @@ -110,7 +110,7 @@ [:> rdnd/provider {:backend rdnd/html5} [:& messages-widget] - [:& header {:page page :flags flags}] + [:& header {:page page :layout layout :flags flags}] (when (:colorpalette flags) [:& colorpalette]) diff --git a/frontend/src/uxbox/main/ui/workspace/header.cljs b/frontend/src/uxbox/main/ui/workspace/header.cljs index 6c402e917..575cdc655 100644 --- a/frontend/src/uxbox/main/ui/workspace/header.cljs +++ b/frontend/src/uxbox/main/ui/workspace/header.cljs @@ -43,7 +43,7 @@ ;; --- Header Component (mf/defc header - [{:keys [page flags] :as props}] + [{:keys [page layout flags] :as props}] (let [toggle #(st/emit! (dw/toggle-flag %)) on-undo #(st/emit! (udu/undo)) on-redo #(st/emit! (udu/redo)) @@ -55,41 +55,41 @@ [:a {:on-click #(st/emit! (rt/nav :dashboard-projects))} i/logo-icon]] [:div.project-tree-btn {:alt (tr "header.sitemap") - :class (when (contains? flags :sitemap) "selected") - :on-click (partial toggle :sitemap)} + :class (when (contains? layout :sitemap) "selected") + :on-click #(st/emit! (dw/toggle-layout-flag :sitemap))} i/project-tree [:span {} (:name page)]] [:div.workspace-options [:ul.options-btn [:li.tooltip.tooltip-bottom {:alt (tr "header.draw-tools") - :class (when (contains? flags :drawtools) "selected") - :on-click (partial toggle :drawtools)} + :class (when (contains? layout :drawtools) "selected") + :on-click #(st/emit! (dw/toggle-layout-flag :drawtools))} i/shapes] [:li.tooltip.tooltip-bottom {:alt (tr "header.color-palette") - :class (when (contains? flags :colorpalette) "selected") - :on-click (partial toggle :colorpalette)} + :class (when (contains? layout :colorpalette) "selected") + :on-click #(st/emit! (dw/toggle-layout-flag :colorpalette))} i/palette] [:li.tooltip.tooltip-bottom {:alt (tr "header.icons") - :class (when (contains? flags :icons) "selected") - :on-click (partial toggle :icons)} + :class (when (contains? layout :icons) "selected") + :on-click #(st/emit! (dw/toggle-layout-flag :icons))} i/icon-set] [:li.tooltip.tooltip-bottom {:alt (tr "header.layers") - :class (when (contains? flags :layers) "selected") - :on-click (partial toggle :layers)} + :class (when (contains? layout :layers) "selected") + :on-click #(st/emit! (dw/toggle-layout-flag :layers))} i/layers] [:li.tooltip.tooltip-bottom {:alt (tr "header.element-options") - :class (when (contains? flags :element-options) "selected") - :on-click (partial toggle :element-options)} + :class (when (contains? layout :element-options) "selected") + :on-click #(st/emit! (dw/toggle-layout-flag :element-options))} i/options] [:li.tooltip.tooltip-bottom {:alt (tr "header.document-history") - :class (when (contains? flags :document-history) "selected") - :on-click (partial toggle :document-history)} + :class (when (contains? layout :document-history) "selected") + :on-click #(st/emit! (dw/toggle-layout-flag :document-history))} i/undo-history]] [:ul.options-btn [:li.tooltip.tooltip-bottom diff --git a/frontend/src/uxbox/main/ui/workspace/sidebar/drawtools.cljs b/frontend/src/uxbox/main/ui/workspace/sidebar/drawtools.cljs index 6747fb474..c5ff877a5 100644 --- a/frontend/src/uxbox/main/ui/workspace/sidebar/drawtools.cljs +++ b/frontend/src/uxbox/main/ui/workspace/sidebar/drawtools.cljs @@ -50,7 +50,7 @@ {:wrap [mf/wrap-memo]} [{:keys [flags] :as props}] (letfn [(close [event] - (st/emit! (dw/deactivate-flag :drawtools))) + (st/emit! (dw/toggle-layout-flag :drawtools))) (select [event tool] (st/emit! :interrupt (dw/deactivate-ruler) diff --git a/frontend/src/uxbox/main/ui/workspace/sidebar/layers.cljs b/frontend/src/uxbox/main/ui/workspace/sidebar/layers.cljs index 0a7e7f863..066854cc4 100644 --- a/frontend/src/uxbox/main/ui/workspace/sidebar/layers.cljs +++ b/frontend/src/uxbox/main/ui/workspace/sidebar/layers.cljs @@ -237,7 +237,7 @@ (mf/defc layers-toolbox [{:keys [page] :as props}] - (let [on-click #(st/emit! (dw/toggle-flag :layers)) + (let [on-click #(st/emit! (dw/toggle-layout-flag :layers)) selected (mf/deref refs/selected-shapes) data (mf/deref refs/workspace-data) diff --git a/frontend/src/uxbox/main/ui/workspace/sidebar/options.cljs b/frontend/src/uxbox/main/ui/workspace/sidebar/options.cljs index 3c5e9b4f6..492e1bc42 100644 --- a/frontend/src/uxbox/main/ui/workspace/sidebar/options.cljs +++ b/frontend/src/uxbox/main/ui/workspace/sidebar/options.cljs @@ -88,9 +88,9 @@ ;; --- Options (mf/defc shape-options - [{:keys [sid] :as props}] - (let [shape-iref (mf/use-memo {:deps #js [sid] - :fn #(-> (l/in [:shapes sid]) + [{:keys [shape-id] :as props}] + (let [shape-iref (mf/use-memo {:deps #js [shape-id] + :fn #(-> (l/in [:workspace-data :shapes-by-id shape-id]) (l/derive st/state))}) shape (mf/deref shape-iref) menus (get +menus-map+ (:type shape))] @@ -110,7 +110,7 @@ (mf/defc options-toolbox {:wrap [mf/wrap-memo]} [{:keys [page selected] :as props}] - (let [close #(st/emit! (udw/toggle-flag :element-options)) + (let [close #(st/emit! (udw/toggle-layout-flag :element-options)) selected (mf/deref refs/selected-shapes)] [:div.elementa-options.tool-window [:div.tool-window-bar @@ -120,5 +120,5 @@ [:div.tool-window-content [:div.element-options (if (= (count selected) 1) - [:& shape-options {:sid (first selected)}] + [:& shape-options {:shape-id (first selected)}] [:& page-options {:page page}])]]])) diff --git a/frontend/src/uxbox/main/ui/workspace/sidebar/sitemap.cljs b/frontend/src/uxbox/main/ui/workspace/sidebar/sitemap.cljs index 29b570de4..499f09e22 100644 --- a/frontend/src/uxbox/main/ui/workspace/sidebar/sitemap.cljs +++ b/frontend/src/uxbox/main/ui/workspace/sidebar/sitemap.cljs @@ -98,7 +98,7 @@ (mf/defc sitemap-toolbox [{:keys [file page] :as props}] (let [create-fn #(modal/show! page-form-dialog {:page {:file-id (:file-id page)}}) - close-fn #(st/emit! (dw/toggle-flag :sitemap))] + close-fn #(st/emit! (dw/toggle-layout-flag :sitemap))] [:div.sitemap.tool-window [:div.tool-window-bar [:div.tool-window-icon i/project-tree]