I want to only add the filter parameters in the URL when the user actually uses the filter, but right now they are part of the URL since I added them in handle_params
.
like this http://localhost:4000/products?page=1&per_page=5&min=&max=
when I use I fire the handle_event
for filtering it will be like this:
http://localhost:4000/products?page=1&per_page=5&min=500&max=1700
@impl true
def handle_params(params, _url, socket) do
page = String.to_integer(params["page"] || "1")
per_page = String.to_integer(params["per_page"] || "5")
paginate_options = %{page: page, per_page: per_page}
min = params["min"] || ""
max = params["max"] || ""
filter_options = %{min: min, max: max}
products = Products.list_products(paginate: paginate_options, filter: filter_options)
socket =
assign(socket,
options: paginate_options,
filter: filter_options,
products: products
)
{:noreply, socket}
end
def handle_event("filter", %{"min" => min, "max" => max}, socket) do
socket =
push_patch(socket,
to:
Routes.products_index_path(
socket,
:index,
page: socket.assigns.options.page,
per_page: socket.assigns.options.per_page,
min: min,
max: max
)
)
{:noreply, socket}
end
How do I append the filter parameters in the URL when the user is only using the filter functionality?