defmodule EventStoreDashboard.Components.TableParams do
@moduledoc false
@default_limit 50
@valid_limits [50, 100, 500, 1000, 5000]
def parse_limit(%{"limit" => value}) when is_binary(value) do
case Integer.parse(value) do
{n, ""} when n in @valid_limits -> n
_ -> @default_limit
end
end
def parse_limit(_params), do: @default_limit
def parse_search(%{"search" => value}) when is_binary(value) do
case String.trim(value) do
"" -> nil
trimmed -> trimmed
end
end
def parse_search(_params), do: nil
def parse_sort_dir(%{"sort_dir" => "asc"}, _default), do: :asc
def parse_sort_dir(%{"sort_dir" => "desc"}, _default), do: :desc
def parse_sort_dir(_params, default), do: default
def parse_sort_by(%{"sort_by" => value}, allowed, default) when is_binary(value) do
case value in allowed do
true -> String.to_atom(value)
false -> default
end
end
def parse_sort_by(_params, _allowed, default), do: default
end