diff options
Diffstat (limited to 'lib/chessh/ssh/client/menus/selector.ex')
-rw-r--r-- | lib/chessh/ssh/client/menus/selector.ex | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/lib/chessh/ssh/client/menus/selector.ex b/lib/chessh/ssh/client/menus/selector.ex new file mode 100644 index 0000000..225c41f --- /dev/null +++ b/lib/chessh/ssh/client/menus/selector.ex @@ -0,0 +1,23 @@ +defmodule Chessh.SSH.Client.Selector do + import Ecto.Query + alias Chessh.Repo + + def paginate_ish_query(query, current_id, direction) do + sorted_query = + if direction == :desc, + do: from(g in query, order_by: [desc: g.id]), + else: from(g in query, order_by: [asc: g.id]) + + results = + if !is_nil(current_id) do + if direction == :desc, + do: from(g in sorted_query, where: g.id < ^current_id), + else: from(g in sorted_query, where: g.id > ^current_id) + else + sorted_query + end + |> Repo.all() + + if direction == :desc, do: results, else: Enum.reverse(results) + end +end |