|
|
@@ -14,6 +14,7 @@
|
|
|
[frontend.ui :as ui]
|
|
|
[frontend.date :as date]
|
|
|
[frontend.commands :as commands]
|
|
|
+ [frontend.components.editor :as editor]
|
|
|
[cljs-time.core :as t]
|
|
|
[cljs-time.local :as tl]
|
|
|
[cljs-time.coerce :as tc]
|
|
|
@@ -261,23 +262,21 @@
|
|
|
|
|
|
(defn- query-scheduled
|
|
|
"Return blocks scheduled to 'time' or before"
|
|
|
- [repo {query-string :query-string query-result :query-result} time]
|
|
|
- (when-let [*blocks (or query-result (and query-string (query repo query-string)))]
|
|
|
- (when-let [blocks @*blocks]
|
|
|
- (let [filtered-result (->>
|
|
|
- (flatten blocks)
|
|
|
- (filterv (fn [b]
|
|
|
- (let [props (:block/properties b)
|
|
|
- next-sched (get props card-next-schedule-property)
|
|
|
- next-sched* (tc/from-string next-sched)
|
|
|
- repeats (get props card-repeats-property)]
|
|
|
- (or (nil? repeats)
|
|
|
- (< repeats 1)
|
|
|
- (nil? next-sched)
|
|
|
- (nil? next-sched*)
|
|
|
- (t/before? next-sched* time))))))]
|
|
|
- {:total (count blocks)
|
|
|
- :result filtered-result}))))
|
|
|
+ [repo blocks time]
|
|
|
+ (let [filtered-result (->>
|
|
|
+ (flatten blocks)
|
|
|
+ (filterv (fn [b]
|
|
|
+ (let [props (:block/properties b)
|
|
|
+ next-sched (get props card-next-schedule-property)
|
|
|
+ next-sched* (tc/from-string next-sched)
|
|
|
+ repeats (get props card-repeats-property)]
|
|
|
+ (or (nil? repeats)
|
|
|
+ (< repeats 1)
|
|
|
+ (nil? next-sched)
|
|
|
+ (nil? next-sched*)
|
|
|
+ (t/before? next-sched* time))))))]
|
|
|
+ {:total (count blocks)
|
|
|
+ :result filtered-result}))
|
|
|
|
|
|
|
|
|
;;; ================================================================
|
|
|
@@ -373,10 +372,10 @@
|
|
|
:disabled false}
|
|
|
(svg/info)))
|
|
|
|
|
|
-(defn- score-and-next-card [score card *card-index *cards *phase *review-records cb]
|
|
|
+(defn- score-and-next-card [score card *card-index cards *phase *review-records cb]
|
|
|
(operation-score! card score)
|
|
|
(swap! *review-records #(update % score (fn [ov] (conj ov card))))
|
|
|
- (if (>= (inc @*card-index) (count @*cards))
|
|
|
+ (if (>= (inc @*card-index) (count cards))
|
|
|
(when cb
|
|
|
(swap! *card-index inc)
|
|
|
(cb @*review-records))
|
|
|
@@ -384,10 +383,10 @@
|
|
|
(swap! *card-index inc)
|
|
|
(reset! *phase 1))))
|
|
|
|
|
|
-(defn- skip-card [card *card-index *cards *phase *review-records cb]
|
|
|
+(defn- skip-card [card *card-index cards *phase *review-records cb]
|
|
|
(swap! *review-records #(update % "skip" (fn [ov] (conj ov card))))
|
|
|
(swap! *card-index inc)
|
|
|
- (if (>= (inc @*card-index) (count @*cards))
|
|
|
+ (if (>= (inc @*card-index) (count cards))
|
|
|
(and cb (cb @*review-records))
|
|
|
(reset! *phase 1)))
|
|
|
|
|
|
@@ -398,16 +397,14 @@
|
|
|
< rum/reactive
|
|
|
(rum/local 1 ::phase)
|
|
|
(rum/local 0 ::card-index)
|
|
|
- (rum/local nil ::cards)
|
|
|
(rum/local {} ::review-records)
|
|
|
[state cards {preview? :preview?
|
|
|
modal? :modal?
|
|
|
cb :callback}]
|
|
|
- (let [cards* (::cards state)
|
|
|
- _ (when (nil? @cards*) (reset! cards* cards))
|
|
|
+ (let [cards (mapv ->card cards)
|
|
|
review-records (::review-records state)
|
|
|
card-index (::card-index state)
|
|
|
- card (util/nth-safe @cards* @card-index)]
|
|
|
+ card (util/nth-safe cards @card-index)]
|
|
|
(if-not card
|
|
|
review-finished
|
|
|
(let [phase (::phase state)
|
|
|
@@ -420,7 +417,8 @@
|
|
|
(component-block/blocks-container
|
|
|
blocks
|
|
|
(merge (show-cycle-config card @phase)
|
|
|
- {:id (str root-block-id)}))
|
|
|
+ {:id (str root-block-id)
|
|
|
+ :editor-box editor/box}))
|
|
|
(if (or preview? modal?)
|
|
|
[:div.flex.my-4.justify-between
|
|
|
[:div.flex-1
|
|
|
@@ -439,7 +437,7 @@
|
|
|
:id "card-next"
|
|
|
:small? true
|
|
|
:class "mr-2"
|
|
|
- :on-click #(skip-card card card-index cards* phase review-records cb)))
|
|
|
+ :on-click #(skip-card card card-index cards phase review-records cb)))
|
|
|
|
|
|
(when (and (not preview?) (= 1 next-phase))
|
|
|
(let [interval-days-score-3 (get (get-next-interval card 3) card-last-interval-property)
|
|
|
@@ -450,20 +448,20 @@
|
|
|
:id "card-forgotten"
|
|
|
:small? true
|
|
|
:on-click (fn []
|
|
|
- (score-and-next-card 1 card card-index cards* phase review-records cb)
|
|
|
+ (score-and-next-card 1 card card-index cards phase review-records cb)
|
|
|
(let [tomorrow (tc/to-string (t/plus (t/today) (t/days 1)))]
|
|
|
(editor-handler/set-block-property! root-block-id card-next-schedule-property tomorrow))))
|
|
|
|
|
|
(ui/button "Remembered(r)"
|
|
|
:id "card-remembered"
|
|
|
:small? true
|
|
|
- :on-click #(score-and-next-card 5 card card-index cards* phase review-records cb))
|
|
|
+ :on-click #(score-and-next-card 5 card card-index cards phase review-records cb))
|
|
|
|
|
|
(ui/button "Take a while to recall(t)"
|
|
|
:id "card-recall"
|
|
|
:class (util/hiccup->class "opacity-60.hover:opacity-100")
|
|
|
:small? true
|
|
|
- :on-click #(score-and-next-card 3 card card-index cards* phase review-records cb))]))]
|
|
|
+ :on-click #(score-and-next-card 3 card card-index cards phase review-records cb))]))]
|
|
|
|
|
|
(when preview?
|
|
|
(ui/tippy {:html [:div.text-sm
|
|
|
@@ -519,8 +517,9 @@
|
|
|
(let [repo (state/get-current-repo)
|
|
|
query-string (string/join ", " (:arguments options))]
|
|
|
(if-let [*query-result (query repo query-string)]
|
|
|
- (let [{:keys [total result]} (query-scheduled repo {:query-result *query-result} (tl/local-now))
|
|
|
- review-cards (mapv ->card result)
|
|
|
+ (let [blocks (rum/react *query-result)
|
|
|
+ {:keys [total result]} (query-scheduled repo blocks (tl/local-now))
|
|
|
+ review-cards result
|
|
|
query-string (if (string/blank? query-string) "All" query-string)
|
|
|
card-query-block (db/entity [:block/uuid (:block/uuid config)])
|
|
|
filtered-total (count result)
|
|
|
@@ -553,7 +552,7 @@
|
|
|
{:on-click (fn [_]
|
|
|
(let [all-blocks (flatten @(query (state/get-current-repo) query-string))]
|
|
|
(when (> (count all-blocks) 0)
|
|
|
- (let [review-cards (mapv ->card all-blocks)]
|
|
|
+ (let [review-cards all-blocks]
|
|
|
(state/set-modal! #(view-modal
|
|
|
review-cards
|
|
|
{:preview? true
|