mirror of
https://github.com/penpot/penpot.git
synced 2025-06-14 06:51:39 +02:00
✨ Auto edit the new project created
This commit is contained in:
parent
c41b98e914
commit
5266a33bc2
4 changed files with 52 additions and 11 deletions
|
@ -81,6 +81,7 @@
|
||||||
(update [_ state]
|
(update [_ state]
|
||||||
(let [profile (:profile state)]
|
(let [profile (:profile state)]
|
||||||
(update state :dashboard-local assoc
|
(update state :dashboard-local assoc
|
||||||
|
:project-for-edit nil
|
||||||
:team-id (:default-team-id profile)
|
:team-id (:default-team-id profile)
|
||||||
:project-id (:default-project-id profile))))
|
:project-id (:default-project-id profile))))
|
||||||
|
|
||||||
|
@ -98,6 +99,7 @@
|
||||||
ptk/UpdateEvent
|
ptk/UpdateEvent
|
||||||
(update [_ state]
|
(update [_ state]
|
||||||
(update state :dashboard-local assoc
|
(update state :dashboard-local assoc
|
||||||
|
:project-for-edit nil
|
||||||
:project-id nil
|
:project-id nil
|
||||||
:team-id team-id))
|
:team-id team-id))
|
||||||
|
|
||||||
|
@ -116,6 +118,7 @@
|
||||||
ptk/UpdateEvent
|
ptk/UpdateEvent
|
||||||
(update [_ state]
|
(update [_ state]
|
||||||
(update state :dashboard-local assoc
|
(update state :dashboard-local assoc
|
||||||
|
:project-for-edit nil
|
||||||
:team-id team-id
|
:team-id team-id
|
||||||
:project-id project-id))
|
:project-id project-id))
|
||||||
|
|
||||||
|
@ -242,7 +245,7 @@
|
||||||
(def create-project
|
(def create-project
|
||||||
(ptk/reify ::create-project
|
(ptk/reify ::create-project
|
||||||
ptk/WatchEvent
|
ptk/WatchEvent
|
||||||
(watch [this state stream]
|
(watch [_ state stream]
|
||||||
(let [name (str "New Project " (gensym "p"))
|
(let [name (str "New Project " (gensym "p"))
|
||||||
team-id (get-in state [:dashboard-local :team-id])]
|
team-id (get-in state [:dashboard-local :team-id])]
|
||||||
(->> (rp/mutation! :create-project {:name name :team-id team-id})
|
(->> (rp/mutation! :create-project {:name name :team-id team-id})
|
||||||
|
@ -253,8 +256,20 @@
|
||||||
(us/verify ::project data)
|
(us/verify ::project data)
|
||||||
(ptk/reify ::project-created
|
(ptk/reify ::project-created
|
||||||
ptk/UpdateEvent
|
ptk/UpdateEvent
|
||||||
(update [this state]
|
(update [_ state]
|
||||||
(update state :projects assoc (:id data) data))))
|
(-> state
|
||||||
|
(update :projects assoc (:id data) data)
|
||||||
|
(update :dashboard-local assoc :project-for-edit (:id data))))
|
||||||
|
|
||||||
|
ptk/WatchEvent
|
||||||
|
(watch [_ state stream]
|
||||||
|
(rx/of (rt/nav :dashboard-project {:team-id (:team-id data) :project-id (:id data)})))))
|
||||||
|
|
||||||
|
(def clear-project-for-edit
|
||||||
|
(ptk/reify ::clear-project-for-edit
|
||||||
|
ptk/UpdateEvent
|
||||||
|
(update [_ state]
|
||||||
|
(assoc-in state [:dashboard-local :project-for-edit] nil))))
|
||||||
|
|
||||||
;; --- Rename Project
|
;; --- Rename Project
|
||||||
|
|
||||||
|
@ -343,7 +358,7 @@
|
||||||
(us/verify ::file data)
|
(us/verify ::file data)
|
||||||
(ptk/reify ::file-created
|
(ptk/reify ::file-created
|
||||||
ptk/UpdateEvent
|
ptk/UpdateEvent
|
||||||
(update [this state]
|
(update [_ state]
|
||||||
(let [project-id (:project-id data)
|
(let [project-id (:project-id data)
|
||||||
file-id (:id data)
|
file-id (:id data)
|
||||||
recent-project-files (get-in state [:recent-file-ids project-id] [])]
|
recent-project-files (get-in state [:recent-file-ids project-id] [])]
|
||||||
|
|
|
@ -32,6 +32,11 @@
|
||||||
(def profile
|
(def profile
|
||||||
(l/derived :profile st/state))
|
(l/derived :profile st/state))
|
||||||
|
|
||||||
|
;; ---- Dashboard refs
|
||||||
|
|
||||||
|
(def dashboard-local
|
||||||
|
(l/derived :dashboard-local st/state))
|
||||||
|
|
||||||
;; ---- Workspace refs
|
;; ---- Workspace refs
|
||||||
|
|
||||||
(def workspace-local
|
(def workspace-local
|
||||||
|
|
|
@ -33,30 +33,47 @@
|
||||||
|
|
||||||
(mf/defc sidebar-project
|
(mf/defc sidebar-project
|
||||||
[{:keys [id name selected? team-id] :as props}]
|
[{:keys [id name selected? team-id] :as props}]
|
||||||
(let [local (mf/use-state {:name name})
|
(let [dashboard-local @refs/dashboard-local
|
||||||
|
project-for-edit (:project-for-edit dashboard-local)
|
||||||
|
local (mf/use-state {:name name
|
||||||
|
:editing (= id project-for-edit)})
|
||||||
editable? (not (nil? id))
|
editable? (not (nil? id))
|
||||||
|
edit-input-ref (mf/use-ref)
|
||||||
|
|
||||||
on-click #(st/emit! (rt/nav :dashboard-project {:team-id team-id :project-id id}))
|
on-click #(st/emit! (rt/nav :dashboard-project {:team-id team-id :project-id id}))
|
||||||
on-dbl-click #(when editable? (swap! local assoc :edit true))
|
on-dbl-click #(when editable? (swap! local assoc :editing true))
|
||||||
on-input #(as-> % $
|
on-input #(as-> % $
|
||||||
(dom/get-target $)
|
(dom/get-target $)
|
||||||
(dom/get-value $)
|
(dom/get-value $)
|
||||||
(swap! local assoc :name $))
|
(swap! local assoc :name $))
|
||||||
on-cancel #(swap! local assoc :edit false :name name)
|
on-cancel #(do
|
||||||
|
(st/emit! dsh/clear-project-for-edit)
|
||||||
|
(swap! local assoc :editing false :name name))
|
||||||
on-keyup #(cond
|
on-keyup #(cond
|
||||||
(kbd/esc? %)
|
(kbd/esc? %)
|
||||||
(on-cancel)
|
(on-cancel)
|
||||||
|
|
||||||
(kbd/enter? %)
|
(kbd/enter? %)
|
||||||
(let [name (-> % dom/get-target dom/get-value)]
|
(let [name (-> % dom/get-target dom/get-value)]
|
||||||
|
(st/emit! dsh/clear-project-for-edit)
|
||||||
(st/emit! (dsh/rename-project id name))
|
(st/emit! (dsh/rename-project id name))
|
||||||
(swap! local assoc :edit false)))]
|
(swap! local assoc :editing false)))]
|
||||||
|
|
||||||
|
(mf/use-effect
|
||||||
|
(mf/deps (:editing @local))
|
||||||
|
#(when (:editing @local)
|
||||||
|
(let [edit-input (mf/ref-val edit-input-ref)]
|
||||||
|
(dom/focus! edit-input)
|
||||||
|
(dom/select-text! edit-input))
|
||||||
|
nil))
|
||||||
|
|
||||||
[:li {:on-click on-click
|
[:li {:on-click on-click
|
||||||
:on-double-click on-dbl-click
|
:on-double-click on-dbl-click
|
||||||
:class-name (when selected? "current")}
|
:class-name (when selected? "current")}
|
||||||
(if (:edit @local)
|
(if (:editing @local)
|
||||||
[:div.edit-wrapper
|
[:div.edit-wrapper
|
||||||
[:input.element-title {:value (:name @local)
|
[:input.element-title {:value (:name @local)
|
||||||
|
:ref edit-input-ref
|
||||||
:on-change on-input
|
:on-change on-input
|
||||||
:on-key-down on-keyup}]
|
:on-key-down on-keyup}]
|
||||||
[:span.close {:on-click on-cancel} i/close]]
|
[:span.close {:on-click on-cancel} i/close]]
|
||||||
|
@ -143,7 +160,7 @@
|
||||||
(fn [event]
|
(fn [event]
|
||||||
(let [target (dom/get-target event)
|
(let [target (dom/get-target event)
|
||||||
value (dom/get-value target)]
|
value (dom/get-value target)]
|
||||||
(.select target)
|
(dom/select-text! target)
|
||||||
(if (empty? value)
|
(if (empty? value)
|
||||||
(debounced-emit! (rt/nav :dashboard-search {:team-id team-id} {}))
|
(debounced-emit! (rt/nav :dashboard-search {:team-id team-id} {}))
|
||||||
(debounced-emit! (rt/nav :dashboard-search {:team-id team-id} {:search-term value})))))
|
(debounced-emit! (rt/nav :dashboard-search {:team-id team-id} {:search-term value})))))
|
||||||
|
@ -158,7 +175,7 @@
|
||||||
(fn [event]
|
(fn [event]
|
||||||
(let [search-input (dom/get-element "search-input")]
|
(let [search-input (dom/get-element "search-input")]
|
||||||
(dom/clean-value! search-input)
|
(dom/clean-value! search-input)
|
||||||
(.focus search-input)
|
(dom/focus! search-input)
|
||||||
(debounced-emit! (rt/nav :dashboard-search {:team-id team-id} {}))))]
|
(debounced-emit! (rt/nav :dashboard-search {:team-id team-id} {}))))]
|
||||||
|
|
||||||
[:div.library-bar
|
[:div.library-bar
|
||||||
|
|
|
@ -104,6 +104,10 @@
|
||||||
[node]
|
[node]
|
||||||
(set! (.-value node) ""))
|
(set! (.-value node) ""))
|
||||||
|
|
||||||
|
(defn select-text!
|
||||||
|
[node]
|
||||||
|
(.select node))
|
||||||
|
|
||||||
(defn ^boolean equals?
|
(defn ^boolean equals?
|
||||||
[node-a node-b]
|
[node-a node-b]
|
||||||
(.isEqualNode node-a node-b))
|
(.isEqualNode node-a node-b))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue