Add options to sidebar

This commit is contained in:
Eva 2023-02-21 09:12:30 +01:00 committed by alonso.torres
parent eb425dc4f2
commit cc8347a871
13 changed files with 794 additions and 15 deletions

View file

@ -114,6 +114,16 @@
(def full-screen-off (icon-xref :full-screen-off))
(def grid (icon-xref :grid))
(def grid-snap (icon-xref :grid-snap))
(def grid-justify-content-column-around (icon-xref :grid-justify-content-column-around))
(def grid-justify-content-column-between (icon-xref :grid-justify-content-column-between))
(def grid-justify-content-column-center (icon-xref :grid-justify-content-column-center))
(def grid-justify-content-column-end (icon-xref :grid-justify-content-column-end))
(def grid-justify-content-column-start (icon-xref :grid-justify-content-column-start))
(def grid-justify-content-row-around (icon-xref :grid-justify-content-row-around))
(def grid-justify-content-row-between (icon-xref :grid-justify-content-row-between))
(def grid-justify-content-row-center (icon-xref :grid-justify-content-row-center))
(def grid-justify-content-row-end (icon-xref :grid-justify-content-row-end))
(def grid-justify-content-row-start (icon-xref :grid-justify-content-row-start))
(def go-next (icon-xref :go-next))
(def go-prev (icon-xref :go-prev))
(def help (icon-xref :help))

View file

