Filter to list tiddlers matching user-input field values

@Pak I don’t have the opportunity at present to think about your data structure carefully and a specific solution but here are some thoughts that might help.

The filter operator and :filter and :map filter run prefixes should be useful here.

Here is some untested code to give you an idea as to the direction I am thinking, can probably be improved upon:

\define subject-filter() [{$:/temp/test##subject}!is[blank]match{!!subject}] :else[{$:/temp/test##subject}is[blank]then[keep-me]]

\define medium-filter() [{$:/temp/test##medium}!is[blank]match{!!medium}] :else[{$:/temp/test##medium}is[blank]then[keep-me]]

{{{ [tag[Source]filter<medium-filter>filter<subject-filter>] }}}

The key thing to understand about filter and :filter is that it doesn’t matter what they return, they just need to return a non-empty result for the input titles you want to keep.

The above can probably be simplified along these lines:

\define get-filter(source) [{$:/temp/test##$source$}!is[blank]match{!!$source$}] :else[{$:/temp/test##$source$}is[blank]then[keep-me]]

{{{ [tag[Source]filter<get-filter medium>filter<get-filter subject>] }}}