Current section
37 Versions
Jump to
Current section
37 Versions
Compare versions
3
files changed
+36
additions
-7
deletions
| @@ -87,4 +87,4 @@ | |
| 87 87 | {<<"optional">>,false}, |
| 88 88 | {<<"repository">>,<<"hexpm">>}, |
| 89 89 | {<<"requirement">>,<<">= 3.0.0">>}]]}. |
| 90 | - {<<"version">>,<<"0.2.6">>}. |
| 90 | + {<<"version">>,<<"0.2.7">>}. |
| @@ -157,25 +157,54 @@ defmodule MavuList do | |
| 157 157 | |> Ecto.Query.order_by(^sort_definitions_for_query) |
| 158 158 | end |
| 159 159 | |
| 160 | + if Code.ensure_loaded?(Ash) do |
| 161 | + def apply_sort(%Ash.Query{} = query, conf, sort_definitions) |
| 162 | + when is_list(sort_definitions) and is_map(conf) do |
| 163 | + sort_definitions_for_query = |
| 164 | + Enum.map(sort_definitions, &handle_sort_definition_for_ash(&1, conf)) |
| 165 | + |
| 166 | + %{ |
| 167 | + sort_definitions: sort_definitions, |
| 168 | + sort_definitions_for_query: sort_definitions_for_query |
| 169 | + } |
| 170 | + |
| 171 | + query |
| 172 | + |> Ash.Query.unset(:sort) |
| 173 | + |> Ash.Query.sort(sort_definitions_for_query) |
| 174 | + end |
| 175 | + end |
| 176 | + |
| 160 177 | def handle_sort_definition([colname, direction], conf) do |
| 161 178 | db_colname = get_db_colname(conf, colname) |
| 162 179 | {direction, db_colname} |
| 163 180 | end |
| 164 181 | |
| 165 | - def apply_sort(data, _, _), do: data |
| 182 | + def handle_sort_definition_for_ash([colname, direction], conf) do |
| 183 | + db_colname = get_db_colname(conf, colname) |
| 166 184 | |
| 185 | + case direction do |
| 186 | + :asc -> |
| 187 | + db_colname |
| 188 | + |
| 189 | + _ -> |
| 190 | + {db_colname, direction} |
| 191 | + end |
| 192 | + end |
| 193 | + |
| 194 | + def apply_sort(data, _, _), do: data |
| 167 195 | |
| 168 196 | if Code.ensure_loaded?(Ash) do |
| 169 197 | def apply_paging(%Ash.Query{} = query, %{api: api} = _conf, per_page, page) |
| 170 | - when is_integer(per_page) and is_integer(page) do |
| 198 | + when is_integer(per_page) and is_integer(page) do |
| 171 199 | query |
| 172 200 | |> api.read!(page: [limit: per_page, offset: per_page * (page - 1)]) |
| 173 201 | |> case do |
| 174 | - items when is_list(items)-> items |
| 202 | + items when is_list(items) -> items |
| 175 203 | %{results: items} -> items |
| 176 204 | end |
| 177 205 | end |
| 178 206 | end |
| 207 | + |
| 179 208 | def apply_paging(%Ecto.Query{} = query, %{repo: repo} = _conf, per_page, page) |
| 180 209 | when is_integer(per_page) and is_integer(page) do |
| 181 210 | query |
| @@ -262,8 +291,8 @@ defmodule MavuList do | |
| 262 291 | |
| 263 292 | if Code.ensure_loaded?(Ash) do |
| 264 293 | def get_length(%Ash.Query{} = query, %{api: api} = _conf) do |
| 265 | - api.read!(query, page: [limit: 1,count: true]) |
| 266 | - |> Map.get(:count,0) |
| 294 | + api.read!(query, page: [limit: 1, count: true]) |
| 295 | + |> Map.get(:count, 0) |
| 267 296 | end |
| 268 297 | end |
| @@ -1,7 +1,7 @@ | |
| 1 1 | defmodule MavuList.MixProject do |
| 2 2 | use Mix.Project |
| 3 3 | |
| 4 | - @version "0.2.6" |
| 4 | + @version "0.2.7" |
| 5 5 | def project do |
| 6 6 | [ |
| 7 7 | app: :mavu_list, |