Issues with updating live view stream during handle_param

I have a simple list of items in a stream as well as some sort links:

  def mount(_params, _session, socket) do
    if connected?(socket), do: Items.subscribe()

    socket =
      |> assign(
        username: Accounts.current_username(socket.assigns.current_user),
    {:ok, socket}

def handle_params(params, _uri, socket) do
    user_id =
    sort_by = valid_sort_by(params)
    sort_order = valid_sort_order(params)

    page = param_to_integer(params["page"], 1)
    per_page = param_to_integer(params["per_page"], 9)

    date = Date.utc_today()

    year = param_to_integer(params["year"], date.year)
    month = param_to_integer(params["month"], date.month)

    options = %{
      sort_by: sort_by,
      sort_order: sort_order,
      page: page,
      per_page: per_page,
      year: year,
      month: month

    items = list_items(%{user_id: user_id}, options)

    socket =
      |> stream(:items, items)
      |> assign(:options, options)

    {:noreply, socket}

def sort_link(assigns) do
      class="px-4 w-32 text-center"
        ~p"/items?#{%{@options | sort_by: @sort_by, sort_order: next_sort_order(@options.sort_order)}}"
      <%= render_slot(@inner_block) %>
      <%= sort_indicator(@sort_by, @options) %>

Whenever I click on the sort_link, the items returned from list_items do update within the assigns (checked using inspect, but the view doesn’t update unless I reload (or if I use navigate instead of patch).

I’m curious why this is. Is there something that I’m missing here?

After re-reading the docs carefully, it seems like there is a :reset options which can reset the stream on the client. It seems to work for me but not sure if this is what it is used for (updating the streams on the view when filter is added to handle_params)