mirror of
https://github.com/ash-project/ash_phoenix.git
synced 2024-09-20 15:22:49 +12:00
improvement: to_filter
-> to_filter_expression
This commit is contained in:
parent
cc71c29e46
commit
332046e824
1 changed files with 12 additions and 12 deletions
|
@ -113,18 +113,18 @@ defmodule AshPhoenix.FilterForm do
|
||||||
|
|
||||||
To add this to a query, remember to use `^`, for example:
|
To add this to a query, remember to use `^`, for example:
|
||||||
```elixir
|
```elixir
|
||||||
filter = AshPhoenix.FilterForm.to_filter(form)
|
filter = AshPhoenix.FilterForm.to_filter_expression(form)
|
||||||
|
|
||||||
Ash.Query.filter(MyApp.Post, ^filter)
|
Ash.Query.filter(MyApp.Post, ^filter)
|
||||||
```
|
```
|
||||||
|
|
||||||
Alternatively, you can use the shorthand: `filter/2`.
|
Alternatively, you can use the shorthand: `filter/2` to apply the expression directly to a query.
|
||||||
"""
|
"""
|
||||||
def to_filter(form) do
|
def to_filter_expression(form) do
|
||||||
if form.valid? do
|
if form.valid? do
|
||||||
case do_to_filter(form, form.resource) do
|
case do_to_filter_expression(form, form.resource) do
|
||||||
{:ok, expr} ->
|
{:ok, expr} ->
|
||||||
{:ok, %Ash.Filter{expression: expr, resource: form.resource}}
|
{:ok, expr}
|
||||||
|
|
||||||
{:error, form} ->
|
{:error, form} ->
|
||||||
{:error, form}
|
{:error, form}
|
||||||
|
@ -138,7 +138,7 @@ defmodule AshPhoenix.FilterForm do
|
||||||
Same as `to_filter/1`
|
Same as `to_filter/1`
|
||||||
"""
|
"""
|
||||||
def to_filter!(form) do
|
def to_filter!(form) do
|
||||||
case to_filter(form) do
|
case to_filter_expression(form) do
|
||||||
{:ok, filter} ->
|
{:ok, filter} ->
|
||||||
filter
|
filter
|
||||||
|
|
||||||
|
@ -174,15 +174,15 @@ defmodule AshPhoenix.FilterForm do
|
||||||
def errors(%Predicate{} = predicate, opts),
|
def errors(%Predicate{} = predicate, opts),
|
||||||
do: AshPhoenix.FilterForm.Predicate.errors(predicate, opts[:transform_errors])
|
do: AshPhoenix.FilterForm.Predicate.errors(predicate, opts[:transform_errors])
|
||||||
|
|
||||||
defp do_to_filter(%__MODULE__{components: []}, _), do: {:ok, true}
|
defp do_to_filter_expression(%__MODULE__{components: []}, _), do: {:ok, true}
|
||||||
|
|
||||||
defp do_to_filter(
|
defp do_to_filter_expression(
|
||||||
%__MODULE__{components: components, operator: operator, negated?: negated?} = form,
|
%__MODULE__{components: components, operator: operator, negated?: negated?} = form,
|
||||||
resource
|
resource
|
||||||
) do
|
) do
|
||||||
{filters, components, errors?} =
|
{filters, components, errors?} =
|
||||||
Enum.reduce(components, {[], [], false}, fn component, {filters, components, errors?} ->
|
Enum.reduce(components, {[], [], false}, fn component, {filters, components, errors?} ->
|
||||||
case do_to_filter(component, resource) do
|
case do_to_filter_expression(component, resource) do
|
||||||
{:ok, component_filter} ->
|
{:ok, component_filter} ->
|
||||||
{filters ++ [component_filter], components ++ [component], errors?}
|
{filters ++ [component_filter], components ++ [component], errors?}
|
||||||
|
|
||||||
|
@ -211,7 +211,7 @@ defmodule AshPhoenix.FilterForm do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defp do_to_filter(
|
defp do_to_filter_expression(
|
||||||
%Predicate{
|
%Predicate{
|
||||||
field: field,
|
field: field,
|
||||||
value: value,
|
value: value,
|
||||||
|
@ -230,7 +230,7 @@ defmodule AshPhoenix.FilterForm do
|
||||||
if Ash.Filter.get_operator(operator) do
|
if Ash.Filter.get_operator(operator) do
|
||||||
{:ok, %Ash.Query.Call{name: operator, args: [ref, value], operator?: true}}
|
{:ok, %Ash.Query.Call{name: operator, args: [ref, value], operator?: true}}
|
||||||
else
|
else
|
||||||
{:error, {:operator, "No such function or operator #{operator}"}, []}
|
{:error, {:operator, "No such function or operator #{operator}", []}}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -251,7 +251,7 @@ defmodule AshPhoenix.FilterForm do
|
||||||
Converts the form into a filter, and filters the provided query or resource with that filter.
|
Converts the form into a filter, and filters the provided query or resource with that filter.
|
||||||
"""
|
"""
|
||||||
def filter(query, form) do
|
def filter(query, form) do
|
||||||
case to_filter(form) do
|
case to_filter_expression(form) do
|
||||||
{:ok, filter} ->
|
{:ok, filter} ->
|
||||||
{:ok, Ash.Query.do_filter(query, filter)}
|
{:ok, Ash.Query.do_filter(query, filter)}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue