I have a liveview page that holds two flop tables. Everything works well with filters, as I’m using on_change for my filter_form and that works great. I’m able to keep an assign for each of my table filters.
The problem is that I don’t have this kind of mechanism for pagination, where I can push events (instead of changing the querystring params). Query strings would be nice to have, but is there a way for me to paginate both tables independently? Maybe I’m missing something?
Are you storing just the filters as opposed to the whole %Flop.Meta{} structs? This struct contains all flop info including filters, pagination, and sorting. You could also take a look at the following two functions from Flop Phoenix for how to manipulate and combine them into query params:
Option 1: Add a separate form for that control and add an event handler similar to:
def handle_event("set-page-size", %{"page_size" => page_size}, socket) do
flop = %{socket.assigns.meta.flop | page_size: page_size}
path = Flop.Phoenix.build_path(~p"/entities", flop)
{:noreply, push_patch(socket, to: path)}
end
Or if you don’t care about having the filter parameters in the URL, query the data right there.
Option 2: The filter_fields component renders a hidden input for the page size. You should be able to place a page size input after filter_fields. If we adapt the example from the readme, it might look something like this:
That worked flawlessly. I took the first option, but the second would work for some designs. Would you like a PR for documentation of this feature, or no? Particularly, the build_path and the right place to hook custom filter fields were hard to find.
After working with this library for a bit, I wholeheartedly recommend it. I love that everything is done through navigation links, so the whole browser experience on the liveview page is wonderful. There are lots of options to hook everything we need. Thanks for your time on this.