# `MishkaGervaz.Table.Web.Events`
[🔗](https://github.com/mishka-group/mishka_gervaz/blob/v0.0.1-alpha.3/lib/mishka_gervaz/table/web/events.ex#L1)

Handles all table events for MishkaGervaz.

This module centralizes event handling for:
- Sorting
- Filtering
- Row actions (delete, edit, custom events)
- Bulk actions
- Row expansion
- Archive status changes
- Pagination

## Sub-builders

Events functionality is split into specialized sub-builders:

- `SanitizationHandler` - Input sanitization
- `RecordHandler` - Record CRUD operations
- `SelectionHandler` - Selection state management
- `BulkActionHandler` - Bulk action execution
- `HookRunner` - Hook execution
- `RelationFilterHandler` - Relation filter search/select events

## Customization

You can override individual sub-builders via DSL:

    mishka_gervaz do
      table do
        events do
          sanitization MyApp.CustomSanitizationHandler
          record MyApp.CustomRecordHandler
          selection MyApp.CustomSelectionHandler
          bulk_action MyApp.CustomBulkActionHandler
          hooks MyApp.CustomHookRunner
          relation_filter MyApp.CustomRelationFilterHandler
        end
      end
    end

Or override the entire Events module:

    mishka_gervaz do
      table do
        events MyApp.CustomEvents
      end
    end

See `MishkaGervaz.Table.Web.Events.SanitizationHandler`,
`MishkaGervaz.Table.Web.Events.RecordHandler`,
`MishkaGervaz.Table.Web.Events.SelectionHandler`,
`MishkaGervaz.Table.Web.Events.BulkActionHandler`,
`MishkaGervaz.Table.Web.Events.HookRunner`,
`MishkaGervaz.Table.Web.Events.RelationFilterHandler`,
`MishkaGervaz.Table.Web.State`,
`MishkaGervaz.Table.Web.DataLoader`,
`MishkaGervaz.Table.Web.Live`.

# `socket`

```elixir
@type socket() :: Phoenix.LiveView.Socket.t()
```

# `state`

```elixir
@type state() :: MishkaGervaz.Table.Web.State.t()
```

# `handle`

```elixir
@callback handle(event :: String.t(), params :: map(), socket :: socket()) ::
  {:noreply, socket()}
```

Main event handler dispatcher.

Called from LiveComponent's handle_event callback.

# `handle`

```elixir
@spec handle(String.t(), map(), socket()) :: {:noreply, socket()}
```

Main event handler dispatcher.

Called from LiveComponent's handle_event callback.

---

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