From 344e919c4e5ea972fe2185dc931b286bca01ad31 Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Tue, 14 Nov 2023 21:13:07 +0800 Subject: [PATCH] fix: input # in cmdk to create a class --- src/main/frontend/components/cmdk.cljs | 27 ++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/main/frontend/components/cmdk.cljs b/src/main/frontend/components/cmdk.cljs index 9b84244af7..efb0c6b93a 100644 --- a/src/main/frontend/components/cmdk.cljs +++ b/src/main/frontend/components/cmdk.cljs @@ -63,12 +63,15 @@ (defn create-items [q] (when-not (string/blank? q) - [{:text "Create page" :icon "new-page" - :icon-theme :gray - :info (str "Create page called '" q "'") :source-create :page} - {:text "Create whiteboard" :icon "new-whiteboard" - :icon-theme :gray - :info (str "Create whiteboard called '" q "'") :source-create :whiteboard}])) + (let [class? (string/starts-with? q "#")] + (->> [{:text (if class? "Create class" "Create page") :icon "new-page" + :icon-theme :gray + :info (str "Create page called '" q "'") :source-create :page} + (when-not class? + {:text "Create whiteboard" :icon "new-whiteboard" + :icon-theme :gray + :info (str "Create whiteboard called '" q "'") :source-create :whiteboard})] + (remove nil?))))) ;; Take the results, decide how many items to show, and order the results appropriately (defn state->results-ordered [state search-mode] @@ -342,16 +345,24 @@ (defmethod handle-action :create [_ state _event] (let [item (state->highlighted-item state) + !input (::input state) + create-class? (string/starts-with? @!input "#") create-whiteboard? (= :whiteboard (:source-create item)) create-page? (= :page (:source-create item)) alt? (some-> state ::alt deref) - !input (::input state)] + class (when create-class? (string/replace @!input #"^#+" ""))] (cond + create-class? (page-handler/create! class + {:redirect? false + :create-first-block? false + :class? true}) (and create-whiteboard? alt?) (whiteboard-handler/create-new-whiteboard-page! @!input) (and create-whiteboard? (not alt?)) (whiteboard-handler/create-new-whiteboard-and-redirect! @!input) (and create-page? alt?) (page-handler/create! @!input {:redirect? false}) (and create-page? (not alt?)) (page-handler/create! @!input {:redirect? true})) - (close-unless-alt! state))) + (if create-class? + (state/pub-event! [:class/configure (db/entity [:block/name (util/page-name-sanity-lc class)])]) + (close-unless-alt! state)))) (defn- get-filter-user-input [input]