Auto edit the new project created

This commit is contained in:
Andrés Moya 2020-06-15 09:15:16 +02:00 committed by Andrey Antukh
parent c41b98e914
commit 5266a33bc2
4 changed files with 52 additions and 11 deletions

View file

@ -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] [])]

View file

@ -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

View file

@ -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

View file

@ -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))