defmodule MavuList.Ash do
if Code.ensure_loaded?(Ash) do
def get_filterform_module(_listconf) do
MyAppBe.MavuListAshfilter.FilterForm
end
def get_ash_filter_form(%MavuList{conf: conf, tweaks: tweaks} = list) do
if is_nil(conf[:ash_resource]) do
raise "MavuList config should contain an 'ash_resource' entry"
end
if is_nil(conf[:ashfilter_conf]) do
raise "MavuList config should contain an 'ashfilter_conf' entry"
end
get_filterform_module(conf).new(conf[:ash_resource],
params: tweaks[:ash_filterform] || %{},
mavu_list: list
)
end
def apply_ash_filterform(
%Ash.Query{} = query,
list = %MavuList{conf: conf, tweaks: %{ash_filterform: filterform_params}}
) do
filter_form =
get_filterform_module(conf).new(conf[:ash_resource],
mavu_list: list,
params: filterform_params || %{}
)
case get_filterform_module(conf).filter(query, filter_form) do
{:ok, modified_query} ->
modified_query
{:error, _filter_form} ->
query
end
end
def autoload_fields(
%Ash.Query{} = query,
list = %MavuList{conf: conf}
) do
filter_form =
get_filterform_module(conf).new(conf[:ash_resource],
mavu_list: list,
params: %{}
)
case get_filterform_module(conf).autoload_fields(query, filter_form) do
{:ok, modified_query} ->
modified_query
{:error, _filter_form} ->
query
end
end
end
def apply_ash_filterform(source, _mavu_list) do
source
end
def autoload_fields(source, _mavu_list) do
source
end
end