mirror of
https://github.com/penpot/penpot.git
synced 2025-06-09 13:51:38 +02:00
✨ Enable again the project and file name edition (frontend).
This commit is contained in:
parent
6f894dc757
commit
9cc9aa015d
2 changed files with 68 additions and 86 deletions
|
@ -153,47 +153,21 @@
|
||||||
(let [assoc-file #(assoc-in %1 [:files (:id %2)] %2)]
|
(let [assoc-file #(assoc-in %1 [:files (:id %2)] %2)]
|
||||||
(reduce assoc-file state files)))))
|
(reduce assoc-file state files)))))
|
||||||
|
|
||||||
;; --- Project Persisted
|
|
||||||
|
|
||||||
(defrecord ProjectPersisted [data]
|
|
||||||
ptk/UpdateEvent
|
|
||||||
(update [_ state]
|
|
||||||
(assoc-project state data)))
|
|
||||||
|
|
||||||
(defn project-persisted
|
|
||||||
[data]
|
|
||||||
{:pre [(map? data)]}
|
|
||||||
(ProjectPersisted. data))
|
|
||||||
|
|
||||||
;; --- Persist Project
|
|
||||||
|
|
||||||
(defrecord PersistProject [id]
|
|
||||||
ptk/WatchEvent
|
|
||||||
(watch [_ state stream]
|
|
||||||
(let [project (get-in state [:projects id])]
|
|
||||||
(->> (rp/mutation :update-project project)
|
|
||||||
(rx/map project-persisted)))))
|
|
||||||
|
|
||||||
(defn persist-project
|
|
||||||
[id]
|
|
||||||
{:pre [(uuid? id)]}
|
|
||||||
(PersistProject. id))
|
|
||||||
|
|
||||||
;; --- Rename Project
|
;; --- Rename Project
|
||||||
|
|
||||||
(defrecord RenameProject [id name]
|
(defn rename-project
|
||||||
|
[id name]
|
||||||
|
{:pre [(uuid? id) (string? name)]}
|
||||||
|
(ptk/reify ::rename-project
|
||||||
ptk/UpdateEvent
|
ptk/UpdateEvent
|
||||||
(update [_ state]
|
(update [_ state]
|
||||||
(assoc-in state [:projects id :name] name))
|
(assoc-in state [:projects id :name] name))
|
||||||
|
|
||||||
ptk/WatchEvent
|
ptk/WatchEvent
|
||||||
(watch [_ state stream]
|
(watch [_ state stream]
|
||||||
(rx/of (persist-project id))))
|
(let [params {:id id :name name}]
|
||||||
|
(->> (rp/mutation :rename-project params)
|
||||||
(defn rename-project
|
(rx/ignore))))))
|
||||||
[id name]
|
|
||||||
{:pre [(uuid? id) (string? name)]}
|
|
||||||
(RenameProject. id name))
|
|
||||||
|
|
||||||
;; --- Delete Project (by id)
|
;; --- Delete Project (by id)
|
||||||
|
|
||||||
|
@ -236,6 +210,23 @@
|
||||||
(update [_ state]
|
(update [_ state]
|
||||||
(assoc-project state data))))
|
(assoc-project state data))))
|
||||||
|
|
||||||
|
|
||||||
|
;; --- Rename Project
|
||||||
|
|
||||||
|
(defn rename-file
|
||||||
|
[id name]
|
||||||
|
{:pre [(uuid? id) (string? name)]}
|
||||||
|
(ptk/reify ::rename-file
|
||||||
|
ptk/UpdateEvent
|
||||||
|
(update [_ state]
|
||||||
|
(assoc-in state [:files id :name] name))
|
||||||
|
|
||||||
|
ptk/WatchEvent
|
||||||
|
(watch [_ state stream]
|
||||||
|
(let [params {:id id :name name}]
|
||||||
|
(->> (rp/mutation :rename-project-file params)
|
||||||
|
(rx/ignore))))))
|
||||||
|
|
||||||
;; --- Go To Project
|
;; --- Go To Project
|
||||||
|
|
||||||
(defn go-to
|
(defn go-to
|
||||||
|
|
|
@ -131,29 +131,28 @@
|
||||||
[{:keys [file] :as props}]
|
[{:keys [file] :as props}]
|
||||||
(let [local (mf/use-state {})
|
(let [local (mf/use-state {})
|
||||||
on-navigate #(st/emit! (udp/go-to (:id file)))
|
on-navigate #(st/emit! (udp/go-to (:id file)))
|
||||||
;; delete #(st/emit! (udp/delete-project project))
|
delete-fn #(st/emit! nil #_(udp/delete-file (:id file)))
|
||||||
;; on-delete #(do
|
on-delete #(do
|
||||||
;; (dom/stop-propagation %)
|
(dom/stop-propagation %)
|
||||||
;; (modal/show! confirm-dialog {:on-accept delete}))
|
(modal/show! confirm-dialog {:on-accept delete-fn}))
|
||||||
;; on-blur #(let [target (dom/event->target %)
|
|
||||||
;; name (dom/get-value target)
|
on-blur #(let [name (-> % dom/get-target dom/get-value)]
|
||||||
;; id (:id project)]
|
(st/emit! (udp/rename-file (:id file) name))
|
||||||
;; (swap! local assoc :edition false)
|
(swap! local assoc :edition false))
|
||||||
;; (st/emit! (udp/rename-project id name)))
|
|
||||||
;; on-key-down #(when (kbd/enter? %) (on-blur %))
|
on-key-down #(when (kbd/enter? %) (on-blur %))
|
||||||
;; on-edit #(do
|
on-edit #(do
|
||||||
;; (dom/stop-propagation %)
|
(dom/stop-propagation %)
|
||||||
;; (dom/prevent-default %)
|
(dom/prevent-default %)
|
||||||
;; (swap! local assoc :edition true))
|
(swap! local assoc :edition true))]
|
||||||
]
|
|
||||||
[:div.grid-item.project-th {:on-click on-navigate}
|
[:div.grid-item.project-th {:on-click on-navigate}
|
||||||
[:& grid-item-thumbnail {:file file}]
|
[:& grid-item-thumbnail {:file file}]
|
||||||
[:div.item-info
|
[:div.item-info
|
||||||
(if (:edition @local)
|
(if (:edition @local)
|
||||||
[:input.element-name {:type "text"
|
[:input.element-name {:type "text"
|
||||||
:auto-focus true
|
:auto-focus true
|
||||||
;; :on-key-down on-key-down
|
:on-key-down on-key-down
|
||||||
;; :on-blur on-blur
|
:on-blur on-blur
|
||||||
;; :on-click on-edit
|
;; :on-click on-edit
|
||||||
:default-value (:name file)}]
|
:default-value (:name file)}]
|
||||||
[:h3 (:name file)])
|
[:h3 (:name file)])
|
||||||
|
@ -168,10 +167,10 @@
|
||||||
i/chat
|
i/chat
|
||||||
[:span "0"]]
|
[:span "0"]]
|
||||||
[:div.project-th-icon.edit
|
[:div.project-th-icon.edit
|
||||||
#_{:on-click on-edit}
|
{:on-click on-edit}
|
||||||
i/pencil]
|
i/pencil]
|
||||||
[:div.project-th-icon.delete
|
[:div.project-th-icon.delete
|
||||||
#_{:on-click on-delete}
|
{:on-click on-delete}
|
||||||
i/trash]]]))
|
i/trash]]]))
|
||||||
|
|
||||||
;; --- Grid
|
;; --- Grid
|
||||||
|
@ -199,44 +198,36 @@
|
||||||
|
|
||||||
;; --- Component: Nav
|
;; --- Component: Nav
|
||||||
|
|
||||||
;; (letfn [(on-click [event]
|
|
||||||
;; #_(let [type (or type :own)]
|
|
||||||
;; (st/emit! (rt/nav :dashboard/icons {} {:type type :id id}))))
|
|
||||||
;; (on-input-change [event]
|
|
||||||
;; #_(-> (dom/get-target event)
|
|
||||||
;; (dom/get-value)
|
|
||||||
;; (swap! local assoc :name)))
|
|
||||||
;; (on-cancel [event]
|
|
||||||
;; #_(swap! local dissoc :name :edit))
|
|
||||||
;; (on-double-click [event]
|
|
||||||
;; #_(when editable?
|
|
||||||
;; (swap! local assoc :edit true)))
|
|
||||||
;; (on-input-keyup [event]
|
|
||||||
;; #_(when (kbd/enter? event)
|
|
||||||
;; (let [value (-> (dom/get-target event) (dom/get-value))]
|
|
||||||
;; (st/emit! (di/rename-collection id (str/trim (:name @local))))
|
|
||||||
;; (swap! local assoc :edit false))))]
|
|
||||||
|
|
||||||
(mf/defc nav-item
|
(mf/defc nav-item
|
||||||
[{:keys [id name selected?] :as props}]
|
[{:keys [id name selected?] :as props}]
|
||||||
(let [local (mf/use-state {})
|
(let [local (mf/use-state {:name name})
|
||||||
editable? (not (nil? id))
|
editable? (not (nil? id))
|
||||||
on-click #(st/emit! (udp/go-to-project id))]
|
on-click #(st/emit! (udp/go-to-project id))
|
||||||
|
on-dbl-click #(when editable? (swap! local assoc :edit true))
|
||||||
|
on-input #(as-> % $
|
||||||
|
(dom/get-target $)
|
||||||
|
(dom/get-value $)
|
||||||
|
(swap! local assoc :name $))
|
||||||
|
on-cancel #(swap! local assoc :edit false :name name)
|
||||||
|
on-keyup #(cond
|
||||||
|
(kbd/esc? %)
|
||||||
|
(on-cancel)
|
||||||
|
|
||||||
|
(kbd/enter? %)
|
||||||
|
(let [name (-> % dom/get-target dom/get-value)]
|
||||||
|
(st/emit! (udp/rename-project id name))
|
||||||
|
(swap! local assoc :edit false)))]
|
||||||
|
|
||||||
[:li {:on-click on-click
|
[:li {:on-click on-click
|
||||||
;; :on-double-click on-double-click
|
:on-double-click on-dbl-click
|
||||||
:class-name (when selected? "current")}
|
:class-name (when selected? "current")}
|
||||||
(if (:edit @local)
|
(if (:edit @local)
|
||||||
[:div
|
[:div
|
||||||
[:input.element-title #_{:value (if (:name @local)
|
[:input.element-title {:value (:name @local)
|
||||||
(:name @local)
|
:on-change on-input
|
||||||
(if id name "Storage"))
|
:on-key-down on-keyup}]
|
||||||
:on-change on-input-change
|
[:span.close {:on-click on-cancel} i/close]]
|
||||||
:on-key-down on-input-keyup}]
|
[:span.element-title name])]))
|
||||||
[:span.close #_{:on-click on-cancel} i/close]]
|
|
||||||
[:span.element-title (if id name "Recent")])
|
|
||||||
#_[:span.element-subtitle (tr "ds.num-elements" (t/c num-icons))]
|
|
||||||
]))
|
|
||||||
|
|
||||||
|
|
||||||
(mf/defc nav
|
(mf/defc nav
|
||||||
[{:keys [id] :as props}]
|
[{:keys [id] :as props}]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue