From 6e2dbc31487ef8b668a56cf0aa3816b30d24377f Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Thu, 9 Apr 2026 03:43:05 +0800 Subject: [PATCH] fix(journals): hide recycled journals and refresh list on recycle --- .../db/src/logseq/db/common/initial_data.cljs | 4 ++- src/main/frontend/worker/react.cljs | 28 ++++++++++++++----- src/test/frontend/db/model_test.cljs | 14 ++++++++++ src/test/frontend/worker/react_test.cljs | 11 ++++++++ 4 files changed, 49 insertions(+), 8 deletions(-) diff --git a/deps/db/src/logseq/db/common/initial_data.cljs b/deps/db/src/logseq/db/common/initial_data.cljs index f8bece5cbe..15f3dd19c8 100644 --- a/deps/db/src/logseq/db/common/initial_data.cljs +++ b/deps/db/src/logseq/db/common/initial_data.cljs @@ -256,7 +256,9 @@ (keep (fn [d] (when (<= (:v d) today) (let [e (d/entity db (:e d))] - (when (and (entity-util/journal? e) (:db/id e)) + (when (and (entity-util/journal? e) + (:db/id e) + (not (entity-util/recycled? e))) e)))))))) (defn- get-structured-datoms diff --git a/src/main/frontend/worker/react.cljs b/src/main/frontend/worker/react.cljs index a2ab611e71..df8f4ab036 100644 --- a/src/main/frontend/worker/react.cljs +++ b/src/main/frontend/worker/react.cljs @@ -31,9 +31,16 @@ (s/def ::affected-keys (s/coll-of ::react-query-keys)) +(defn- journal-page? + [db eid journal-tag-id] + (when (and db eid journal-tag-id) + (some (fn [tag] + (= journal-tag-id (:db/id tag))) + (:block/tags (d/entity db eid))))) + (defn get-affected-queries-keys "Get affected queries through transaction datoms." - [{:keys [tx-data db-after]}] + [{:keys [tx-data db-before db-after]}] {:post [(s/valid? ::affected-keys %)]} (let [blocks (->> (filter (fn [datom] (contains? #{:block/parent :block/page} (:a datom))) tx-data) (map :v) @@ -47,12 +54,19 @@ tags (->> (filter (fn [datom] (= :block/tags (:a datom))) tx-data) (map :v) (distinct)) - journals? (some (fn [datom] - (and - (= :block/tags (:a datom)) - (= (:db/id (d/entity db-after :logseq.class/Journal)) - (:v datom)))) - tx-data) + journal-tag-id (:db/id (d/entity db-after :logseq.class/Journal)) + touched-eids (->> tx-data (map :e) distinct) + journals? (or (some (fn [datom] + (and (= :block/tags (:a datom)) + (= journal-tag-id (:v datom)))) + tx-data) + (some (fn [datom] + (= :block/journal-day (:a datom))) + tx-data) + (some (fn [eid] + (or (journal-page? db-before eid journal-tag-id) + (journal-page? db-after eid journal-tag-id))) + touched-eids)) reaction-targets (->> (filter (fn [datom] (= :logseq.property.reaction/target (:a datom))) tx-data) (map :v) diff --git a/src/test/frontend/db/model_test.cljs b/src/test/frontend/db/model_test.cljs index a1d18ea0c7..3d80add63c 100644 --- a/src/test/frontend/db/model_test.cljs +++ b/src/test/frontend/db/model_test.cljs @@ -86,6 +86,20 @@ (is (= 1 (:db/id (db/entity test-db 1)))) (is (= 1 (:db/id (db/entity (conn/get-db test-db) 1))))) +(deftest get-latest-journals-should-exclude-recycled-journal-pages + (load-test-files + [{:page {:build/journal 20240101}} + {:page {:build/journal 20240102}} + {:page {:build/journal 20240103}}]) + (let [journal-2024-01-02-id (ffirst (d/q '[:find ?e + :where + [?e :block/journal-day 20240102]] + (conn/get-db test-db)))] + (db/transact! test-db [{:db/id journal-2024-01-02-id + :logseq.property/deleted-at 1704196800000}])) + (is (= [20240103 20240101] + (mapv :block/journal-day (model/get-latest-journals test-db 10))))) + (deftest get-block-by-page-name-and-block-route-name (load-test-files [{:page {:block/title "foo"} diff --git a/src/test/frontend/worker/react_test.cljs b/src/test/frontend/worker/react_test.cljs index f3c19c2b74..337ff2a755 100644 --- a/src/test/frontend/worker/react_test.cljs +++ b/src/test/frontend/worker/react_test.cljs @@ -19,3 +19,14 @@ :logseq.property.reaction/target target-id}]) affected (worker-react/get-affected-queries-keys tx-report)] (is (some #{[:frontend.worker.react/block-reactions target-id]} affected))))) + +(deftest affected-keys-journals-when-journal-recycled + (testing "recycling a journal page should refresh journals query key" + (let [conn (db-test/create-conn-with-blocks + [{:page {:build/journal 20240101}} + {:page {:build/journal 20240102}}]) + journal (db-test/find-journal-by-journal-day @conn 20240102) + tx-report (d/transact! conn [{:db/id (:db/id journal) + :logseq.property/deleted-at 1704196800000}]) + affected (worker-react/get-affected-queries-keys tx-report)] + (is (some #{[:frontend.worker.react/journals]} affected)))))