@ -11,6 +11,7 @@
[app.main.data.workspace.shape-layout :as dwsl]
[app.main.store :as st]
[app.main.ui.components.numeric-input :refer [numeric-input]]
[app.main.ui.components.select :refer [select]]
[app.main.ui.icons :as i]
[app.util.dom :as dom]
[cuerdas.core :as str]
@ -94,8 +95,25 @@
:stretch i/align-self-column-strech
:baseline i/align-self-column-baseline))))
(defn get-layout-grid-icon
[type val is-col?]
(case type
:justify-content (if is-col?
(case val
:start i/grid-justify-content-column-start
:end i/grid-justify-content-column-end
:center i/grid-justify-content-column-center
:space-around i/grid-justify-content-column-around
:space-between i/grid-justify-content-column-between)
(case val
:start i/grid-justify-content-row-start
:end i/grid-justify-content-row-end
:center i/grid-justify-content-row-center
:space-around i/grid-justify-content-row-around
:space-between i/grid-justify-content-row-between))))
(mf/defc direction-btn
[{:keys [dir saved-dir set-direction] :as props}]
[{:keys [dir saved-dir set-direction icon?] :as props}]
(let [handle-on-click
(mf/use-callback
(mf/deps set-direction dir)
@ -112,7 +130,9 @@
:key (dm/str "direction-" dir)
:alt (str/replace (str/capital (d/name dir)) "-" " ")
:on-click handle-on-click}
i/auto-direction]))
(if icon?
i/auto-direction
(str/replace (str/capital (d/name dir)) "-" " "))]))
(mf/defc wrap-row
[{:keys [wrap-type set-wrap] :as props}]
@ -299,6 +319,108 @@
:value (:row-gap gap-value)
:disabled (and (= :nowrap wrap-type) (not is-col?))}]]]])
(mf/defc grid-edit-mode
[{:keys [active toggle-edit-mode] :as props}]
[:*
[:button.tooltip.tooltip-bottom-left
{:class (dom/classnames :active (= active true))
:alt "Grid edit mode"
:on-click #(toggle-edit-mode)
:style {:padding 0}}
i/set-thumbnail]])
(mf/defc align-grid-row
[{:keys [is-col? align-items set-align] :as props}]
(let [type (if is-col?
:column
:row)]
[:div.align-items-style
(for [align [:start :center :end :stretch :baseline]]
[:button.align-start.tooltip
{:class (dom/classnames :active (= align-items align)
:tooltip-bottom-left (not= align :start)
:tooltip-bottom (= align :start))
:alt (dm/str "Align items " (d/name align))
:on-click #(set-align align % type)
:key (dm/str "align-items" (d/name align))}
(get-layout-flex-icon :align-items align is-col?)])]))
(mf/defc justify-grid-row
[{:keys [is-col? justify-items set-justify] :as props}]
(let [type (if is-col?
:column
:row)]
[:div.justify-content-style
(for [align [:start :center :end :space-around :space-between]]
[:button.align-start.tooltip
{:class (dom/classnames :active (= justify-items align)
:tooltip-bottom-left (not= align :start)
:tooltip-bottom (= align :start))
:alt (dm/str "Justify content " (d/name align))
:on-click #(set-justify align % type)
:key (dm/str "justify-content" (d/name align))}
(get-layout-grid-icon :justify-content align is-col?)])]))
(defn manage-values [value]
(let [quantity (:value value)
unit (:unit value)]
(case unit
:auto (d/name unit)
:perc (str/join [quantity "%"])
(str/join [quantity (d/name unit)]))))
(mf/defc grid-columns-row
[{:keys [is-col? expanded? column-values toggle add-new-element set-column-value handle-focus handle-blur on-unit-change remove-column] :as props}]
(let [column-num (count column-values)
direction (if (< 1 column-num)
(if is-col?
"Columns "
"Rows ")
(if is-col?
"Column "
"Row "))
column-vals (str/join ", " (map manage-values column-values))
generated-name (str direction column-num " (" column-vals ")")]
[:div.grid-columns
[:div.grid-columns-header
[:button.expand-icon
{:on-click toggle}
i/actions]
[:div.columns-info
generated-name]
[:button.add-column
{:on-click add-new-element}
i/plus]]
(when expanded?
[:div.columns-info-wrapper
(for [column column-values]
[:div.column-info
[:div.direction-grid-icon
(if is-col?
i/layout-rows
i/layout-columns)]
[:div.grid-column-value
[:> numeric-input {:no-validate true
:value (:value column)
:on-change set-column-value
:on-focus handle-focus
:on-blur handle-blur
:placeholder "--"}]]
[:div.grid-column-unit
[:& select
{:class "grid-column-unit-selector"
:default-value (:unit column)
:options [{:value :fr :label "fr"}
{:value :auto :label "auto"}
{:value :px :label "px"}
{:value :perc :label "%"}]
:on-change on-unit-change}]]
[:button.remove-grid-column
{:on-change remove-column}
i/minus]])])]))
(mf/defc layout-container-menu
{::mf/wrap [#(mf/memo' % (mf/check-props ["ids" "values" "type" "multiple"]))]}
[{:keys [ids _type values multiple] :as props}]
@ -322,7 +444,7 @@
set-flex (fn []
(st/emit! (dwsl/remove-layout ids))
(on-add-layout :flex))
set-grid (fn []
(st/emit! (dwsl/remove-layout ids))
(on-add-layout :grid))
@ -331,9 +453,6 @@
saved-dir (:layout-flex-dir values)
is-col? (or (= :column saved-dir) (= :column-reverse saved-dir))
set-direction
(fn [dir]
(st/emit! (dwsl/update-layout ids {:layout-flex-dir dir})))
;; Wrap type
@ -386,7 +505,63 @@
(st/emit! (dwsl/update-layout ids {:layout-padding {:p2 val :p4 val}}))
:else
(st/emit! (dwsl/update-layout ids {:layout-padding {prop val}}))))]
(st/emit! (dwsl/update-layout ids {:layout-padding {prop val}}))))
;; Grid-direction
saved-grid-dir (:layout-grid-dir values)
set-direction
(fn [dir type]
(if (= :flex type)
(st/emit! (dwsl/update-layout ids {:layout-flex-dir dir}))
(st/emit! (dwsl/update-layout ids {:layout-grid-dir dir}))))
;; Align grid
align-items-row (:layout-grid-align-row values)
align-items-column (:layout-grid-align-column values)
set-align-grid (fn [value type]
(if (= type :row)
(st/emit! (dwsl/update-layout ids {:layout-grid-align-row value}))
(st/emit! (dwsl/update-layout ids {:layout-grid-align-column value}))))
;; Justify grid
grid-justify-content-row (:layout-grid-justify-row values)
grid-justify-content-column (:layout-grid-justify-column values)
set-justify-grid (fn [value type]
(if (= type :row)
(st/emit! (dwsl/update-layout ids {:layout-grid-justify-row value}))
(st/emit! (dwsl/update-layout ids {:layout-grid-justify-column value}))))
;;Grid columns
column-grid-values (:layout-grid-column-values values)
grid-columns-open? (mf/use-state false)
toggle-columns-info (mf/use-callback
(fn [_]
(swap! grid-columns-open? not)))
; Grid rows / columns
rows-grid-values (:layout-grid-row-values values)
grid-rows-open? (mf/use-state false)
toggle-rows-info (mf/use-callback
(fn [_]
(swap! grid-rows-open? not)))
;; TODO -> fix this, is doing nothing
add-new-element (fn [value type]
(if (= type :row)
(st/emit! (dwsl/update-layout ids {:layout-grid-row-values value}))
(st/emit! (dwsl/update-layout ids {:layout-grid-column-values value}))))
set-column-value (fn[] )
handle-focus (fn [])
handle-blur (fn [])
set-colum-unit (fn [])
remove-column (fn [])]
[:div.element-set
[:div.element-set-title
@ -395,12 +570,12 @@
(if (and (not multiple) (:layout values))
[:div.title-actions
[:div.layout-btns
[:button {:on-click set-flex
:class (dom/classnames
:active (= :flex layout-type))} "Flex"]
[:button {:on-click set-grid
:class (dom/classnames
:active (= :grid layout-type))} "Grid"]]
[:button {:on-click set-flex
:class (dom/classnames
:active (= :flex layout-type))} "Flex"]
[:button {:on-click set-grid
:class (dom/classnames
:active (= :grid layout-type))} "Grid"]]
[:button.remove-layout {:on-click on-remove-layout} i/minus]]
[:button.add-page {:on-click #(on-add-layout :flex)} i/close])]]
@ -418,7 +593,8 @@
[:& direction-btn {:key (d/name dir)
:dir dir
:saved-dir saved-dir
:set-direction set-direction}])]]
:set-direction #(set-direction dir :flex)
:icon? true}])]]
[:div.wrap-type
[:& wrap-row {:wrap-type wrap-type
@ -456,4 +632,73 @@
:on-change-style change-padding-type
:on-change on-padding-change}]]
[:div "GRID TO COME"])))]))
[:div.element-set-content.layout-menu
[:div.layout-row
[:div.direction-wrap.row-title "Direction"]
[:div.btn-wrapper
[:div.direction
[:*
(for [dir [:row :column]]
[:& direction-btn {:key (d/name dir)
:dir dir
:saved-dir saved-grid-dir
:set-direction #(set-direction dir :grid)
:icon? false}])]]
[:div.edit-mode
[:& grid-edit-mode
{:active false
:toggle-edit-mode ()}]]]]
[:div.layout-row
[:div.align-items-grid.row-title "Align"]
[:div.btn-wrapper.align-grid
[:& align-grid-row {:is-col? false
:align-items align-items-row
:set-align set-align-grid}]
[:& align-grid-row {:is-col? true
:align-items align-items-column
:set-align set-align-grid}]]]
[:div.layout-row
[:div.jusfiy-content-grid.row-title "Justify"]
[:div.btn-wrapper.align-grid
[:& justify-grid-row {:is-col? true
:align-items grid-justify-content-column
:set-justify set-justify-grid}]
[:& justify-grid-row {:is-col? false
:align-items grid-justify-content-row
:set-justify set-justify-grid}]]]
[:& grid-columns-row {:is-col? true
:expanded? @grid-columns-open?
:toggle toggle-columns-info
:column-values [{:value 1 :unit :fr} {:value 1 :unit :fr}];; column-grid-values
:add-new-column add-new-element
:set-column-value set-column-value
:handle-focus handle-focus
:handle-blur handle-blur
:set-colum-unit set-colum-unit
:remove-column remove-column}]
[:& grid-columns-row {:is-col? false
:expanded? @grid-rows-open?
:toggle toggle-rows-info
:column-values [{:value "--" :unit :auto} {:value "--" :unit :auto}] ;; column-grid-values
:add-new-column add-new-element
:set-column-value set-column-value
:handle-focus handle-focus
:handle-blur handle-blur
:set-colum-unit set-colum-unit
:remove-column remove-column}]
[:& gap-section {:is-col? is-col?
:wrap-type wrap-type
:gap-selected? gap-selected?
:set-gap set-gap
:gap-value (:layout-gap values)}]
[:& padding-section {:values values
:on-change-style change-padding-type
:on-change on-padding-change}]])))]))