浏览代码

feat: bring block timestamps back

Tienson Qin 4 年之前
父节点
当前提交
cac9470fbe

+ 4 - 3
src/main/frontend/components/block.cljs

@@ -2114,11 +2114,13 @@
            ;; exclude the current one, otherwise it'll loop forever
            remove-blocks (if current-block-uuid [current-block-uuid] nil)
            query-result (and query-atom (rum/react query-atom))
+           not-grouped-by-page? (and (string? query) (string/includes? query "(by-page false)"))
            result (when query-result
-                    (db/custom-query-result-transform query-result remove-blocks q))
+                    (db/custom-query-result-transform query-result remove-blocks q not-grouped-by-page?))
            view-f (and view (sci/eval-string (pr-str view)))
            only-blocks? (:block/uuid (first result))
            blocks-grouped-by-page? (and (seq result)
+                                        (not not-grouped-by-page?)
                                         (coll? (first result))
                                         (:block/name (ffirst result))
                                         (:block/uuid (first (second (first result))))
@@ -2159,8 +2161,7 @@
                                                               :path-params {:name name}})))}
                   (or original-name name)]])]
 
-             (and (seq result)
-                  (or only-blocks? blocks-grouped-by-page?))
+             (and (seq result) (or only-blocks? blocks-grouped-by-page?))
              (->hiccup result (cond-> (assoc config
                                              :custom-query? true
                                              ;; :breadcrumb-show? true

+ 10 - 1
src/main/frontend/components/settings.cljs

@@ -342,6 +342,14 @@
             (let [value (not enable-all-pages-public?)]
               (config-handler/set-config! :publishing/all-pages-public? value)))))
 
+(defn enable-block-timestamps-row [t enable-block-timestamps?]
+  (toggle "block timestamps"
+          (t :settings-page/enable-block-time)
+          enable-block-timestamps?
+          (fn []
+            (let [value (not enable-block-timestamps?)]
+              (config-handler/set-config! :feature/enable-block-timestamps? value)))))
+
 (defn encryption-row [t enable-encryption?]
   (toggle "enable_encryption"
           (t :settings-page/enable-encryption)
@@ -430,7 +438,7 @@
         logical-outdenting? (state/logical-outdenting?)
         enable-tooltip? (state/enable-tooltip?)
         enable-git-auto-push? (state/enable-git-auto-push? current-repo)
-        enable-block-time? (state/enable-block-time?)
+        enable-block-timestamps? (state/enable-block-timestamps?)
         show-brackets? (state/show-brackets?)
         github-token (state/sub [:me :access-token])
         cors-proxy (state/sub [:me :cors_proxy])
@@ -457,6 +465,7 @@
         (file-format-row t preferred-format)
         (date-format-row t preferred-date-format)
         (workflow-row t preferred-workflow)
+        (enable-block-timestamps-row t enable-block-timestamps?)
         (show-brackets-row t show-brackets?)
         (outdenting-row t logical-outdenting?)
         (tooltip-row t enable-tooltip?)

+ 23 - 13
src/main/frontend/db/query_dsl.cljs

@@ -299,16 +299,23 @@
                      (keyword (string/lower-case (name order)))
                      :desc)
              k (-> (string/lower-case (name k))
-                   (string/replace "-" "_"))]
-         (when (contains? #{"created_at" "last_modified_at"} k)
-           (let [comp (if (= order :desc) >= <=)]
-             (reset! sort-by
-                     (fn [result]
-                       (->> result
-                            flatten
-                            (clojure.core/sort-by #(get-in % [:block/properties k])
-                                                  comp))))
-             nil)))
+                   (string/replace "_" "-"))]
+         (let [get-value (cond
+                           (= k "created-at")
+                           :block/created-at
+
+                           (= k "updated-at")
+                           :block/updated-at
+
+                           :else
+                           #(get-in % [:block/properties k]))
+               comp (if (= order :desc) >= <=)]
+           (reset! sort-by
+                   (fn [result]
+                     (->> result
+                          flatten
+                          (clojure.core/sort-by get-value comp))))
+           nil))
 
        (= 'page fe)
        (let [page-name (string/lower-case (first (rest e)))
@@ -442,9 +449,12 @@
               result)
             (when-let [query (query-wrapper query blocks?)]
               (react/react-query repo
-                                 {:query query}
-                                 (if sort-by
-                                   {:transform-fn sort-by})))))))))
+                                 {:query query
+                                  :query-string query-string}
+                                 (cond->
+                                   {:use-cache? false}
+                                   sort-by
+                                   (assoc :transform-fn sort-by))))))))))
 
 (defn custom-query
   [repo query-m query-opts]

+ 2 - 2
src/main/frontend/db/query_react.cljs

@@ -50,7 +50,7 @@
     input))
 
 (defn custom-query-result-transform
-  [query-result remove-blocks q]
+  [query-result remove-blocks q not-grouped-by-page?]
   (try
     (let [repo (state/get-current-repo)
           result (db-utils/seq-flatten query-result)
@@ -75,7 +75,7 @@
                 (log/error :sci/call-error e)
                 result))
             result)
-          (if block?
+          (if (and block? (not not-grouped-by-page?))
             (db-utils/group-by-page result)
             result))))
     (catch js/Error e

+ 19 - 9
src/main/frontend/modules/outliner/core.cljs

@@ -10,7 +10,8 @@
             [clojure.set :as set]
             [clojure.zip :as zip]
             [frontend.modules.outliner.datascript :as ds]
-            [frontend.util :as util]))
+            [frontend.util :as util]
+            [frontend.util.property :as property]))
 
 (defrecord Block [data])
 
