# `Combo.Inertia.ScrollMetadata`
[🔗](https://github.com/combo-lab/combo_inertia/blob/v2.0.0/lib/combo/inertia/scroll_metadata.ex#L1)

Protocol for extracting scroll metadata from paginated data structures.

This protocol allows different pagination libraries to provide their own
implementation for extracting metadata needed by the InfiniteScroll component.

## Required Metadata

Implementations should return a map with the following keys:

- `:page_name` - The query parameter name for pagination (e.g., "page")
- `:current_page` - The current page number
- `:previous_page` - The previous page number, or nil if on first page
- `:next_page` - The next page number, or nil if on last page

## Example Implementation

    defimpl Inertia.ScrollMetadata, for: Scrivener.Page do
      def to_scroll_metadata(page) do
        %{
          page_name: "page",
          current_page: page.page_number,
          previous_page: if(page.page_number > 1, do: page.page_number - 1),
          next_page: if(page.page_number < page.total_pages, do: page.page_number + 1)
        }
      end
    end

# `t`

```elixir
@type t() :: term()
```

All the types that implement this protocol.

# `to_scroll_metadata`

```elixir
@spec to_scroll_metadata(t()) :: %{
  page_name: String.t(),
  current_page: integer() | String.t() | nil,
  previous_page: integer() | String.t() | nil,
  next_page: integer() | String.t() | nil
}
```

Extracts scroll metadata from paginated data.

Returns a map with `:page_name`, `:current_page`, `:previous_page`, and `:next_page`.

---

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