Handles async data loading with streams for MishkaGervaz tables.
This module manages:
- Initial data loading
- Pagination (load more)
- Filtering and sorting
- Stream management
- Async result handling
- The total after realtime changes (
refresh_total/1) - Whether a realtime row belongs in the view (
in_view?/2)
Sub-builders
DataLoader is composed of sub-builders that can be overridden:
QueryBuilder- Builds queries with filters and sortingFilterParser- Parses raw filter valuesPaginationHandler- Handles page loading and calculationsTenantResolver- Resolves tenant and actionsHookRunner- Executes lifecycle hooks
User Override
Override the entire data_loader module:
defmodule MyApp.Table.DataLoader do
use MishkaGervaz.Table.Web.DataLoader
def load_async(socket, state, opts) do
# Custom loading logic
super(socket, state, opts)
end
endOverride specific sub-builders:
defmodule MyApp.Table.DataLoader do
use MishkaGervaz.Table.Web.DataLoader,
query: MyApp.Table.DataLoader.QueryBuilder,
pagination: MyApp.Table.DataLoader.PaginationHandler
endOr override via DSL:
mishka_gervaz do
table do
data_loader do
query MyApp.Table.DataLoader.QueryBuilder
pagination MyApp.Table.DataLoader.PaginationHandler
end
end
endOverride entire data_loader module via DSL (positional argument):
mishka_gervaz do
table do
data_loader MyApp.Table.CustomDataLoader
end
endSee MishkaGervaz.Table.Web.DataLoader.Helpers,
MishkaGervaz.Table.Web.DataLoader.QueryBuilder,
MishkaGervaz.Table.Web.DataLoader.FilterParser,
MishkaGervaz.Table.Web.DataLoader.PaginationHandler,
MishkaGervaz.Table.Web.DataLoader.TenantResolver,
MishkaGervaz.Table.Web.DataLoader.HookRunner,
MishkaGervaz.Table.Web.DataLoader.RelationLoader,
MishkaGervaz.Table.Web.State,
MishkaGervaz.Table.Web.UrlSync,
MishkaGervaz.Table.Web.AutoState.
Summary
Functions
See MishkaGervaz.Table.Web.DataLoader.Default.apply_archive_status/3.
See MishkaGervaz.Table.Web.DataLoader.Default.apply_filters/3.
See MishkaGervaz.Table.Web.DataLoader.Default.apply_sort/3.
See MishkaGervaz.Table.Web.DataLoader.Default.handle_async/3.
See MishkaGervaz.Table.Web.DataLoader.Default.in_view?/2.
See MishkaGervaz.Table.Web.DataLoader.Default.load_async/3.
See MishkaGervaz.Table.Web.DataLoader.Default.load_more/2.
See MishkaGervaz.Table.Web.DataLoader.Default.load_total/1.
See MishkaGervaz.Table.Web.DataLoader.Default.maybe_load/2.
See MishkaGervaz.Table.Web.DataLoader.Default.refresh_total/1.
See MishkaGervaz.Table.Web.DataLoader.Default.reload/2.
See MishkaGervaz.Table.Web.DataLoader.Default.set_sort/4.
Functions
@spec apply_archive_status( Phoenix.LiveView.Socket.t(), MishkaGervaz.Table.Web.State.t(), :active | :archived ) :: Phoenix.LiveView.Socket.t()
See MishkaGervaz.Table.Web.DataLoader.Default.apply_archive_status/3.
@spec apply_filters( Phoenix.LiveView.Socket.t(), MishkaGervaz.Table.Web.State.t(), map() ) :: Phoenix.LiveView.Socket.t()
See MishkaGervaz.Table.Web.DataLoader.Default.apply_filters/3.
@spec apply_sort( Phoenix.LiveView.Socket.t(), MishkaGervaz.Table.Web.State.t(), atom() ) :: Phoenix.LiveView.Socket.t()
See MishkaGervaz.Table.Web.DataLoader.Default.apply_sort/3.
@spec handle_async(atom(), {:ok, any()} | {:exit, any()}, Phoenix.LiveView.Socket.t()) :: Phoenix.LiveView.Socket.t()
See MishkaGervaz.Table.Web.DataLoader.Default.handle_async/3.
@spec in_view?(MishkaGervaz.Table.Web.State.t(), term()) :: boolean()
See MishkaGervaz.Table.Web.DataLoader.Default.in_view?/2.
@spec load_async( Phoenix.LiveView.Socket.t(), MishkaGervaz.Table.Web.State.t(), keyword() ) :: Phoenix.LiveView.Socket.t()
See MishkaGervaz.Table.Web.DataLoader.Default.load_async/3.
@spec load_more(Phoenix.LiveView.Socket.t(), MishkaGervaz.Table.Web.State.t()) :: Phoenix.LiveView.Socket.t()
See MishkaGervaz.Table.Web.DataLoader.Default.load_more/2.
@spec load_total(MishkaGervaz.Table.Web.State.t()) :: {:ok, %{total_count: non_neg_integer(), total_pages: pos_integer() | nil}} | :skip
See MishkaGervaz.Table.Web.DataLoader.Default.load_total/1.
@spec maybe_load(Phoenix.LiveView.Socket.t(), MishkaGervaz.Table.Web.State.t()) :: Phoenix.LiveView.Socket.t()
See MishkaGervaz.Table.Web.DataLoader.Default.maybe_load/2.
@spec refresh_total(Phoenix.LiveView.Socket.t()) :: Phoenix.LiveView.Socket.t()
See MishkaGervaz.Table.Web.DataLoader.Default.refresh_total/1.
@spec reload(Phoenix.LiveView.Socket.t(), MishkaGervaz.Table.Web.State.t()) :: Phoenix.LiveView.Socket.t()
See MishkaGervaz.Table.Web.DataLoader.Default.reload/2.
@spec set_sort( Phoenix.LiveView.Socket.t(), MishkaGervaz.Table.Web.State.t(), atom(), :asc | :desc ) :: Phoenix.LiveView.Socket.t()
See MishkaGervaz.Table.Web.DataLoader.Default.set_sort/4.