View Source Kino.Table behaviour (Kino v0.14.0)

A behaviour module for implementing tabular kinos.

This module implements table visualization and delegates data fetching and traversal to the behaviour implementation.

Summary

Types

t()

The following types have meaning on the front-end

Callbacks

Exports the data for download.

Loads data matching the given specification.

Invoked once to initialize server state.

Invoked to update state with new data.

Functions

Creates a new tabular kino using the given module as data specification.

Updates the table with new data.

Types

@type column() :: %{
  :key => term(),
  :label => String.t(),
  optional(:type) => type(),
  optional(:summary) => %{required(String.t()) => String.t()}
}
@type info() :: %{
  :name => String.t(),
  :features => [:export | :refetch | :pagination | :sorting | :relocate],
  optional(:export) => %{formats: [String.t()]}
}
@type rows_spec() :: %{
  offset: non_neg_integer(),
  limit: pos_integer(),
  order: nil | %{direction: :asc | :desc, key: term()},
  relocates: [%{from_index: non_neg_integer(), to_index: non_neg_integer()}]
}
@type state() :: term()
@type t() :: Kino.JS.Live.t()
@type type() :: String.t()

The following types have meaning on the front-end:

  • "date"
  • "list"
  • "number"
  • "struct"
  • "text"
  • "uri"

Callbacks

Link to this callback

export_data(rows_spec, state, t)

View Source (optional)
@callback export_data(rows_spec(), state(), String.t()) ::
  {:ok, %{data: binary(), extension: String.t(), type: String.t()}}

Exports the data for download.

The returned map must contain the binary, the file extension and the mime type.

Link to this callback

get_data(rows_spec, state)

View Source
@callback get_data(rows_spec(), state()) ::
  {:ok,
   %{
     columns: [column()],
     data: {:columns | :rows, [[String.t()]]},
     total_rows: non_neg_integer() | nil
   }, state()}

Loads data matching the given specification.

@callback init(init_arg :: term()) :: {:ok, info(), state()}

Invoked once to initialize server state.

Link to this callback

on_update(update_arg, state)

View Source (optional)
@callback on_update(update_arg :: term(), state :: state()) :: {:ok, state()}

Invoked to update state with new data.

This callback is called in response to update/2.

Functions

Link to this function

new(module, init_arg, opts \\ [])

View Source
@spec new(module(), term(), keyword()) :: t()

Creates a new tabular kino using the given module as data specification.

Options

  • :export - a function called to export the given kino to Markdown. This works the same as Kino.JS.new/3, except the function receives the state as an argument
Link to this function

update(kino, update_arg)

View Source
@spec update(t(), term()) :: :ok

Updates the table with new data.

An arbitrary update event can be used and it is then handled by the on_update/2 callback.