defmodule Baz.IEx.Commands.CollectionEventImports do
@moduledoc """
Render a table of filtered and sorted collection_events
"""
import Baz.IEx.Output.Table, only: [render!: 2]
@type opts :: Baz.CollectionEventImports.filter_and_order_opts()
@header [
"Venue",
"Slug",
"Before",
"After",
"Token IDs",
"Types",
"Max Retries",
"Status"
]
@spec filter_and_order(opts) :: no_return
def filter_and_order(opts) do
opts
|> Baz.CollectionEventImports.filter_and_order()
|> format_rows()
|> render!(@header)
end
defp format_rows(instances) do
instances
|> Enum.map(fn i ->
[
i.venue,
i.slug,
i.before |> DateTime.to_string(),
i.after |> DateTime.to_string(),
i.token_ids,
i.event_types,
i.max_retries,
i.status
]
|> Enum.map(&format_col/1)
end)
end
defp format_col(nil), do: "-"
defp format_col([]), do: "-"
defp format_col(val) when is_list(val), do: val |> Enum.join(", ")
defp format_col(val) when is_map(val), do: val |> Map.keys()
defp format_col(val), do: val
end