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

Pure data helpers for `MishkaGervaz.Table.Web.DataLoader`.

Extracted from the `__using__` macro so the same primitives are
reusable in user overrides and directly testable.

# `mode_state`

```elixir
@type mode_state() :: %{
  filter_values: map(),
  sort_fields: [sort_entry()],
  selected_ids: MapSet.t(any()),
  excluded_ids: MapSet.t(any()),
  select_all?: boolean()
}
```

# `sort_entry`

```elixir
@type sort_entry() :: {atom(), :asc | :desc}
```

# `default_mode_state`

```elixir
@spec default_mode_state() :: mode_state()
```

The empty starting state for one of the two archive-status modes
(`:active` or `:archived`). Used by `apply_archive_status/3` to
swap state when toggling between modes.

# `remove_sort_group`

```elixir
@spec remove_sort_group([sort_entry()], [atom()]) :: [sort_entry()]
```

Drops every entry from `sorts` whose field is in `db_fields`.

# `toggle_sort_group`

```elixir
@spec toggle_sort_group([sort_entry()], [atom()], :asc | :desc) :: [sort_entry()]
```

Rewrites the order of every entry in `sorts` whose field belongs to
`db_fields`, leaving the rest untouched.

---

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