mirror of
https://github.com/penpot/penpot.git
synced 2025-02-10 09:08:31 -05: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)]
|
||||
(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
|
||||
|
||||
(defrecord RenameProject [id name]
|
||||
ptk/UpdateEvent
|
||||
(update [_ state]
|
||||
(assoc-in state [:projects id :name] name))
|
||||
|
||||
ptk/WatchEvent
|
||||
(watch [_ state stream]
|
||||
(rx/of (persist-project id))))
|
||||
|
||||
(defn rename-project
|
||||
[id name]
|
||||
{:pre [(uuid? id) (string? name)]}
|
||||
(RenameProject. id name))
|
||||
(ptk/reify ::rename-project
|
||||
ptk/UpdateEvent
|
||||
(update [_ state]
|
||||
(assoc-in state [:projects id :name] name))
|
||||
|
||||
ptk/WatchEvent
|
||||
(watch [_ state stream]
|
||||
(let [params {:id id :name name}]
|
||||
(->> (rp/mutation :rename-project params)
|
||||
(rx/ignore))))))
|
||||
|
||||
;; --- Delete Project (by id)
|
||||
|
||||
|
@ -236,6 +210,23 @@
|
|||
(update [_ state]
|
||||
(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
|
||||
|
||||
(defn go-to
|
||||
|
|
|
@ -131,29 +131,28 @@
|
|||
[{:keys [file] :as props}]
|
||||
(let [local (mf/use-state {})
|
||||
on-navigate #(st/emit! (udp/go-to (:id file)))
|
||||
;; delete #(st/emit! (udp/delete-project project))
|
||||
;; on-delete #(do
|
||||
;; (dom/stop-propagation %)
|
||||
;; (modal/show! confirm-dialog {:on-accept delete}))
|
||||
;; on-blur #(let [target (dom/event->target %)
|
||||
;; name (dom/get-value target)
|
||||
;; id (:id project)]
|
||||
;; (swap! local assoc :edition false)
|
||||
;; (st/emit! (udp/rename-project id name)))
|
||||
;; on-key-down #(when (kbd/enter? %) (on-blur %))
|
||||
;; on-edit #(do
|
||||
;; (dom/stop-propagation %)
|
||||
;; (dom/prevent-default %)
|
||||
;; (swap! local assoc :edition true))
|
||||
]
|
||||
delete-fn #(st/emit! nil #_(udp/delete-file (:id file)))
|
||||
on-delete #(do
|
||||
(dom/stop-propagation %)
|
||||
(modal/show! confirm-dialog {:on-accept delete-fn}))
|
||||
|
||||
on-blur #(let [name (-> % dom/get-target dom/get-value)]
|
||||
(st/emit! (udp/rename-file (:id file) name))
|
||||
(swap! local assoc :edition false))
|
||||
|
||||
on-key-down #(when (kbd/enter? %) (on-blur %))
|
||||
on-edit #(do
|
||||
(dom/stop-propagation %)
|
||||
(dom/prevent-default %)
|
||||
(swap! local assoc :edition true))]
|
||||
[:div.grid-item.project-th {:on-click on-navigate}
|
||||
[:& grid-item-thumbnail {:file file}]
|
||||
[:div.item-info
|
||||
(if (:edition @local)
|
||||
[:input.element-name {:type "text"
|
||||
:auto-focus true
|
||||
;; :on-key-down on-key-down
|
||||
;; :on-blur on-blur
|
||||
:on-key-down on-key-down
|
||||
:on-blur on-blur
|
||||
;; :on-click on-edit
|
||||
:default-value (:name file)}]
|
||||
[:h3 (:name file)])
|
||||
|
@ -168,10 +167,10 @@
|
|||
i/chat
|
||||
[:span "0"]]
|
||||
[:div.project-th-icon.edit
|
||||
#_{:on-click on-edit}
|
||||
{:on-click on-edit}
|
||||
i/pencil]
|
||||
[:div.project-th-icon.delete
|
||||
#_{:on-click on-delete}
|
||||
{:on-click on-delete}
|
||||
i/trash]]]))
|
||||
|
||||
;; --- Grid
|
||||
|
@ -199,44 +198,36 @@
|
|||
|
||||
;; --- 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
|
||||
[{:keys [id name selected?] :as props}]
|
||||
(let [local (mf/use-state {})
|
||||
(let [local (mf/use-state {:name name})
|
||||
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
|
||||
;; :on-double-click on-double-click
|
||||
:on-double-click on-dbl-click
|
||||
:class-name (when selected? "current")}
|
||||
(if (:edit @local)
|
||||
[:div
|
||||
[:input.element-title #_{:value (if (:name @local)
|
||||
(:name @local)
|
||||
(if id name "Storage"))
|
||||
:on-change on-input-change
|
||||
:on-key-down on-input-keyup}]
|
||||
[: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))]
|
||||
]))
|
||||
|
||||
[:input.element-title {:value (:name @local)
|
||||
:on-change on-input
|
||||
:on-key-down on-keyup}]
|
||||
[:span.close {:on-click on-cancel} i/close]]
|
||||
[:span.element-title name])]))
|
||||
|
||||
(mf/defc nav
|
||||
[{:keys [id] :as props}]
|
||||
|
|
Loading…
Add table
Reference in a new issue