0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-01-22 14:39:45 -05:00

♻️ Refactor layout flags

This commit is contained in:
Andrés Moya 2020-07-23 08:44:06 +02:00
parent 17813e5090
commit 8f8dc80cad
3 changed files with 48 additions and 112 deletions

View file

@ -54,23 +54,38 @@
;; Workspace Initialization
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(declare initialized)
(declare file-initialized)
;; --- Initialize Workspace
(s/def ::layout-flag
#{:sitemap
:sitemap-pages
:layers
:libraries
:document-history
:colorpalette
:element-options
:rules
:display-grid
:snap-grid
:dynamic-alignment})
(s/def ::layout-flags (s/coll-of ::layout-flag))
(def default-layout
#{:sitemap
:sitemap-pages
:layers
:element-options
:rules
:dynamic-alignment
:display-grid
:snap-grid})
:snap-grid
:dynamic-alignment})
(s/def ::options-mode #{:design :prototype})
(def workspace-default
(def workspace-local-default
{:zoom 1
:flags #{}
:selected (d/ordered-set)
@ -81,7 +96,8 @@
:options-mode :design
:draw-interaction-to nil
:left-sidebar? true
:right-sidebar? true})
:right-sidebar? true
:color-for-rename nil})
(def initialize-layout
(ptk/reify ::initialize-layout
@ -89,12 +105,12 @@
(update [_ state]
(assoc state :workspace-layout default-layout))))
(defn initialize
(defn initialize-file
[project-id file-id]
(us/verify ::us/uuid project-id)
(us/verify ::us/uuid file-id)
(ptk/reify ::initialize
(ptk/reify ::initialize-file
ptk/UpdateEvent
(update [_ state]
(assoc state :workspace-presence {}))
@ -118,9 +134,9 @@
(->> stream
(rx/filter #(= ::dwc/index-initialized %))
(rx/map (constantly
(initialized project-id file-id))))))))
(file-initialized project-id file-id))))))))
(defn- initialized
(defn- file-initialized
[project-id file-id]
(ptk/reify ::initialized
ptk/UpdateEvent
@ -131,7 +147,7 @@
(assoc file :initialized true)
file))))))
(defn finalize
(defn finalize-file
[project-id file-id]
(ptk/reify ::finalize
ptk/UpdateEvent
@ -149,7 +165,7 @@
ptk/UpdateEvent
(update [_ state]
(let [page (get-in state [:workspace-pages page-id])
local (get-in state [:workspace-cache page-id] workspace-default)]
local (get-in state [:workspace-cache page-id] workspace-local-default)]
(-> state
(assoc :current-page-id page-id ; mainly used by events
:workspace-local local
@ -276,6 +292,7 @@
(defn- toggle-layout-flag
[state flag]
(us/assert ::layout-flag flag)
(update state :workspace-layout
(fn [flags]
(if (contains? flags flag)
@ -289,19 +306,34 @@
:sitemap
:document-history
:libraries])))
right-sidebar? (not (empty? (keep layout [:icons
:element-options])))]
right-sidebar? (not (empty? (keep layout [:element-options])))]
(update-in state [:workspace-local]
assoc :left-sidebar? left-sidebar?
:right-sidebar? right-sidebar?)))
(defn- check-auto-flags
[state flags-to-toggle]
(update state :workspace-layout
(fn [flags]
(cond
(contains? (set flags-to-toggle) :assets)
(disj flags :sitemap :layers)
(contains? (set flags-to-toggle) :sitemap)
(disj flags :assets)
:else
flags))))
(defn toggle-layout-flags
[& flags]
(us/assert ::layout-flags flags)
(ptk/reify ::toggle-layout-flags
ptk/UpdateEvent
(update [_ state]
(-> (reduce toggle-layout-flag state flags)
(check-sidebars)))))
(check-sidebars)
(check-auto-flags flags)))))
;; --- Set element options mode

View file

@ -106,8 +106,8 @@
(mf/use-effect
(mf/deps project-id file-id)
(fn []
(st/emit! (dw/initialize project-id file-id))
#(st/emit! (dw/finalize project-id file-id))))
(st/emit! (dw/initialize-file project-id file-id))
#(st/emit! (dw/finalize-file project-id file-id))))
(hooks/use-shortcuts dw/shortcuts)

View file

@ -1,96 +0,0 @@
;; This Source Code Form is subject to the terms of the Mozilla Public
;; License, v. 2.0. If a copy of the MPL was not distributed with this
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
;;
;; This Source Code Form is "Incompatible With Secondary Licenses", as
;; defined by the Mozilla Public License, v. 2.0.
;;
;; Copyright (c) 2020 UXBOX Labs SL
(ns uxbox.main.ui.workspace.sidebar.icons
(:require
#_[uxbox.main.ui.dashboard.icons :as icons]
[rumext.alpha :as mf]
[uxbox.common.data :as d]
[uxbox.main.data.icons :as di]
[uxbox.main.data.workspace :as dw]
[uxbox.main.refs :as refs]
[uxbox.main.store :as st]
[uxbox.main.ui.icons :as i]
[uxbox.main.ui.shapes.icon :as icon]
[uxbox.util.data :refer [read-string]]
[uxbox.util.dom :as dom]
[uxbox.util.i18n :as i18n :refer [t]]
[uxbox.util.router :as r]))
(mf/defc icons-collections
[{:keys [collections value on-change] :as props}]
[:div.figures-catalog
;; extract component: set selector
[:select.input-select.small
{:on-change (fn [event]
(let [val (-> (dom/get-target event)
(dom/get-value))]
(on-change (d/read-string val))))
:value (pr-str value)}
[:option {:value (pr-str nil)} "Storage"]
(for [coll collections]
[:option {:key (str "icon-coll" (:id coll))
:value (pr-str (:id coll))}
(:name coll)])]])
(mf/defc icons-list
[{:keys [collection-id] :as props}]
(let [icons [] #_(mf/deref icons/icons-iref) ;; TODO: Fix this
on-select
(fn [event data]
(st/emit! (dw/select-for-drawing :icon data)))]
#_(mf/use-effect
{:fn #(st/emit! (di/fetch-icons collection-id))
:deps (mf/deps collection-id)})
(for [icon icons
:let [selected? (= nil #_(:drawing local) icon)]]
[:div.figure-btn {:key (str (:id icon))
:class (when selected? "selected")
:on-click #(on-select % icon)
}
[:& icon/icon-svg {:shape icon}]])))
;; --- Icons (Component)
(mf/defc icons-toolbox
[props]
(let [locale (i18n/use-locale)
selected (mf/use-state nil)
local (mf/deref refs/workspace-local)
collections (vals [] #_(mf/deref icons/collections-iref)) ;; TODO: FIX THIS
collection (first collections)
on-close
(fn [event]
(st/emit! (dw/toggle-layout-flags :icons)))
on-change
(fn [val]
(st/emit! (dw/select-for-drawing nil))
(reset! selected val))]
#_(mf/use-effect
{:fn #(st/emit! di/fetch-collections)})
[:div#form-figures.tool-window
[:div.tool-window-bar
[:div.tool-window-icon i/icon-set]
[:span (t locale "workspace.sidebar.icons")]
[:div.tool-window-close {:on-click on-close} i/close]]
[:div.tool-window-content
[:& icons-collections {:collections collections
:value @selected
:on-change on-change
}]
[:& icons-list {:collection-id @selected}]]]))