Configure a default sort to apply when a read action or a has_many relationship has no sort.
Add ash_default_sort to your list of dependencies in mix.exs:
def deps do
[
{:ash_default_sort, "~> 0.2.0"}
]
enddefmodule 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
endIn 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.
MIT