# `MishkaGervaz.Form.Web.DataLoader`
[🔗](https://github.com/mishka-group/mishka_gervaz/blob/v0.0.1-alpha.3/lib/mishka_gervaz/form/web/data_loader.ex#L1)

Handles async data loading for MishkaGervaz forms.

This module manages:
- Loading records for edit mode
- Creating new AshPhoenix.Form for create mode
- Loading relation options for select fields
- Async result handling

## Sub-builders

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

- `RecordLoader` - Loads/creates AshPhoenix.Form
- `TenantResolver` - Resolves tenant and actions
- `RelationLoader` - Loads options for relation fields
- `HookRunner` - Executes lifecycle hooks

## User Override

Override the entire data_loader module:

    defmodule MyApp.Form.DataLoader do
      use MishkaGervaz.Form.Web.DataLoader

      def load_record(socket, state, record_id) do
        # Custom loading logic
        super(socket, state, record_id)
      end
    end

Override specific sub-builders:

    defmodule MyApp.Form.DataLoader do
      use MishkaGervaz.Form.Web.DataLoader,
        record: MyApp.Form.RecordLoader,
        relation: MyApp.Form.RelationLoader
    end

# `load_record`

```elixir
@spec load_record(
  Phoenix.LiveView.Socket.t(),
  MishkaGervaz.Form.Web.State.t(),
  String.t()
) ::
  Phoenix.LiveView.Socket.t()
```

# `load_relation_options`

```elixir
@spec load_relation_options(
  Phoenix.LiveView.Socket.t(),
  MishkaGervaz.Form.Web.State.t(),
  atom()
) ::
  Phoenix.LiveView.Socket.t()
```

# `new_record`

```elixir
@spec new_record(Phoenix.LiveView.Socket.t(), MishkaGervaz.Form.Web.State.t()) ::
  Phoenix.LiveView.Socket.t()
```

# `search_relation_options`

```elixir
@spec search_relation_options(
  Phoenix.LiveView.Socket.t(),
  MishkaGervaz.Form.Web.State.t(),
  atom(),
  String.t()
) :: Phoenix.LiveView.Socket.t()
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
