浏览代码

fix: page filters

close #1702
Tienson Qin 4 年之前
父节点
当前提交
043cc2a9ad

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

@@ -1284,12 +1284,23 @@
 (rum/defc properties-cp
   [config block]
   (let [properties (walk/keywordize-keys (:block/properties block))
-        properties (apply dissoc properties text/hidden-properties)]
-    (when (seq properties)
+        properties (apply dissoc properties text/hidden-properties)
+        pre-block? (:block/pre-block? block)
+        properties (if pre-block?
+                     (dissoc properties :title :filters)
+                     properties)]
+    (cond
+      (seq properties)
       [:div.blocks-properties.text-sm.opacity-80.my-1.p-2
        (for [[k v] properties]
          (rum/with-key (property-cp config block k v)
-           (str (:block/uuid block) "-" k)))])))
+           (str (:block/uuid block) "-" k)))]
+
+      (and pre-block? properties)
+      [:span.opacity-50 "Properties"]
+
+      :else
+      nil)))
 
 (rum/defcs timestamp-cp < rum/reactive
   (rum/local false ::show?)

+ 3 - 3
src/main/frontend/components/reference.cljs

@@ -19,7 +19,7 @@
 
 (rum/defc filter-dialog-inner < rum/reactive
   [close-fn references page-name]
-  (let [filter-state (page-handler/get-filter page-name)]
+  (let [filter-state (page-handler/get-filters page-name)]
     [:div.filters
      [:div.sm:flex.sm:items-start
       [:div.mx-auto.flex-shrink-0.flex.items-center.justify-center.h-12.w-12.rounded-full.bg-gray-200.text-gray-500.sm:mx-0.sm:h-10.sm:w-10
@@ -73,8 +73,8 @@
                                    (db/get-date-scheduled-or-deadlines (string/capitalize page-name))
                                    nil)
           references (db/get-page-linked-refs-refed-pages repo page-name)
-          filter-state (rum/react (page-handler/get-filter page-name))
-          included (filter (fn [[x v]]) filter-state)
+          filters (page-handler/get-filters page-name)
+          filter-state (rum/react filters)
           filters (when (seq filter-state)
                     (->> (group-by second filter-state)
                          (medley/map-vals #(map first %))))

+ 1 - 1
src/main/frontend/db.cljs

@@ -53,7 +53,7 @@
   set-file-content! has-children?]
 
  [frontend.db.react
-  get-current-marker get-current-page get-current-priority get-handler-keys set-key-value
+  get-current-marker get-current-page get-current-priority set-key-value
   transact-react! remove-key! remove-q! remove-query-component! add-q! add-query-component! clear-query-state!
   clear-query-state-without-refs-and-embeds! get-block-blocks-cache-atom get-page-blocks-cache-atom kv q
   query-state query-components query-entity-in-component remove-custom-query! set-new-result! sub-key-value refresh!]

+ 9 - 9
src/main/frontend/db/react.cljs

@@ -191,7 +191,7 @@
         (and (util/marker? page-name)
              (string/upper-case page-name))))))
 
-(defn get-handler-keys
+(defn get-related-keys
   [{:keys [key data]}]
   (cond
     (coll? key)
@@ -206,7 +206,7 @@
               current-marker (get-current-marker)
               current-page-id (:db/id (get-current-page))
               {:block/keys [page]} (first blocks)
-              handler-keys (->>
+              related-keys (->>
                             (util/concat-without-nil
                              (mapcat
                               (fn [block]
@@ -251,7 +251,7 @@
                            (fn [[k page-id]]
                              (if (= k :block/refed-blocks)
                                [:page/ref-pages page-id]))
-                           handler-keys)
+                           related-keys)
               custom-queries (some->>
                               (filter (fn [v]
                                         (and (= (first v) (state/get-current-repo))
@@ -268,7 +268,7 @@
                                    (vec (drop 1 v)))))]
           (->>
            (util/concat-without-nil
-            handler-keys
+            related-keys
             refed-pages
             custom-queries
             block-blocks)
@@ -277,11 +277,11 @@
 
 (defn refresh!
   [repo-url {:keys [key data] :as handler-opts}]
-  (let [handler-keys (get-handler-keys handler-opts)
+  (let [related-keys (get-related-keys handler-opts)
         db (conn/get-conn repo-url)]
-    (doseq [handler-key handler-keys]
-      (let [handler-key (vec (cons repo-url handler-key))]
-        (when-let [cache (get @query-state handler-key)]
+    (doseq [related-key related-keys]
+      (let [related-key (vec (cons repo-url related-key))]
+        (when-let [cache (get @query-state related-key)]
           (let [{:keys [query inputs transform-fn query-fn inputs-fn]} cache]
             (when (or query query-fn)
               (let [new-result (->
@@ -304,7 +304,7 @@
                                   :else
                                   (d/q query db))
                                 transform-fn)]
-                (set-new-result! handler-key new-result)))))))))
+                (set-new-result! related-key new-result)))))))))
 
 (defn transact-react!
   [repo-url tx-data {:keys [key data] :as handler-opts}]

+ 17 - 9
src/main/frontend/handler/page.cljs

@@ -64,7 +64,8 @@
           pre-block (db/get-pre-block repo (:db/id page))
           format (state/get-preferred-format)
           page-id {:db/id (:db/id page)}
-          org? (= format :org)]
+          org? (= format :org)
+          value (if (contains? #{:filters} key) (pr-str value) value)]
       (if pre-block
         (let [properties (:block/properties pre-block)
               new-properties (assoc properties key value)
@@ -74,9 +75,10 @@
               block {:db/id (:db/id pre-block)
                      :block/properties new-properties
                      :block/content new-content
-                     :block/page page}
+                     :block/page page-id}
               tx [(assoc page-id :block/properties new-properties)
                   block]]
+          ;; (util/pprint tx)
           (db/transact! tx)
           (db/refresh! repo {:key :block/change
                              :data [block]}))
@@ -97,7 +99,9 @@
                                      false)
           (db/transact! [(assoc page-id :block/properties {key value})])
           (db/refresh! repo {:key :block/change
-                             :data [block]})))
+                             :data [block]})
+          ;; (ui-handler/re-render-root!)
+          ))
       (outliner-file/sync-to-file page-id))))
 
 (defn get-plugins
@@ -353,14 +357,18 @@
   (->> (db/get-modified-pages repo)
        (remove util/file-page?)))
 
