فهرست منبع

enhance: enable repeated tasks for :date properties too

Tienson Qin 11 ماه پیش
والد
کامیت
5efcc0ed5a
3فایلهای تغییر یافته به همراه37 افزوده شده و 24 حذف شده
  1. 26 19
      src/main/frontend/components/property/value.cljs
  2. 1 1
      src/main/frontend/components/repo.css
  3. 10 4
      src/main/frontend/worker/commands.cljs

+ 26 - 19
src/main/frontend/components/property/value.cljs

@@ -245,7 +245,7 @@
 
       ;; recur unit
       [:div.w-20
-       (property-value block (db/entity :logseq.task/recur-unit) opts)]]
+       (property-value block (db/entity :logseq.task/recur-unit) (assoc opts :property property))]]
      (let [properties (->>
                        (outliner-property/get-block-full-properties (db/get-db) (:db/id block))
                        (filter (fn [property]
@@ -337,10 +337,8 @@
          :on-day-click select-handler!}
          initial-month
          (assoc :default-month initial-month)))]
-     (when datetime?
-       (shui/separator {:orientation "vertical"}))
-     (when datetime?
-       (repeat-setting block property))]))
+     (shui/separator {:orientation "vertical"})
+     (repeat-setting block property)]))
 
 (rum/defc overdue
   [date content]
@@ -389,11 +387,13 @@
                       :label (human-date-label date)}
                      {:block/name page-title})
             page-title)))
-      (let [date (js/Date. value)]
+      (let [date (js/Date. value)
+            hours (.getHours date)
+            minutes (.getMinutes date)]
         [:span
-         (str (util/zero-pad (.getHours date))
+         (str (util/zero-pad hours)
               ":"
-              (util/zero-pad (.getMinutes date)))])])))
+              (util/zero-pad minutes))])])))
 
 (rum/defc date-picker
   [value {:keys [block property datetime? on-change on-delete del-btn? editing? multiple-values? other-position?]}]
@@ -780,7 +780,7 @@
                     ::refresh-result-f refresh-result-f)))}
   [state block property
    {:keys [multiple-choices? dropdown? content-props] :as select-opts}
-   {:keys [*show-new-property-config? exit-edit?]}]
+   {:keys [*show-new-property-config? exit-edit?] :as opts}]
   (let [*values (::values state)
         refresh-result-f (::refresh-result-f state)
         values (rum/react *values)
@@ -791,16 +791,23 @@
             closed-values? (seq (:property/closed-values property))
             ref-type? (db-property-type/all-ref-property-types type)
             items (if closed-values?
-                    (keep (fn [block]
-                            (let [icon (pu/get-block-property-value block :logseq.property/icon)
-                                  value (db-property/closed-value-content block)]
-                              {:label (if icon
-                                        [:div.flex.flex-row.gap-1.items-center
-                                         (icon-component/icon icon {:color? true})
-                                         value]
-                                        value)
-                               :value (:db/id block)
-                               :label-value value})) (:property/closed-values property))
+                    (let [date? (and
+                                 (= (:db/ident property) :logseq.task/recur-unit)
+                                 (= :date (get-in (:property opts) [:block/schema :type])))
+                          values (cond->> (:property/closed-values property)
+                                   date?
+                                   (remove (fn [b] (contains? #{:logseq.task/recur-unit.minute :logseq.task/recur-unit.hour} (:db/ident b)))))]
+                      (keep (fn [block]
+                              (let [icon (pu/get-block-property-value block :logseq.property/icon)
+                                    value (db-property/closed-value-content block)]
+                                {:label (if icon
+                                          [:div.flex.flex-row.gap-1.items-center
+                                           (icon-component/icon icon {:color? true})
+                                           value]
+                                          value)
+                                 :value (:db/id block)
+                                 :label-value value}))
+                            values))
                     (->> values
                          (mapcat (fn [value]
                                    (if (coll? value)

+ 1 - 1
src/main/frontend/components/repo.css

@@ -89,7 +89,7 @@
     }
 
     > .ui__icon {
-      @apply absolute -right-1 top-2 opacity-60;
+      @apply absolute -right-1 top-2 opacity-40;
     }
   }
 

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

@@ -96,6 +96,7 @@
 (defmethod handle-command :reschedule [_ db entity]
   (let [property-ident (or (:db/ident (:logseq.task/reschedule-property entity))
                            :logseq.task/scheduled)
+        property (when property-ident (d/entity db property-ident))
         frequency (db-property/property-value-content (:logseq.task/recur-frequency entity))
         unit (:logseq.task/recur-unit entity)]
     (when (and frequency unit)
@@ -111,11 +112,16 @@
             journal-day (outliner-pipeline/get-journal-day-from-long db next-time-long)
             create-journal-page (when-not journal-day
                                   (let [formatter (:logseq.property.journal/title-format (d/entity db :logseq.class/Journal))
-                                        title (date-time-util/format next-time formatter)]
-                                    (worker-db-page/create db title {:create-first-block? false})))]
+                                        title (date-time-util/format (t/to-default-time-zone next-time) formatter)]
+                                    (worker-db-page/create db title {:create-first-block? false})))
+            value (if (= :datetime (get-in property [:block/schema :type]))
+                    next-time-long
+                    (or journal-day
+                        [:block/uuid (:page-uuid create-journal-page)]))]
         (concat
-         [[:db/add (:db/id entity) property-ident next-time-long]]
-         (:tx-data create-journal-page))))))
+         (:tx-data create-journal-page)
+         (when value
+           [[:db/add (:db/id entity) property-ident value]]))))))
 
 (defmethod handle-command :set-property [_ _db entity property value]
   (let [property' (get-property entity property)