diff --git a/clj-e2e/dev/user.clj b/clj-e2e/dev/user.clj index b0064deee5..1eb188c19f 100644 --- a/clj-e2e/dev/user.clj +++ b/clj-e2e/dev/user.clj @@ -73,6 +73,11 @@ (->> (future (run-tests 'logseq.e2e.rtc-extra-test)) (swap! *futures assoc :rtc-extra-test))) +(defn run-tag-basic-test + [] + (->> (future (run-tests 'logseq.e2e.tag-basic-test)) + (swap! *futures assoc :tag-basic-test))) + (defn run-all-basic-test [] (run-tests 'logseq.e2e.commands-basic-test diff --git a/deps/common/src/logseq/common/config.cljs b/deps/common/src/logseq/common/config.cljs index 570be62878..942b3271c0 100644 --- a/deps/common/src/logseq/common/config.cljs +++ b/deps/common/src/logseq/common/config.cljs @@ -35,6 +35,7 @@ (defonce favorites-page-name "$$$favorites") (defonce views-page-name "$$$views") (defonce library-page-name "Library") +(defonce quick-add-page-name "Quick add") (defn local-asset? [s] diff --git a/deps/db/src/logseq/db.cljs b/deps/db/src/logseq/db.cljs index 2c231cc046..a90180c029 100644 --- a/deps/db/src/logseq/db.cljs +++ b/deps/db/src/logseq/db.cljs @@ -262,11 +262,7 @@ (d/entity db [:block/uuid id]) (d/entity db (get-first-page-by-name db (name page-id-name-or-uuid))))))) -(defn get-built-in-page - [db title] - (when db - (let [id (common-uuid/gen-uuid :builtin-block-uuid title)] - (d/entity db [:block/uuid id])))) +(def get-built-in-page common-initial-data/get-built-in-page) (defn library? [page] diff --git a/deps/db/src/logseq/db/common/initial_data.cljs b/deps/db/src/logseq/db/common/initial_data.cljs index 8bed6edb3e..c84928b088 100644 --- a/deps/db/src/logseq/db/common/initial_data.cljs +++ b/deps/db/src/logseq/db/common/initial_data.cljs @@ -6,6 +6,7 @@ [logseq.common.config :as common-config] [logseq.common.util :as common-util] [logseq.common.util.date-time :as date-time-util] + [logseq.common.uuid :as common-uuid] [logseq.db.common.entity-plus :as entity-plus] [logseq.db.common.entity-util :as common-entity-util] [logseq.db.common.order :as db-order] @@ -328,6 +329,12 @@ (d/datoms db :eavt (:e d))) (d/datoms db :avet :logseq.property.user/email)))) +(defn get-built-in-page + [db title] + (when db + (let [id (common-uuid/gen-uuid :builtin-block-uuid title)] + (d/entity db [:block/uuid id])))) + (defn get-initial-data "Returns current database schema and initial data. NOTE: This fn is called by DB and file graphs" @@ -355,9 +362,10 @@ user-datoms (get-all-user-datoms db) pages-datoms (if db-graph? (let [contents-id (get-first-page-by-title db "Contents") + capture-page-id (:db/id (get-built-in-page db common-config/quick-add-page-name)) views-id (get-first-page-by-title db common-config/views-page-name)] (mapcat #(d/datoms db :eavt %) - (remove nil? [contents-id views-id]))) + (remove nil? [contents-id capture-page-id views-id]))) ;; load all pages for file graphs (->> (d/datoms db :avet :block/name) (mapcat (fn [d] (d/datoms db :eavt (:e d)))))) diff --git a/deps/db/src/logseq/db/frontend/schema.cljs b/deps/db/src/logseq/db/frontend/schema.cljs index 7a0b3160bd..a2d392383f 100644 --- a/deps/db/src/logseq/db/frontend/schema.cljs +++ b/deps/db/src/logseq/db/frontend/schema.cljs @@ -37,7 +37,7 @@ (map (juxt :major :minor) [(parse-schema-version x) (parse-schema-version y)]))) -(def version (parse-schema-version "65.6")) +(def version (parse-schema-version "65.7")) (defn major-version "Return a number. diff --git a/deps/db/src/logseq/db/sqlite/create_graph.cljs b/deps/db/src/logseq/db/sqlite/create_graph.cljs index 682ca862d2..edb366de78 100644 --- a/deps/db/src/logseq/db/sqlite/create_graph.cljs +++ b/deps/db/src/logseq/db/sqlite/create_graph.cljs @@ -129,6 +129,7 @@ (def built-in-pages-names #{common-config/library-page-name + common-config/quick-add-page-name "Contents"}) (defn- validate-tx-for-duplicate-idents [tx] diff --git a/deps/db/src/logseq/db/sqlite/util.cljs b/deps/db/src/logseq/db/sqlite/util.cljs index ed16d630e6..b76e717499 100644 --- a/deps/db/src/logseq/db/sqlite/util.cljs +++ b/deps/db/src/logseq/db/sqlite/util.cljs @@ -6,6 +6,7 @@ [datascript.core] [datascript.impl.entity :as de] [datascript.transit :as dt] + [logseq.common.config :as common-config] [logseq.common.util :as common-util] [logseq.common.uuid :as common-uuid] [logseq.db.common.order :as db-order] @@ -105,10 +106,13 @@ "Builds a basic page to be transacted. A minimal version of gp-block/page-name->map" [title] (block-with-timestamps - {:block/name (common-util/page-name-sanity-lc title) - :block/title title - :block/uuid (common-uuid/gen-uuid :builtin-block-uuid title) - :block/tags #{:logseq.class/Page}})) + (cond-> + {:block/name (common-util/page-name-sanity-lc title) + :block/title title + :block/uuid (common-uuid/gen-uuid :builtin-block-uuid title) + :block/tags #{:logseq.class/Page}} + (contains? #{common-config/quick-add-page-name} title) + (assoc :logseq.property/hide? true)))) (defn kv "Creates a key-value pair tx with the key and value respectively stored under diff --git a/deps/db/test/logseq/db/sqlite/export_test.cljs b/deps/db/test/logseq/db/sqlite/export_test.cljs index 9fd06df80f..7024ba7228 100644 --- a/deps/db/test/logseq/db/sqlite/export_test.cljs +++ b/deps/db/test/logseq/db/sqlite/export_test.cljs @@ -697,6 +697,8 @@ ;; built-in pages {:page {:block/title "Library" :build/properties {:logseq.property/built-in? true}} :blocks []} + {:page {:block/title "Quick add" :build/properties {:logseq.property/built-in? true + :logseq.property/hide? true}}, :blocks []} {:page {:block/title "Contents" :build/properties {:logseq.property/built-in? true}} :blocks [{:block/title "right sidebar"}]} {:page {:block/title common-config/favorites-page-name diff --git a/src/main/frontend/components/command_palette.css b/src/main/frontend/components/command_palette.css index 7bb97b38d3..3d13428d38 100644 --- a/src/main/frontend/components/command_palette.css +++ b/src/main/frontend/components/command_palette.css @@ -4,14 +4,8 @@ &-main { max-height: var(--palettle-container-height); - margin: -2rem; - overflow: hidden; - display: flex; flex-direction: column; - - @screen lg { - width: var(--ls-main-content-max-width); - } + width: fit-content; .menu-link { transition: none; @@ -61,10 +55,6 @@ max-height: calc(var(--palettle-container-height) - var(--palettle-input-height)); } - .input-wrap { - height: var(--palettle-input-height); - } - .cp__palette-input { color: var(--ls-secondary-text-color); border: none; diff --git a/src/main/frontend/components/property.css b/src/main/frontend/components/property.css index a8740eeaef..23d36f9454 100644 --- a/src/main/frontend/components/property.css +++ b/src/main/frontend/components/property.css @@ -136,9 +136,6 @@ } .cp__select-main { - width: fit-content; - margin: 0; - .ui__dropdown-trigger { position: absolute; @@ -241,9 +238,6 @@ input.simple-input:focus { .page-add-tags, .page-tags, .property-select, .ls-property-add, .property-configure, .ui__dropdown-menu-content { .cp__select-main { - width: fit-content; - margin: 0; - .ui__dropdown-trigger { position: absolute; diff --git a/src/main/frontend/components/query/builder.css b/src/main/frontend/components/query/builder.css index 52aa658c64..f440207ac8 100644 --- a/src/main/frontend/components/query/builder.css +++ b/src/main/frontend/components/query/builder.css @@ -9,11 +9,6 @@ } } - .cp__select-main { - width: fit-content; - margin: 0; - } - .between-date { min-width: 36em; padding: 1em; diff --git a/src/main/frontend/components/quick_add.cljs b/src/main/frontend/components/quick_add.cljs new file mode 100644 index 0000000000..1e2c196b37 --- /dev/null +++ b/src/main/frontend/components/quick_add.cljs @@ -0,0 +1,37 @@ +(ns frontend.components.quick-add + "Quick add" + (:require [frontend.components.page :as page] + [frontend.date :as date] + [frontend.db :as db] + [frontend.handler.editor :as editor-handler] + [frontend.state :as state] + [logseq.common.config :as common-config] + [logseq.db :as ldb] + [logseq.shui.ui :as shui] + [rum.core :as rum])) + +(rum/defc quick-add < + {:will-mount (fn [state] + (state/clear-selection!) + state) + :will-unmount (fn [state] + (state/clear-edit!) + (state/clear-selection!) + state)} + [] + (when (db/get-page (date/today)) + (when-let [add-page (ldb/get-built-in-page (db/get-db) common-config/quick-add-page-name)] + [:div.ls-quick-capture.flex.flex-1.flex-col.w-full.gap-4 + [:div.font-medium.text-xl.border-b.pb-4 + "Quick add"] + [:div.block.-ml-6.content + (page/page-blocks-cp add-page {})] + [:div.flex.flex-row.gap-2.items-center + [:div + (shui/button + {:variant :outline + :size :sm + :on-click (fn [_e] + (editor-handler/quick-add-blocks!))} + (shui/shortcut ["mod" "e"]) + "Add to today")]]]))) diff --git a/src/main/frontend/components/select.cljs b/src/main/frontend/components/select.cljs index 6853ae707a..694aef936b 100644 --- a/src/main/frontend/components/select.cljs +++ b/src/main/frontend/components/select.cljs @@ -60,7 +60,6 @@ [(hooks/use-debounced-value @*input 100)]) [:div.input-wrap - {:style {:margin-bottom "-2px"}} [:input.cp__select-input.w-full (merge {:type "text" :class "!p-1.5" diff --git a/src/main/frontend/handler/editor.cljs b/src/main/frontend/handler/editor.cljs index 52a63d1b41..afebf02c74 100644 --- a/src/main/frontend/handler/editor.cljs +++ b/src/main/frontend/handler/editor.cljs @@ -52,6 +52,7 @@ [goog.object :as gobj] [goog.string :as gstring] [lambdaisland.glogi :as log] + [logseq.common.config :as common-config] [logseq.common.path :as path] [logseq.common.util :as common-util] [logseq.common.util.block-ref :as block-ref] @@ -68,6 +69,7 @@ [logseq.graph-parser.utf8 :as utf8] [logseq.outliner.core :as outliner-core] [logseq.outliner.property :as outliner-property] + [logseq.shui.dialog.core :as shui-dialog] [logseq.shui.popup.core :as shui-popup] [promesa.core :as p] [rum.core :as rum])) @@ -3990,3 +3992,37 @@ (save-block-inner! block "" {}) (when query-block (save-block-inner! query-block current-query {}))))))))) + +(defn show-quick-add + [] + (let [graph (state/get-current-repo)] + (p/do! + (db-async/ (-> (sqlite-util/build-new-page common-config/quick-add-page-name) + sqlite-create-graph/mark-block-as-built-in))] + [page])) + (def schema-version->updates "A vec of tuples defining datascript migrations. Each tuple consists of the schema version integer and a migration map. A migration map can have keys of :properties, :classes @@ -347,7 +353,8 @@ ["65.3" {:fix add-missing-db-ident-for-tags}] ["65.4" {:fix fix-using-properties-as-tags}] ["65.5" {:fix remove-block-order-for-tags}] - ["65.6" {:fix update-extends-to-cardinality-many}]]) + ["65.6" {:fix update-extends-to-cardinality-many}] + ["65.7" {:fix add-quick-add-page}]]) (let [[major minor] (last (sort (map (comp (juxt :major :minor) db-schema/parse-schema-version first) schema-version->updates)))] diff --git a/src/resources/dicts/en.edn b/src/resources/dicts/en.edn index e3a962024f..d9a658bd6a 100644 --- a/src/resources/dicts/en.edn +++ b/src/resources/dicts/en.edn @@ -680,6 +680,7 @@ :editor/cut "Cut" :editor/undo "Undo" :editor/redo "Redo" + :editor/quick-add "Quick add" :editor/insert-link "HTML Link" :editor/select-all-blocks "Select all blocks" :editor/select-parent "Select parent block"