Packages

Flexible data table component for LiveView

Current section

Files

Jump to
data_table lib data_table list.ex
Raw

lib/data_table/list.ex

defmodule DataTable.List do
@moduledoc """
DataTable source for a native Elixir list.
"""
@behaviour DataTable.Source
alias DataTable.Source.Result
@impl true
def query({list, config}, query) do
results =
list
|> Stream.with_index()
|> maybe_apply(query.offset, &Stream.drop/2)
|> maybe_apply(query.limit, &Stream.take/2)
|> Enum.map(fn {item, idx} -> config.mapper.(item, idx) end)
%Result{
results: results,
total_results: Enum.count(list)
}
end
@impl true
def filterable_fields({_list, _config}) do
[]
end
@impl true
def filter_types({_list, _config}) do
%{}
end
@impl true
def key({_list, config}), do: config.key_field
defp maybe_apply(query, nil, _fun) do
query
end
defp maybe_apply(query, val, fun) do
fun.(query, val)
end
end