(
mu/defn
fk-filter-drill
:-
[
:maybe
::lib.schema.drill-thru/drill-thru.fk-filter
]
"When clicking on a foreign key value, filter this query by that column.
This has the same effect as the `=` filter on a generic field (ie. not a key), but renders differently.
Contrast [[metabase.lib.drill-thru.object-details/object-detail-drill]], which shows the details of the foreign
object."
[
query
:-
::lib.schema/query
stage-number
:-
:int
{
:keys
[
column
column-ref
value
]
,
:as
_context
}
:-
::lib.schema.drill-thru/context
]
(
when
(
and
column
(
some?
value
)
(
not=
value
:null
)
(
lib.drill-thru.common/mbql-stage?
query
stage-number
)
(
not
(
lib.types.isa/primary-key?
column
)
)
(
lib.types.isa/foreign-key?
column
)
)
(
let
[
source
(
or
(
some->>
query
lib.util/source-table-id
(
lib.metadata/table
query
)
)
(
some->>
query
lib.util/source-card-id
(
lib.metadata/card
query
)
)
)
]
{
:lib/type
:metabase.lib.drill-thru/drill-thru
:type
:drill-thru/fk-filter
:filter
(
lib.options/ensure-uuid
[
:=
{
}
column-ref
value
]
)
:column-name
(
lib.metadata.calculation/display-name
query
stage-number
column
:long
)
:table-name
(
lib.metadata.calculation/display-name
query
0
source
)
}
)
)
)