+(defonce filters-state (atom nil))
+(defn get-filters
+  [page-name]
+  (let [properties (db/get-page-properties page-name)
+        filters (reader/read-string (get properties :filters "{}"))]
+    (reset! filters-state filters)
+    filters-state))
+
 (defn save-filter!
   [page-name filter-state]
-  (page-add-property! page-name :filters filter-state))
-
-(defn get-filter
-  [page-name]
-  (let [properties (db/get-page-properties page-name)]
-    (atom (reader/read-string (get-in properties [:filters] "{}")))))
+  (page-add-property! page-name :filters filter-state)
+  (reset! filters-state (pr-str filter-state)))
 
 (defn page-exists?
   [page-name]

+ 4 - 1
src/main/frontend/modules/file/core.cljs

@@ -26,7 +26,10 @@
         heading-with-title? (seq title)]
     (cond
       pre-block?
-      (str (string/trim content) "\n")
+      (let [content (-> (string/trim content)
+                        ;; FIXME: should only works with :filters
+                        (string/replace "\"" "\\\""))]
+        (str content "\n"))
 
       (and (= format :markdown)
            (re-find #"#+\s+" content))

+ 0 - 6
src/main/frontend/util.cljc

@@ -4,7 +4,6 @@
    #?(:cljs [cljs-bean.core :as bean])
    #?(:cljs [cljs-time.coerce :as tc])
    #?(:cljs [cljs-time.core :as t])
-   #?(:cljs [cljs-time.format :as format])
    #?(:cljs [dommy.core :as d])
    #?(:cljs ["/frontend/caret_pos" :as caret-pos])
    #?(:cljs ["/frontend/selection" :as selection])
@@ -839,11 +838,6 @@
        (js/document.execCommand "copy")
        (js/document.body.removeChild el))))
 
-(defn take-at-most
-  [s n]
-  (if (<= (count s) n)
-    s
-    (subs s 0 n)))
 (def uuid-pattern "[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}")
 (defonce exactly-uuid-pattern (re-pattern (str "^" uuid-pattern "$")))
 (defn uuid-string?