MishkaGervaz.Table.Web.DataLoader (MishkaGervaz v0.0.1-alpha.3)

Copy Markdown View Source

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

Sub-builders

DataLoader is composed of sub-builders that can be overridden:

  • QueryBuilder - Builds queries with filters and sorting
  • FilterParser - Parses raw filter values
  • PaginationHandler - Handles page loading and calculations
  • TenantResolver - Resolves tenant and actions
  • HookRunner - 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
end

Override specific sub-builders:

defmodule MyApp.Table.DataLoader do
  use MishkaGervaz.Table.Web.DataLoader,
    query: MyApp.Table.DataLoader.QueryBuilder,
    pagination: MyApp.Table.DataLoader.PaginationHandler
end

Or override via DSL:

mishka_gervaz do
  table do
    data_loader do
      query MyApp.Table.DataLoader.QueryBuilder
      pagination MyApp.Table.DataLoader.PaginationHandler
    end
  end
end

Override entire data_loader module via DSL (positional argument):

mishka_gervaz do
  table do
    data_loader MyApp.Table.CustomDataLoader
  end
end

See 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.load_async/3.

See MishkaGervaz.Table.Web.DataLoader.Default.load_more/2.

See MishkaGervaz.Table.Web.DataLoader.Default.maybe_load/2.

See MishkaGervaz.Table.Web.DataLoader.Default.reload/2.

Functions

apply_archive_status(socket, state, status)

@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.

apply_filters(socket, state, new_filters)

See MishkaGervaz.Table.Web.DataLoader.Default.apply_filters/3.

apply_sort(socket, state, field)

See MishkaGervaz.Table.Web.DataLoader.Default.apply_sort/3.

handle_async(name, result, socket)

@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.

load_async(socket, state, opts \\ [])

See MishkaGervaz.Table.Web.DataLoader.Default.load_async/3.

load_more(socket, state)

See MishkaGervaz.Table.Web.DataLoader.Default.load_more/2.

maybe_load(socket, state)

See MishkaGervaz.Table.Web.DataLoader.Default.maybe_load/2.

reload(socket, state)

See MishkaGervaz.Table.Web.DataLoader.Default.reload/2.