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

Helper functions for `MishkaGervaz.Table.Web.State`.

Extracted from the `__using__` macro so user overrides can reuse the
same primitives the default state implementation uses.

## Example

    defmodule MyApp.Table.State do
      use MishkaGervaz.Table.Web.State
      alias MishkaGervaz.Table.Web.State.Helpers, as: StateHelpers

      def hydrate_relation_filter_labels(state) do
        StateHelpers.hydrate_filter(filter, acc, state)
      end
    end

See `MishkaGervaz.Table.Web.State`,
`MishkaGervaz.Table.Web.State.ColumnBuilder`,
`MishkaGervaz.Table.Web.State.FilterBuilder`,
`MishkaGervaz.Table.Web.State.ActionBuilder`,
`MishkaGervaz.Table.Web.State.Presentation`,
`MishkaGervaz.Table.Web.State.UrlSync`,
`MishkaGervaz.Table.Web.State.Access`.

# `build_sort_field_map`

```elixir
@spec build_sort_field_map([map()]) :: %{required(atom()) =&gt; [atom()]}
```

# `extract_selected_ids`

```elixir
@spec extract_selected_ids(map(), atom()) :: [String.t()]
```

# `generate_stream_name`

```elixir
@spec generate_stream_name(module()) :: atom()
```

# `get_archive_visible`

```elixir
@spec get_archive_visible(map()) :: boolean()
```

# `get_default_sort`

```elixir
@spec get_default_sort(map(), [map()]) :: [{atom(), :asc | :desc}]
```

# `get_features`

```elixir
@spec get_features(map(), module()) :: [atom()]
```

# `get_filter_groups`

```elixir
@spec get_filter_groups(map()) :: [map()]
```

# `get_filter_mode`

```elixir
@spec get_filter_mode(map()) :: atom()
```

# `get_layout_footer`

```elixir
@spec get_layout_footer(map()) :: map() | nil
```

# `get_layout_header`

```elixir
@spec get_layout_header(map()) :: map() | nil
```

# `get_layout_notices`

```elixir
@spec get_layout_notices(map()) :: [map()]
```

# `get_max_page_size`

```elixir
@spec get_max_page_size(map()) :: pos_integer() | nil
```

# `get_page_size`

```elixir
@spec get_page_size(map()) :: pos_integer() | nil
```

# `get_page_size_options`

```elixir
@spec get_page_size_options(map()) :: [pos_integer()] | nil
```

# `get_pagination_ui`

```elixir
@spec get_pagination_ui(map()) :: struct()
```

# `get_sortable_columns`

```elixir
@spec get_sortable_columns([map()]) :: [atom()]
```

# `get_supports_archive`

```elixir
@spec get_supports_archive(map(), boolean()) :: boolean()
```

# `hydrate_filter`

```elixir
@spec hydrate_filter(map(), map(), MishkaGervaz.Table.Web.State.t()) :: map()
```

# `resolve_access`

```elixir
@spec resolve_access(module() | nil, module()) :: module()
```

# `resolve_and_store_labels`

```elixir
@spec resolve_and_store_labels(
  map(),
  map(),
  [String.t()],
  MishkaGervaz.Table.Web.State.t()
) :: map()
```

# `resolve_relation_loader`

```elixir
@spec resolve_relation_loader(module()) :: module()
```

# `resolve_url_sync`

```elixir
@spec resolve_url_sync(module() | nil, module()) :: module()
```

---

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