0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-02-02 20:39:09 -05:00
penpot/frontend/uxbox/ui/workspace/pagesmngr.cljs

134 lines
4.1 KiB
Text
Raw Normal View History

2015-12-18 17:42:42 +02:00
(ns uxbox.ui.workspace.pagesmngr
2015-12-17 17:32:06 +02:00
(:require [sablono.core :as html :refer-macros [html]]
[rum.core :as rum]
[cuerdas.core :as str]
[uxbox.rstore :as rs]
[uxbox.data.projects :as dp]
[uxbox.data.workspace :as dw]
2015-12-17 17:32:06 +02:00
[uxbox.ui.keyboard :as k]
[uxbox.ui.icons :as i]
2015-12-17 17:32:06 +02:00
[uxbox.ui.mixins :as mx]
[uxbox.ui.workspace.base :as wb]
[uxbox.ui.dom :as dom]
[uxbox.ui.util :as util]))
2015-12-18 17:42:42 +02:00
(defn- page-item-render
2015-12-17 17:32:06 +02:00
[own parent page numpages]
(letfn [(on-edit [e]
(let [data {:edit true :form page}]
(reset! parent data)))]
(let [curpage (rum/react wb/page-state)
active? (= (:id curpage) (:id page))
deletable? (> numpages 1)
navigate #(rs/emit! (dp/go-to (:project page) (:id page)))
2015-12-17 17:32:06 +02:00
delete #(rs/emit! (dp/delete-page (:id page)))]
(html
[:li.single-page
{:class (when active? "current")
2015-12-18 17:42:42 +02:00
:key (str (:id page))
2015-12-17 17:32:06 +02:00
:on-click navigate}
[:div.tree-icon i/page]
[:span (:name page)]
[:div.options
[:div {:on-click on-edit} i/pencil]
[:div {:class (when-not deletable? "hide")
:on-click delete}
i/trash]]]))))
2015-12-18 17:42:42 +02:00
(def page-item
2015-12-17 17:32:06 +02:00
(util/component
2015-12-18 17:42:42 +02:00
{:render page-item-render
:name "page-item"
2015-12-17 17:32:06 +02:00
:mixins [rum/reactive]}))
2015-12-18 17:42:42 +02:00
(defn- page-list-render
2015-12-17 17:32:06 +02:00
[own parent]
(let [project (rum/react wb/project-state)
pages (rum/react wb/pages-state)
name (:name project)]
(html
[:div.project-bar-inside
[:span.project-name name]
[:ul.tree-view
(for [page pages]
2015-12-18 17:42:42 +02:00
(-> (page-item parent page (count pages))
(rum/with-key (:id page))))]
2015-12-17 17:32:06 +02:00
[:button.btn-primary.btn-small
{:on-click #(reset! parent {:edit true :form {}})}
"+ Add new page"]])))
2015-12-18 17:42:42 +02:00
(def page-list
2015-12-17 17:32:06 +02:00
(util/component
2015-12-18 17:42:42 +02:00
{:render page-list-render
:name "page-list"
2015-12-17 17:32:06 +02:00
:mixins [rum/reactive]}))
2015-12-18 17:42:42 +02:00
(defn- page-form-render
2015-12-17 17:32:06 +02:00
[own parent]
(let [form (:form @parent)
project @wb/project-state]
(letfn [(on-change [e]
(let [value (dom/event->value e)]
(swap! parent assoc-in [:form :name] value)))
(persist []
(if (nil? (:id form))
(let [data {:project (:id project)
:width (:width project)
:height (:height project)
:name (:name form)}]
(rs/emit! (dp/create-page data))
(reset! parent {:edit false}))
(do
(rs/emit! (dp/update-page-name (:id form) (:name form)))
(reset! parent {:edit false}))))
(on-save [e]
(persist))
(on-key-up [e]
(when (k/enter? e)
(persist)))
(on-cancel [e]
(reset! parent {:edit false}))]
(html
[:div.project-bar-inside
[:input.input-text
{:name "test"
:auto-focus true
:placeholder "Page title"
:type "text"
:value (get-in @parent [:form :name] "")
:on-change on-change
:on-key-up on-key-up}]
[:button.btn-primary.btn-small
{:disabled (str/empty? (str/trim (get-in @parent [:form :name] "")))
:on-click on-save}
"Save"]
[:button.btn-delete.btn-small
{:on-click on-cancel}
"Cancel"]]))))
2015-12-18 17:42:42 +02:00
(def page-form
2015-12-17 17:32:06 +02:00
(util/component
2015-12-18 17:42:42 +02:00
{:render page-form-render
:name "page-form"
2015-12-17 17:32:06 +02:00
:mixins [rum/reactive]}))
2015-12-18 17:42:42 +02:00
(defn pagesmngr-render
2015-12-17 17:32:06 +02:00
[own]
(let [local (:rum/local own)
workspace (rum/react wb/workspace-state)
project (rum/react wb/project-state)]
(html
[:div#project-bar.project-bar
(when-not (:pagesbar-enabled workspace false)
{:class "toggle"})
(if (:edit @local)
2015-12-18 17:42:42 +02:00
(page-form local)
(page-list local))])))
2015-12-17 17:32:06 +02:00
2015-12-18 17:42:42 +02:00
(def pagesmngr
2015-12-17 17:32:06 +02:00
(util/component
2015-12-18 17:42:42 +02:00
{:render pagesmngr-render
:name "pagesmngr"
2015-12-17 17:32:06 +02:00
:mixins [rum/reactive (mx/local {:edit false :form {}})]}))