MishkaGervaz.Table.Web.DataLoader.RelationLoader behaviour
(MishkaGervaz v0.0.1-alpha.3)
Copy Markdown
View Source
Handles paginated loading of relation filter options.
Provides support for different loading modes:
:static- Load all options at once:load_more- Initial page with load more capability:search- Search with pagination (single select):search_multi- Search with pagination (multi select)
Usage
# Load initial options
{:ok, result} = RelationLoader.load_options(filter, state, page: 1)
# Search options
{:ok, result} = RelationLoader.search_options(filter, state, "search term", page: 1)Override
defmodule MyApp.Table.RelationLoader do
use MishkaGervaz.Table.Web.DataLoader.RelationLoader
def load_options(filter, state, opts) do
# Custom loading logic
super(filter, state, opts)
end
endSee MishkaGervaz.Table.Web.DataLoader,
MishkaGervaz.Table.Web.DataLoader.Helpers,
MishkaGervaz.Table.Types.Filter.Relation,
and the sibling sub-builders QueryBuilder, FilterParser,
PaginationHandler, TenantResolver, HookRunner.
Summary
Types
@type filter() :: map()
@type load_result() :: %{ options: [{String.t(), any()}], page: pos_integer(), has_more?: boolean(), total_count: pos_integer() | nil }
@type state() :: map()
Callbacks
@callback load_more_options(filter(), state(), keyword()) :: {:ok, load_result()} | {:error, term()}
@callback load_options(filter(), state(), keyword()) :: {:ok, load_result()} | {:error, term()}