Hello everyone!
I am developing a library to manage resources in an application. The User may use a macro from my library in order to generate several live views for example to show or edit a resource.
# pseudo code in router
my_macro("/path", LiveView)
# which will eventually generate
live "/path", LiveView, :index
live "/path", LiveView, :edit
...
In my library I defined a function to call the router helper functions in the application using my library.
So I could link to an user edit page by calling Routes.user_path(Endpoint, :edit, resource)
. This works fine until the user adds additional params to the path when using my macro.
For example the user maybe wants to define
my_macro("/:param/path", LiveView)
The generated router helpers functions do not work anymore, because I have to pass additional params to it: Routes.user_path(Endpoint, :edit, **param**, resource)
I came up with several solutions, but they are all kind of hacky.
Solution 1:
Somehow get the base url (the url without query params) and construct the paths manually without calling the router helper functions.
Solution 2:
Pass the path params to the router helper function. First, I have to get the path params, then I need to add them to the helper function calls dynamically.
This solution requires to get the path params only. Is there a way to get them easily? params
in handle_params
is a map that contains path and query params. How would you distinguish between them?
I wish there would be a helper function which takes the query and path params as an argument to generate a path.
Routes.user_path(Endpoint, :index, %{order_by: :asc, id: "xyz"}) => /xyz/user?order_by=asc
# instead of
Routes.user_path(Endpoint, :index, "xyz, "%{order_by: :asc}) => /xyz/user?order_by=asc
I know this would cause other problems, but would be the perfect solution for my problem.
I would love to hear about other ideas and solutions from you!