diff --git a/deps/graph-parser/src/logseq/graph_parser/exporter.cljs b/deps/graph-parser/src/logseq/graph_parser/exporter.cljs index 743d8b01b7..4ca91bab18 100644 --- a/deps/graph-parser/src/logseq/graph_parser/exporter.cljs +++ b/deps/graph-parser/src/logseq/graph_parser/exporter.cljs @@ -612,6 +612,8 @@ ;; Change to :node as dates can be pages but pages can't be dates (= {:from :date :to :node} type-change) (do + (swap! upstream-properties assoc prop {:schema {:logseq.property/type :node} + :from-type :date}) (swap! property-schemas assoc-in [prop :logseq.property/type] :node) (update-page-or-date-values page-names-to-uuids val)) @@ -2247,6 +2249,7 @@ (-> (select-keys options [:notify-user :default-config : (get f rpath-key) path/path-normalize)) logseq-file? #(string/starts-with? (normalized-rpath %) "logseq/") diff --git a/deps/graph-parser/test/logseq/graph_parser/exporter_test.cljs b/deps/graph-parser/test/logseq/graph_parser/exporter_test.cljs index 4664816a37..b98a3963f4 100644 --- a/deps/graph-parser/test/logseq/graph_parser/exporter_test.cljs +++ b/deps/graph-parser/test/logseq/graph_parser/exporter_test.cljs @@ -263,7 +263,7 @@ set)))) (testing "user properties" - (is (= 20 + (is (= 21 (->> @conn (d/q '[:find [(pull ?b [:db/ident]) ...] :where [?b :block/tags :logseq.class/Property]]) diff --git a/deps/graph-parser/test/resources/exporter-test-graph/journals/2024_02_16.md b/deps/graph-parser/test/resources/exporter-test-graph/journals/2024_02_16.md index 1ef17f051a..e6c3a810dc 100644 --- a/deps/graph-parser/test/resources/exporter-test-graph/journals/2024_02_16.md +++ b/deps/graph-parser/test/resources/exporter-test-graph/journals/2024_02_16.md @@ -1,8 +1,6 @@ - test :dates startedAt:: [[Feb 6th, 2024]] finishedAt:: [[Feb 7th, 2024]] -- test :date -> :node - finishedAt:: [[Gabriel]] - MEETING TITLE template:: meeting participants:: TODO diff --git a/deps/graph-parser/test/resources/exporter-test-graph/journals/2024_02_23.md b/deps/graph-parser/test/resources/exporter-test-graph/journals/2024_02_23.md index 43895ff968..b621f96d60 100644 --- a/deps/graph-parser/test/resources/exporter-test-graph/journals/2024_02_23.md +++ b/deps/graph-parser/test/resources/exporter-test-graph/journals/2024_02_23.md @@ -1,3 +1,5 @@ - The Creator type:: [[Movie]] - testTagClass:: #Movie \ No newline at end of file + testTagClass:: #Movie +- test :date -> :node + finishedAt:: [[Gabriel]] \ No newline at end of file diff --git a/deps/graph-parser/test/resources/exporter-test-graph/journals/2026_01_27.md b/deps/graph-parser/test/resources/exporter-test-graph/journals/2026_01_27.md index bcaffb0cf6..fe8759e9f8 100644 --- a/deps/graph-parser/test/resources/exporter-test-graph/journals/2026_01_27.md +++ b/deps/graph-parser/test/resources/exporter-test-graph/journals/2026_01_27.md @@ -1 +1,3 @@ -- 2nd instance of block w/ longer ns tag #n1/n2/n3 \ No newline at end of file +- 2nd instance of block w/ longer ns tag #n1/n2/n3 +- property pages with '/' should be valid +key/value:: 1 \ No newline at end of file diff --git a/src/electron/electron/handler.cljs b/src/electron/electron/handler.cljs index a20c0d8e5c..6d800b22b7 100644 --- a/src/electron/electron/handler.cljs +++ b/src/electron/electron/handler.cljs @@ -428,8 +428,7 @@ (.close win)) (defmethod handle :theme-loaded [^js win] - (.manage (windowStateKeeper) win) - (.show win)) + (.manage (windowStateKeeper) win)) (defmethod handle :keychain/save-e2ee-password [_window [_ key encrypted-text]] (keychain/js {:cancel false :requestHeaders headers}))))) + ;; Show window as soon as it's ready + (.once win "ready-to-show" #(.show win)) (.loadURL win url) ;;(when dev? (.. win -webContents (openDevTools))) win))) diff --git a/src/main/frontend/components/imports.cljs b/src/main/frontend/components/imports.cljs index cc73cec822..39afdf067c 100644 --- a/src/main/frontend/components/imports.cljs +++ b/src/main/frontend/components/imports.cljs @@ -67,6 +67,7 @@ (defn- finished-cb [] + (state/pub-event! [:graph/sync-context]) (notification/show! "Import finished!" :success) (shui/dialog-close! :import-indicator) (route-handler/redirect-to-home!) diff --git a/src/main/frontend/components/property.cljs b/src/main/frontend/components/property.cljs index abea566664..8e5cf30756 100644 --- a/src/main/frontend/components/property.cljs +++ b/src/main/frontend/components/property.cljs @@ -182,7 +182,8 @@ (if plugin? [:span.pt-1 (shui/tabler-icon "puzzle" {:size 15 :class "opacity-40"})] [:span.pt-1 (shui/tabler-icon "letter-t" {:size 15 :class "opacity-40"})]) - [:strong.font-normal (:block/title x)]])) + [:strong.font-normal (:block/title x) + (when plugin? [:span.ml-1.text-xs.opacity-40 (str "" _plugin-name)])]])) :value (:block/uuid x) :block/title (:block/title x) :convert-page-to-property? convert?})) properties) diff --git a/src/main/frontend/components/property.css b/src/main/frontend/components/property.css index f5085dd82a..2d5b63d3a6 100644 --- a/src/main/frontend/components/property.css +++ b/src/main/frontend/components/property.css @@ -185,7 +185,7 @@ } -.positioned-properties, .property-value-inner { +.positioned-properties, .property-value-inner, .ls-icon-color-wrap { .select-item { @apply flex items-center shrink-0; } @@ -193,6 +193,14 @@ .ls-icon-priorityLvlUrgent { @apply text-orange-rx-08; } + + .ls-icon-priorityLvlMedium { + @apply opacity-80; + } + + .ls-icon-priorityLvlLow { + @apply opacity-60; + } } .property-value-inner { diff --git a/src/main/frontend/components/settings.cljs b/src/main/frontend/components/settings.cljs index ff3912dec1..0d3dd25654 100644 --- a/src/main/frontend/components/settings.cljs +++ b/src/main/frontend/components/settings.cljs @@ -910,6 +910,7 @@ (rum/defc settings-rtc-members [] (let [[invite-email set-invite-email!] (hooks/use-state "") + [loading? set-loading!] (hooks/use-state true) current-repo (state/get-current-repo) [users-info] (hooks/use-atom (:rtc/users-info @state/state)) users (get users-info current-repo) @@ -919,7 +920,10 @@ (when graph-uuid (rtc-handler/user-user-type :graph<->user/user-type} users] - [:div.flex.flex-row.items-center.gap-2 {:key (str "user-" user-name)} - [:div user-name] - (when user-email [:div.opacity-50.text-sm user-email]) - (when graph<->user-user-type [:div.opacity-50.text-sm (name graph<->user-user-type)])])] + (if loading? + (for [i (range 2)] + [:div.flex.flex-row.items-center.gap-2.pr-4 {:key (str "skeleton-" i)} + (shui/skeleton {:class "h-4 w-32"}) + (shui/skeleton {:class "h-4 w-full"})]) + (for [{user-name :user/name + user-email :user/email + graph<->user-user-type :graph<->user/user-type} users] + [:div.flex.flex-row.items-center.gap-2 {:key (str "user-" user-name)} + [:div user-name] + (when user-email [:div.opacity-50.text-sm user-email]) + (when graph<->user-user-type [:div.opacity-50.text-sm (name graph<->user-user-type)])]))] [:div.flex.flex-col.gap-4.mt-4 (shui/input {:placeholder "Email address" diff --git a/src/main/frontend/components/theme.cljs b/src/main/frontend/components/theme.cljs index 8168390c25..89d33e2335 100644 --- a/src/main/frontend/components/theme.cljs +++ b/src/main/frontend/components/theme.cljs @@ -33,8 +33,6 @@ {:ref *el :class "top-1/2 -left-1/2 z-[-999]"}])) -(defonce *once-theme-loaded? (volatile! false)) - (rum/defc ^:large-vars/cleanup-todo container < rum/static [{:keys [route theme accent-color editor-font on-click current-repo db-restoring? settings-open? sidebar-open? system-theme? sidebar-blocks-len preferred-language]} child] @@ -76,10 +74,7 @@ [preferred-language]) (hooks/use-effect! - #(js/setTimeout - (fn [] (when-not @*once-theme-loaded? - (ipc/ipc :theme-loaded) - (vreset! *once-theme-loaded? true))) 100) ; Wait for the theme to be applied + #(ipc/ipc :theme-loaded) []) (hooks/use-effect! diff --git a/src/main/frontend/db/model.cljs b/src/main/frontend/db/model.cljs index c82f0f90f4..0700178897 100644 --- a/src/main/frontend/db/model.cljs +++ b/src/main/frontend/db/model.cljs @@ -341,7 +341,11 @@ independent of format as format specific heading characters are stripped" remove-non-queryable-built-in-property? false remove-ui-non-suitable-properties? false}}] (let [db (conn/get-db graph) - result (sort-by (juxt ldb/built-in? :block/title) + result (sort-by (juxt (fn [p] (-> (:db/ident p) + (db-property/plugin-property?) + (boolean))) + ldb/built-in? + :block/title) (ldb/get-all-properties db))] (cond->> result remove-built-in-property? diff --git a/src/main/logseq/api/db_based.cljs b/src/main/logseq/api/db_based.cljs index 84d8a747fc..88d764d614 100644 --- a/src/main/logseq/api/db_based.cljs +++ b/src/main/logseq/api/db_based.cljs @@ -199,7 +199,7 @@ (let [k (keyword (api-block/sanitize-user-property-name class-uuid-or-ident-or-title))] (if (qualified-keyword? k) k - (ldb/get-case-page (db/get-db) class-uuid-or-ident-or-title)))) + (some-> (ldb/get-case-page (db/get-db) class-uuid-or-ident-or-title) :db/id)))) class (db/entity eid)] (when-not (ldb/class? class) (throw (ex-info "Not a tag" {:input class-uuid-or-ident-or-title})))