@@ -68,18 +69,13 @@
         properties (assoc (:block/properties m)
                           :id (:block/uuid m)
                           :updated-at updated-at)
-        properties (if-let [created-at (get properties :created-at)]
-                     properties
-                     (assoc properties :created-at updated-at))
-        m (assoc m :block/properties properties)
         page-id (or (get-in m [:block/page :db/id])
                     (:db/id (:block/page (db/entity (:db/id m)))))
         page (db/entity page-id)
-        page-properties (:block/properties page)
         page-tx {:db/id page-id
-                 :block/properties (assoc page-properties
-                                          :updated-at updated-at
-                                          :created-at (get page-properties :created-at updated-at))}]
+                 :block/updated-at updated-at
+                 :block/created-at (or (:block/created-at page)
+                                       updated-at)}]
     [m page-tx]))
 
 (defn- update-block-unordered
@@ -91,6 +87,19 @@
       (assoc block :block/unordered false)
       (assoc block :block/unordered true))))
 
+(defn- block-with-timestamps
+  [block]
+  (let [updated-at (util/time-ms)
+        block (cond->
+                (assoc block :block/updated-at updated-at)
+                (nil? (:block/created-at block))
+                (assoc :block/created-at updated-at))
+        content (property/insert-properties (:block/format block)
+                                            (or (:block/content block) "")
+                                            {:created-at (:block/created-at block)
+                                             :updated-at (:block/updated-at block)})]
+    (assoc block :block/content content)))
+
 ;; -get-id, -get-parent-id, -get-left-id return block-id
 ;; the :block/parent, :block/left should be datascript lookup ref
 
@@ -143,6 +152,7 @@
           m (-> (:data this)
                 (dissoc :block/children :block/meta)
                 (util/remove-nils))
+          m (if (state/enable-block-timestamps?) (block-with-timestamps m) m)
           other-tx (:db/other-tx m)]
       (when (seq other-tx)
         (swap! txs-state (fn [txs]

+ 3 - 6
src/main/frontend/state.cljs

@@ -260,13 +260,10 @@
   (not (false? (:git-auto-push
                 (get (sub-config) repo)))))
 
-(defn enable-block-time?
+(defn enable-block-timestamps?
   []
-  ;; (true? (:feature/enable-block-time?
-  ;;         (get (sub-config) (get-current-repo))))
-
-  ;; Disable block timestamps for now, because it doesn't work with undo/redo
-  false)
+  (true? (:feature/enable-block-timestamps?
+          (get (sub-config) (get-current-repo)))))
 
 (defn sub-graph-config
   []

+ 4 - 2
src/main/frontend/util/property.cljs

@@ -14,7 +14,7 @@
 
 (def built-in-properties
   (set/union
-   #{:id :custom-id :background-color :heading :collapsed :created-at :last-modified-at :created_at :last_modified_at}
+   #{:id :custom-id :background-color :heading :collapsed :created-at :updated-at :last-modified-at :created_at :last_modified_at}
    (set (map keyword config/markers))))
 
 (defn properties-built-in?
@@ -271,7 +271,9 @@
                                  (let [[k v] (util/split-first ":" (subs text 1))]
                                    (if (and k v)
                                      (let [k (string/replace k "_" "-")
-                                           k (if (contains? #{:id :custom_id :custom-id} (string/lower-case k)) "id" k)]
+                                           compare-k (keyword (string/lower-case k))
+                                           k (if (contains? #{:id :custom_id :custom-id} compare-k) "id" k)
+                                           k (if (contains? #{:last-modified-at} compare-k) "updated-at" k)]
                                        (str k ":: " (string/trim v)))
                                      text)))))
               after (subvec lines (inc end-idx))

+ 2 - 7
templates/config.edn

@@ -9,13 +9,6 @@
  ;; or ":todo" for TODO/DOING style.
  :preferred-workflow :now
 
- ;; Git is only available in web app
- ;; Git settings
- :git-pull-secs 60
- :git-push-secs 10
- ;; Whether to enable git auto push
- :git-auto-push true
-
  ;; The app will ignore those directories or files.
  ;; E.g. "/archived" "/test.md"
  :hidden []
@@ -30,6 +23,8 @@
  ;; Default is true, you can also toggle this via setting page
  :ui/enable-tooltip? true
 
+ :feature/enable-block-timestamps? false
+
  ;; Specify a custom CSS import
  ;; This option take precedence over your local `logseq/custom.css` file
  ;; You may find a list of awesome logseq themes here: