I am not able to do a query for my needs.
Maybe somebody can help me which „phrases“ I am searching and if there is a solution somewhere already.
My structure is like this:
Daily Journal
Meetings
Meeting 1
Meeting 2
…
I add my notes below the meeting.
But how can I schedule a todo for the next meeting?
In other words: How can I automatically show open tasks in my daily - per meeting?
My approach: a template.
A template that I can add every day, per meeting (1, 2, …) which reads open/scheduled todos for the correct meeting (the parent block).
Daily Journal
Meetings
Meeting 1
<—- add the dynamic template here
Meeting 2
<—- add the same template here
…
So the question is:
**How to write a query (in a template) that finds all open tasks from a page. The page should be (dynamically selected) the page from the parent block **
I had a similar need and it took me a while to figure this one out. My solution might be a little complicated but I’ll try to explain as I go. Probably someone can point out a simpler way. Here goes…
Let’s start at the end. I add a raise-with property to the tasks:
TODO Ask Person A about the thing
raise-with:: [[Person A]]
Then in my meetings I link both the meeting and any attendees. Something like this:
10:00 - [[Meeting X]] with [[Person A]]
{{raise}}
Notes go here…
Notice that {{raise}} macro? That’s where the magic happens.
Inside config.edn I define the macro like this:
:macros
{
:raise "\n#+BEGIN_QUERY
{:inputs [:current-block]
:query
[:find
(pull ?block [*])
:in $ ?meeting
:where
;; The task or non-task block to raise is not 'done'
[?block :block/page _]
(not [?block :block/marker \"DONE\"])
;; The meeting refers to the page that the block has under its raise-with
[?meeting :block/refs ?raise-with-page]
[?raise-with-page :block/original-name ?raise-with-name]
;; The block has raise-with property that also refers to this page
[?block :block/properties ?props]
[(get ?props :raise-with) ?raise-with-set]
[(contains? ?raise-with-set ?raise-with-name)]]
:result-transform identity ;; Disable Logseq's own
:view
(fn [blocks]
(for [b blocks]
(let [label (first (clojure.string/split-lines
(:block/content b)))]
[:div.inline
[:a
{:on-click
(fn [_]
(call-api \"open_in_right_sidebar\" (:block/uuid b)))}
[:span.block-marker \"RAISE\"]
label]])))}
#+END_QUERY"
}
It’s a query that looks for the page reference in common between some block’s raise-with property and the references in the current block (the meeting header itself), then displays those blocks that satisfy this.
You could replace that whole :view ...} bit with :table-view? true} for a simpler setup.
thanks for sharing this.
I have never worked with macros and will definitely give it a try to figure it out (even tho it does not work out of the box for me).