Current section

43 Versions

Jump to

Compare versions

9 files changed
+42 additions
-34 deletions
  @@ -1,5 +1,9 @@
1 1 # CHANGELOG
2 2
3 + ## v0.3.4 (2020-10-27)
4 +
5 + * Only add node to the URL if explicitly required to improve reliability in non-clustered environments
6 +
3 7 ## v0.3.3 (2020-10-24)
4 8
5 9 * Only show Calls/Outliers in Ecto Stats if extension is enabled
  @@ -78,4 +78,4 @@
78 78 {<<"optional">>,true},
79 79 {<<"repository">>,<<"hexpm">>},
80 80 {<<"requirement">>,<<"~> 0.4.1 or ~> 0.5">>}]]}.
81 - {<<"version">>,<<"0.3.3">>}.
81 + {<<"version">>,<<"0.3.4">>}.
  @@ -126,8 +126,8 @@ defmodule Phoenix.LiveDashboard.NavBarComponent do
126 126 end
127 127
128 128 defp render_item_link(socket, page, item, current, id) do
129 - params = maybe_put([nav: id], :info, page.params[:info])
130 - path = live_dashboard_path(socket, page.route, page.node, params)
129 + # The nav ignores all params, except the current node if any
130 + path = live_dashboard_path(socket, page.route, page.node, page.params, nav: id)
131 131 class = "nav-link#{if current == id, do: " active"}"
132 132
133 133 case item[:method] do
  @@ -136,9 +136,6 @@ defmodule Phoenix.LiveDashboard.NavBarComponent do
136 136 end
137 137 end
138 138
139 - defp maybe_put(keyword, _key, nil), do: keyword
140 - defp maybe_put(keyword, key, value), do: [{key, value} | keyword]
141 -
142 139 defp render_content(socket, page, component_or_fun) do
143 140 case component_or_fun do
144 141 {component, component_assigns} ->
  @@ -7,11 +7,15 @@ defmodule Phoenix.LiveDashboard.Helpers do
7 7 @doc """
8 8 Computes a route path to the given route, node, and params.
9 9 """
10 - def live_dashboard_path(socket, route, node, params) do
10 + def live_dashboard_path(socket, route, node, old_params, new_params) when is_atom(node) do
11 11 apply(
12 12 socket.router.__helpers__(),
13 13 :live_dashboard_path,
14 - [socket, :page, node, route, params]
14 + if node == node() and is_nil(old_params["node"]) do
15 + [socket, :page, route, new_params]
16 + else
17 + [socket, :page, node, route, new_params]
18 + end
15 19 )
16 20 end
17 21
  @@ -19,15 +23,15 @@ defmodule Phoenix.LiveDashboard.Helpers do
19 23 Computes a router path to the current page.
20 24 """
21 25 def live_dashboard_path(socket, %{route: route, node: node, params: params}) do
22 - live_dashboard_path(socket, route, node, params)
26 + live_dashboard_path(socket, route, node, params, params)
23 27 end
24 28
25 29 @doc """
26 30 Computes a router path to the current page with merged params.
27 31 """
28 - def live_dashboard_path(socket, %{route: route, node: node, params: params}, extra) do
29 - params = Enum.into(extra, params, fn {k, v} -> {Atom.to_string(k), v} end)
30 - live_dashboard_path(socket, route, node, params)
32 + def live_dashboard_path(socket, %{route: route, node: node, params: old_params}, extra) do
33 + new_params = Enum.into(extra, old_params, fn {k, v} -> {Atom.to_string(k), v} end)
34 + live_dashboard_path(socket, route, node, old_params, new_params)
31 35 end
32 36
33 37 @doc """
  @@ -21,7 +21,7 @@ defmodule Phoenix.LiveDashboard.PageLive do
21 21 timer: nil
22 22
23 23 @impl true
24 - def mount(%{"node" => _, "page" => page} = params, %{"pages" => pages} = session, socket) do
24 + def mount(%{"page" => page} = params, %{"pages" => pages} = session, socket) do
25 25 case Enum.find(pages, :error, fn {key, _} -> Atom.to_string(key) == page end) do
26 26 {_id, {module, page_session}} ->
27 27 assign_mount(socket, module, pages, page_session, params, session)
  @@ -57,18 +57,20 @@ defmodule Phoenix.LiveDashboard.PageLive do
57 57 end
58 58
59 59 defp assign_params(socket, params) do
60 - update_page(socket, params: params, info: info(params), route: route(params))
60 + update_page(socket, params: params, info: params["info"], route: route(params))
61 61 end
62 62
63 63 defp route(%{"page" => page}), do: String.to_existing_atom(page)
64 64
65 - defp info(%{"info" => info} = params), do: {info, Map.delete(params, "info")}
66 - defp info(%{}), do: nil
67 -
68 65 defp assign_node(socket, params) do
69 - param_node = Map.fetch!(params, "node")
66 + found_node =
67 + if param_node = params["node"] do
68 + Enum.find(nodes(), &(Atom.to_string(&1) == param_node))
69 + else
70 + node()
71 + end
70 72
71 - if found_node = Enum.find(nodes(), &(Atom.to_string(&1) == param_node)) do
73 + if found_node do
72 74 if connected?(socket) do
73 75 :net_kernel.monitor_nodes(true, node_type: :all)
74 76 end
  @@ -210,9 +212,10 @@ defmodule Phoenix.LiveDashboard.PageLive do
210 212
211 213 defp live_info(_socket, %{info: nil}), do: nil
212 214
213 - defp live_info(socket, %{info: {title, params}, node: node} = page) do
215 + defp live_info(socket, %{info: title, node: node, params: params} = page) do
214 216 if component = extract_info_component(title) do
215 - path = &live_dashboard_path(socket, page.route, &1, Enum.into(&2, params))
217 + params = Map.delete(params, "info")
218 + path = &live_dashboard_path(socket, page.route, &1, params, Enum.into(&2, params))
216 219
217 220 live_modal(socket, component,
218 221 id: title,
  @@ -266,7 +269,7 @@ defmodule Phoenix.LiveDashboard.PageLive do
266 269 page = socket.assigns.page
267 270
268 271 if node && node != page.node do
269 - to = live_dashboard_path(socket, page.route, node, page.params)
272 + to = live_dashboard_path(socket, page.route, node, page.params, page.params)
270 273 {:noreply, push_redirect(socket, to: to)}
271 274 else
272 275 {:noreply, redirect_to_current_node(socket)}
  @@ -297,7 +300,7 @@ defmodule Phoenix.LiveDashboard.PageLive do
297 300
298 301 defp maybe_link(socket, page, {:enabled, text, route}) do
299 302 live_redirect(text,
300 - to: live_dashboard_path(socket, route, page.node, []),
303 + to: live_dashboard_path(socket, route, page.node, page.params, []),
301 304 class: "menu-item"
302 305 )
303 306 end
  @@ -335,7 +338,7 @@ defmodule Phoenix.LiveDashboard.PageLive do
335 338 end
336 339
337 340 defp redirect_to_current_node(socket) do
338 - push_redirect(socket, to: live_dashboard_path(socket, :home, node(), []))
341 + push_redirect(socket, to: live_dashboard_path(socket, :home, node(), %{}, %{}))
339 342 end
340 343
341 344 defp update_page(socket, assigns) do
Loading more files…