1
0
Эх сурвалжийг харах

feat: reset both scheduled and deadline for repeat tasks when done

Tienson Qin 4 сар өмнө
parent
commit
6b39fdaafe

+ 19 - 4
src/main/frontend/worker/commands.cljs

@@ -151,10 +151,9 @@
                         (t/plus default-timezone-time delta))]
         (tc/to-long next-time)))))
 
-(defmethod handle-command :reschedule [_ conn db entity _datoms]
-  (let [property-ident (or (:db/ident (:logseq.property.repeat/temporal-property entity))
-                           :logseq.property/scheduled)
-        frequency (or (db-property/property-value-content (:logseq.property.repeat/recur-frequency entity))
+(defn- compute-reschedule-property-tx
+  [conn db entity property-ident]
+  (let [frequency (or (db-property/property-value-content (:logseq.property.repeat/recur-frequency entity))
                       (let [property (d/entity db :logseq.property.repeat/recur-frequency)
                             default-value-block (db-property-build/build-property-value-block property property 1)
                             default-value-tx-data [default-value-block
@@ -183,6 +182,22 @@
            (when value
              [[:db/add (:db/id entity) property-ident value]])))))))
 
+(defmethod handle-command :reschedule [_ conn db entity _datoms]
+  (let [property-ident (or (:db/ident (:logseq.property.repeat/temporal-property entity))
+                           :logseq.property/scheduled)
+        other-property-idents (cond
+                                (and (= property-ident :logseq.property/scheduled)
+                                     (:logseq.property/deadline entity))
+                                [:logseq.property/deadline]
+
+                                (and (= property-ident :logseq.property/deadline)
+                                     (:logseq.property/scheduled entity))
+                                [:logseq.property/scheduled]
+
+                                :else
+                                (filter (fn [p] (get entity p)) [:logseq.property/deadline :logseq.property/scheduled]))]
+    (mapcat #(compute-reschedule-property-tx conn db entity %) (distinct (cons property-ident other-property-idents)))))
+
 (defmethod handle-command :set-property [_ _db _conn entity _datoms property value]
   (let [property' (get-property entity property)
         value' (get-value entity property value)]