AshDefaultSort
View SourceConfigure a default sort to apply when a read action or a has_many relationship has no sort.
Installation
Add ash_default_sort
to your list of dependencies in mix.exs
:
def deps do
[
{:ash_default_sort, "~> 0.2.0"}
]
end
Usage
defmodule Post do
use Ash.Resource,
data_layer: Ash.DataLayer.Postgres,
extensions: [AshDefaultSort]
relationships do
has_many :comments, Comment
has_many :tags, Tag do
sort [id: :asc]
end
end
actions do
read :read do
primary? true
end
read :read_sorted do
prepare build(sort: [id: :desc])
end
read :read_all do
end
read :read_every do
end
end
default_sort do
sort [like_count: :desc, created_at: :desc]
has_many_sort [id: :desc]
include_primary_read? false
except [:read_all]
end
end
In the example above, [like_count: :desc, created_at: :desc]
is applied to read_every
.
This is because read
is excluded by include_primary_read? false
, read_sorted
is not affected because it already includes a sort
, and read_all
is excluded by the except
option.
And the default_sort
for comments
is set to [id: :desc]
because has_many_sort
is present, and comments
has no sort
or default_sort
options.
License
MIT