Просмотр исходного кода

Add properties for repeated tasks

Tienson Qin 1 год назад
Родитель
Сommit
5e1bc47c32

+ 30 - 1
deps/db/src/logseq/db/frontend/property.cljs

@@ -305,8 +305,37 @@
              :position :block-below}
     :properties {:logseq.property/hide-empty-value true}
     :queryable? true}
+   :logseq.task/scheduled
+   {:title "Scheduled"
+    :schema {:type :datetime
+             :public? true
+             :position :block-below}
+    :properties {:logseq.property/hide-empty-value true}
+    :queryable? true}
+   :logseq.task/recur-frequency
+   {:title "Recur frequency"
+    :schema {:type :number
+             :public? false}
+    :properties {:logseq.property/hide-empty-value true}
+    :queryable? true}
+   :logseq.task/recur-unit
+   {:title "Recur unit"
+    :schema {:type :number
+             :public? false}
+    :closed-values (mapv (fn [[db-ident value]]
+                           {:db-ident db-ident
+                            :value value
+                            :uuid (common-uuid/gen-uuid :db-ident-block-uuid db-ident)})
+                         [[:logseq.task/recur-unit.minute "Minute"]
+                          [:logseq.task/recur-unit.hour "Hour"]
+                          [:logseq.task/recur-unit.day "Day"]
+                          [:logseq.task/recur-unit.week "Week"]
+                          [:logseq.task/recur-unit.month "Month"]
+                          [:logseq.task/recur-unit.year "Year"]])
+    :properties {:logseq.property/hide-empty-value true}
+    :queryable? true}
 
-   ;; TODO: Add more props :Assignee, :Estimate, :Cycle, :Project
+;; TODO: Add more props :Assignee, :Estimate, :Cycle, :Project
 
    :logseq.property/icon {:title "Icon"
                           :schema {:type :map}}

+ 1 - 1
deps/db/src/logseq/db/frontend/schema.cljs

@@ -2,7 +2,7 @@
   "Main datascript schemas for the Logseq app"
   (:require [clojure.set :as set]))
 
-(def version 51)
+(def version 52)
 
 ;; A page is a special block, a page can corresponds to multiple files with the same ":block/name".
 (def ^:large-vars/data-var schema

+ 11 - 1
src/main/frontend/worker/db/migrate.cljs

@@ -445,6 +445,14 @@
      tx-data
      [[:db/retractEntity (:db/id block-type-entity)]])))
 
+(defn- add-scheduled-to-task
+  [conn _search-db]
+  (let [db @conn]
+    (when (ldb/db-based-graph? db)
+      (let [e (d/entity db :logseq.class/Task)
+            eid (:db/id e)]
+        [[:db/add eid :logseq.property.class/properties :logseq.task/scheduled]]))))
+
 (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
@@ -524,7 +532,9 @@
    [48 {:properties [:logseq.property/default-value :logseq.property/scalar-default-value]}]
    [49 {:fix replace-special-id-ref-with-id-ref}]
    [50 {:classes [:logseq.class/Property :logseq.class/Tag :logseq.class/Page :logseq.class/Whiteboard]}]
-   [51 {:fix replace-block-type-with-tags}]])
+   [51 {:fix replace-block-type-with-tags}]
+   [52 {:properties [:logseq.task/scheduled :logseq.task/recur-frequency :logseq.task/recur-unit]
+        :fix add-scheduled-to-task}]])
 
 (let [max-schema-version (apply max (map first schema-version->updates))]
   (assert (<= db-schema/version max-schema-version))